2017-08-12 196 views
0

初学者的问题,但我有点困惑。希望这个问题的答案也可以让NLP中的其他初学者受益。使用平均方法从word2vec单词向量计算句子向量的具体步骤是什么?

这里有一些更多的细节:

我知道你可以从word2vec生成的单词矢量计算句子载体。但是,制定这些句子向量所涉及的实际步骤是什么?任何人都可以提供一个直观的例子,然后一些计算来解释这个过程?

eg:假设我有一个三个字的句子:今天很热。假设这些词具有假设的矢量值:(1,2,3)(4,5,6)(7,8,9)。通过对这些单词向量进行分量平均来获得句子向量吗?如果向量的长度不同,例如:(1,2)(4,5,6)(7,8,9,23,76)这些情况下的平均过程是什么样的?

回答

0

对于您的示例,3个单词向量(每个3维)的平均值将产生一个3维单向量。

质心的VEC = 1/3 *(1 + 4 + 7,2 + 5 + 8,3 + 6 + 9)=(4,5,6)

一种更好的方式来获得一个单文档的矢量是使用通常称为doc2vec的段落矢量。

1

通过平均单词向量来创建长度为文本(句子/段落/文档)的向量是一种简单的方法。 (这不是很大的捕捉阴影-的善意,但它很容易做到。)

使用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) 

是否使用原始字矢量,或者单位归一化的单词向量或者通过一些单词重要性度量加权的单词向量是可以考虑的替代方法。

彼此兼容的单词向量将具有相同的维数,所以从来没有尝试平均不同大小的向量的问题。

其他技术如'Paragraph Vectors'(gensim中的Doc2Vec)可能会在某些语料库中为某些目的提供更好的文本向量。

其他用于比较利用单词向量的文本的相似性的技术,比如“Word Mover's Distance”(WMD),与比较单个汇总向量相比,可能会产生更好的成对文本相似度分数。 (大规模杀伤性武器不会将文本缩减为单个矢量,并且计算起来可能很昂贵。)

相关问题