如何计算word2vec中的差异向量

Posted

技术标签:

【中文标题】如何计算word2vec中的差异向量【英文标题】:How to calculate difference vector in word2vec 【发布时间】:2019-11-14 09:16:21 【问题描述】:

我有一个二进制 word2vec 文件,我正在使用 gensim 来加载它。

虽然 gensim 中有两个词之间的similarity 函数,但没有计算和返回差向量的函数。

如何使用两个向量并获得差异向量?

而且我也在尝试将这些差异向量用作文档分类中的特征。计算每个单词和每个类之间的差异向量。这是正确的方法吗?

例如,如果类是 sportpolitics

sport = [0.4,0.456,45,...] #wordvector of class
politics = [0.23,0.56...] #wordvector of class

我的话是football

football = [0.2,0.6,0.45,...] #wordvector of football

我要计算差异向量

(sport - football) = [some vector] # this as a feature for classification

【问题讨论】:

【参考方案1】:

如何使用两个向量并获得差异向量?

您对简单地减去两个向量的预感似乎是正确的(来源:https://blog.galvanize.com/add-and-subtract-words-like-vectors-with-word2vec-2/)。如果我没记错的话,您可以使用 tensorflow 减去这些词向量 gensim 使用 tf.

而且我也在尝试将这些差异向量用作文档分类中的特征。计算每个单词和每个类之间的差异向量。这是正确的方法吗?

我不知道你的目标,但我会考虑训练你自己的神经网络,对单词/文档进行分类,我会看看新的包天赋来帮助你。 https://github.com/zalandoresearch/flair/issues/787

【讨论】:

【参考方案2】:

向量本身支持通过普通的 Python - 运算符进行减法运算,因此如果您加载的词向量在变量 wv 中,那么它真的很简单:

diff_vector = wv['sport'] - wv['football']

然后您可以尝试通过以下方式找到最接近新向量的其他向量:

wv.most_similar(positive=[diff_vector])

因为类比求解的常见情况需要正负向量的混合,most_similar() 方法甚至可以让您提供负例,因此您也可以在单个中完成差异和最相似步骤:

wv.most_similar(positive=['sport'], negative=['football')

(由于most_similar() 内部发生的一些不同的单位归一化顺序,结果可能与第一种方法略有不同。)

【讨论】:

以上是关于如何计算word2vec中的差异向量的主要内容,如果未能解决你的问题,请参考以下文章

深度学习-nlp系列:Word2Vec 字&词向量的训练和使用

word2vec词向量处理英文语料

python gensim使用word2vec词向量处理英文语料

python gensim使用word2vec词向量处理中文语料

word2vec词向量训练及中文文本相似度计算

使用word2vec计算词向量之间的相似度