给出最相似的单词,给出单词的向量(不是单词本身)

时间:2016-06-14 17:22:32

标签: python gensim word2vec

使用gensim.models.Word2Vec库,您可以提供模型和"字"您想要找到最相似的单词列表:

model = gensim.models.Word2Vec.load_word2vec_format(model_file, binary=True)
model.most_similar(positive=[WORD], topn=N)

我想知道是否有可能将系统作为模型和"矢量"的输入,并要求系统返回顶部相似的单词(它们的向量非常接近给定的向量) )。类似于:

model.most_similar(positive=[VECTOR], topn=N)

我需要这个功能用于双语设置,其中我有2个模型(英语和德语),以及一些我需要找到他们最相似的德语候选人的英语单词。 我想要做的是从英语模型中获取每个英语单词的向量:

model_EN = gensim.models.Word2Vec.load_word2vec_format(model_file_EN, binary=True)
vector_w_en=model_EN[WORD_EN]

然后用这些向量查询德国模型。

model_DE = gensim.models.Word2Vec.load_word2vec_format(model_file_DE, binary=True)
model_DE.most_similar(positive=[vector_w_en], topn=N)

我使用word2vec包中的原始距离函数在C中实现了这一点。但是,现在我需要它在python中,以便能够将它与我的其他脚本集成。

你知道gensim.models.Word2Vec库或其他类似的库中是否有一个方法可以做到这一点吗?我需要自己实施吗?

2 个答案:

答案 0 :(得分:17)

方法similar_by_vector按向量返回前N个最相似的单词:

similar_by_vector(vector, topn=10, restrict_vocab=None)

答案 1 :(得分:0)

我认为您要达到的目标无法给出准确的答案。仅仅因为两个模型是分开训练的。而且尽管英语和德语模型在各自的词向量之间的距离都相似。不能保证“房屋”的词向量与“ Haus”的词向量具有相同的方向。

简单来说,如果您训练两个模型的向量大小均为3。 而且“房屋”的矢量为[0.5,0.2,0.9],不能保证“豪斯”的矢量为[0.5,0.2,0.9]或什至接近矢量。

为了解决这个问题,您可以先将英语单词翻译成德语,然后使用该单词的向量在德语模型中寻找相似的单词。

TL:DR; 您不能只是将向量从一种语言模型插入另一种语言模型并期望获得准确的结果。