我已经构建了一个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"])
但它没有改变任何东西。如何找到给定文档中最相似的单词?
答案 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"]
,与第一个代码块一样。)