初学者问题,但我对此有点困惑。希望这个问题的答案也能让其他 NLP 初学者受益。
以下是更多详细信息:
我知道你可以根据 word2vec 生成的词向量计算句子向量。但是制作这些句子向量的实际步骤是什么?谁能提供一个直观的例子和一些计算来解释这个过程?
例如:假设我有一个包含三个单词的句子:今天很热。假设这些单词的假设向量值为:(1,2,3)(4,5,6)(7,8,9)。我是否可以通过对这些词向量进行逐分量平均来获得句子向量?如果向量的长度不同,例如:(1,2)(4,5,6)(7,8,9,23,76),这些情况下的平均过程是什么样的?
最佳答案
通过对词向量进行平均来创建文本长度(句子/段落/文档)的向量是一种简单的方法。 (它不太擅长捕捉含义的深浅,但很容易做到。)
使用 gensim 库,可以很简单:
import numpy as np
from gensim.models.keyedvectors import KeyedVectors
wv = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin.gz', binary=True)
text = "the quick brown fox jumped over the lazy dog"
text_vector = np.mean([wv[word] for word in text.split()], axis=0)
是否使用原始词向量,或者单位标准化的词向量或通过某种词重要性度量进行加权的词向量是需要考虑的替代方案。
彼此兼容的词向量将具有相同的维度,因此尝试对不同大小的向量进行平均从来不存在问题。
其他技术,如“段落向量”(gensim 中的 Doc2Vec)可能会在某些语料库上为某些目的提供更好的文本向量。
利用词向量比较文本相似性的其他技术,例如“词移动器距离”(WMD),可能比比较单个摘要向量提供更好的成对文本相似性分数。 (WMD 不会将文本简化为单个向量,并且计算成本可能很高。)
关于python - 使用均值法从word2vec词向量计算句子向量的具体步骤是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45651644/