如何在 doc2vec 中找到最相似的 terms/words 文档?

How to find most similar terms/words of a document in doc2vec?

我已经应用 Doc2vec 将文档转换为 vectors.After,我在聚类中使用了向量,并找出了 5 nearest/most 个与每个聚类的质心相似的文档。现在我需要找到这些文档中最主要或最重要的术语,以便我可以找出每个集群的特征。 我的问题是有什么方法可以找出 Doc2vec 中文档的最主要或最相似 terms/word 。我正在使用 python 的 gensim 包来实现 Doc2vec

要找出聚类中最主要的词,您可以使用这两种经典方法中的任何一种。我个人发现第二个对于此目的非常有效。

  • Latent Drichlet Allocation (LDA):一种主题建模算法,可以在给定一组文档的情况下为您提供一组主题。您可以将集群中的一组相似文档视为一个文档,并应用 LDA 生成主题并查看跨文档的主题分布。

  • TF-IDF:TF-IDF 计算一个词对给定文档集合的文档的重要性。因此,要找到最重要的 keywords/ngrams,您可以为文档中出现的每个单词计算 TF-IDF。 TF-IDF 最高的词就是你的关键词。所以:

    • 根据包含该关键字的文档数量计算出现在文档中的每个单词的 IDF
    • 连接相似文档的文本(我称之为超级文档),然后计算出现在这个超级文档中的每个单词的 TF
    • 计算每个词的 TF*IDF...然后是 TA DAAA...您的关键字与每个聚类相关联。

    查看第 5.1 节,了解有关 TF-IDF.

  • 用法的更多详细信息

@TrnKh 的 很好,但是在使用 Doc2Vec 时还有一个额外的选项可用。

一些 gensim Doc2Vec 训练模式——默认的 PV-DM (dm=1) 或添加了单词训练的 PV-DBOW (dm=0, dbow_words=1) 将 doc-vectors 和 word-vectors 训练成相同的坐标 space,在某种程度上,这意味着文档向量靠近相关的词向量,反之亦然。

因此,您可以获取单个文档的向量,或您合成的 average/centroid 个向量,并将其提供给模型以查找 most_similar() 个单词。 (要清楚这是一个原始向量,而不是向量键列表,您应该使用 most_similar() 的形式指定 positive 个示例的显式列表。)

例如:

docvec = d2v_model.docvecs['doc77145']  # assuming such a doc-tag exists
similar_words = d2v_model.most_similar(positive=[docvec])
print(similar_words)