如何在gensim doc2vec中获得与文档最相似的单词?

时间:2018-03-07 00:46:24

标签: word2vec gensim doc2vec

我已经构建了一个gensim Doc2vec模型。我们称之为doc2vec。现在我想根据我的doc2vec模型找到给定文档中最相关的单词。

例如,我有一个关于“java”的文档,标签为“doc_about_java”。当我要求提供类似的文档时,我会获得有关其他编程语言和与java相关的主题的文档。所以我的文档模型效果很好。

现在我想找到与“doc_about_java”最相关的单词。

我按照封闭式问题How to find most similar terms/words of a document in doc2vec?中的解决方案,它给了我看似随机的单词,“java”这个词甚至不在前100个相似的单词中:

docvec = doc2vec.docvecs['doc_about_java']
print doc2vec.most_similar(positive=[docvec], topn=100)

我也尝试过这样:

print doc2vec.wv.similar_by_vector(doc2vec["doc_about_java"])

但它没有改变任何东西。如何找到给定文档中最相似的单词?

1 个答案:

答案 0 :(得分:1)

并非所有Doc2Vec模式都训练单词向量。特别是,PV-DBOW模式dm=0通常在doc-vector比较中非常有效,它将字向量留在随机分配(和未使用)的位置。

这可以解释为什么您最初尝试获取相关列表的结果似乎是随机的。

要获得单词向量,您需要使用PV-DM模式(dm=1),或者向PV-DBOW(dm=0, dbow_words=1)添加可选的并发单词向量训练。

(如果这不是问题,您的培训设置可能还有其他问题,因此您应该显示有关数据源,大小和代码的更多详细信息。)

(另外,您的替代尝试代码行,使用doc2vec["doc_about_java"]检索"doc_about_java"的字词向量(可能根本不存在)。要获取doc-vector,请使用doc2vec.docvecs["doc_about_java"],与第一个代码块一样。)