在word2vec中获取两个单词之间最常见的上下文

时间:2018-06-10 11:13:36

标签: machine-learning nlp word2vec gensim

我已经使用gensim word2vec构建了自己的Skip-Gram模型。我知道我可以得到两个单词之间的相似性分数,例如model.wv.similarity('car', 'truck') -> 0.75。现在我想知道为什么他们是这样的"类似的"。

由于Skip-Gram已经使用上下文单词进行了训练,我认为有一种方法可以在cartruck之间共享最常用的上下文单词。另一个例子:如果我有以下句子,我希望将单词slow作为"最常见的语境":

  • the car is slow
  • the truck is slow
  • the car is red

请注意,red不会显示truck,因此不应将其作为"最常见的上下文&#34 ;.

返回

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

gensim Word2Vec模型不存储所有文本或同现统计信息。从本质上讲,训练行为迫使模型太小而无法记住所有此类共现,以便在进行附近文本预测时尽可能地执行。

所以,没有直接的方式来问它"给出N附近的单词,什么是最常见的上下文单词"。此外,训练的目的是创建恰好在其他方面有用的单词向量,而不是实际创建最佳的邻近单词预测变量。因此,通过接口方法可以获得Word2Vec模型的内部预测很少见 - 例如,来自Google的原始word2vec.c代码没有为此提供接口。 。

predict_output_word()中有一种新的实验方法gensim,它在某种程度上模拟了给定一些上下文单词的模型预测。但是,它并没有像训练期间那样对上下文单词进行相当大的权重,并且在所有模型模式下都不起作用。尽管如此,它可能会有类似于您原始目标的有用输出,因此请查看:

https://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec.predict_output_word

(如果你真的需要一个精确的报告,说明在你的语料库中的N个其他单词的W个点中最常找到哪些单词,你必须使用其他非Word2Vec代码来构建必要的合作发生查找表,或重新扫描每个查询的语料库。)

答案 1 :(得分:0)

使用gensim,您可以获得给定嵌入的N个最接近的单词。为什么不试图获得" car"的平均向量?和"卡车" ([v(car)+ v(货车)] / 2)然后在模型中查询该平均向量的最接近的单词?