我已经使用gensim word2vec构建了自己的Skip-Gram模型。我知道我可以得到两个单词之间的相似性分数,例如model.wv.similarity('car', 'truck') -> 0.75
。现在我想知道为什么他们是这样的"类似的"。
由于Skip-Gram已经使用上下文单词进行了训练,我认为有一种方法可以在car
和truck
之间共享最常用的上下文单词。另一个例子:如果我有以下句子,我希望将单词slow
作为"最常见的语境":
the car is slow
the truck is slow
the car is red
请注意,red
不会显示truck
,因此不应将其作为"最常见的上下文&#34 ;.
有没有办法做到这一点?
答案 0 :(得分:1)
gensim Word2Vec
模型不存储所有文本或同现统计信息。从本质上讲,训练行为迫使模型太小而无法记住所有此类共现,以便在进行附近文本预测时尽可能地执行。
所以,没有直接的方式来问它"给出N附近的单词,什么是最常见的上下文单词"。此外,训练的目的是创建恰好在其他方面有用的单词向量,而不是实际创建最佳的邻近单词预测变量。因此,通过接口方法可以获得Word2Vec
模型的内部预测很少见 - 例如,来自Google的原始word2vec.c代码没有为此提供接口。 。
在predict_output_word()
中有一种新的实验方法gensim
,它在某种程度上模拟了给定一些上下文单词的模型预测。但是,它并没有像训练期间那样对上下文单词进行相当大的权重,并且在所有模型模式下都不起作用。尽管如此,它可能会有类似于您原始目标的有用输出,因此请查看:
(如果你真的需要一个精确的报告,说明在你的语料库中的N个其他单词的W个点中最常找到哪些单词,你必须使用其他非Word2Vec代码来构建必要的合作发生查找表,或重新扫描每个查询的语料库。)
答案 1 :(得分:0)
使用gensim,您可以获得给定嵌入的N个最接近的单词。为什么不试图获得" car"的平均向量?和"卡车" ([v(car)+ v(货车)] / 2)然后在模型中查询该平均向量的最接近的单词?