【问题标题】:doc2vec get most similar documentdoc2vec 获取最相似的文档
【发布时间】:2018-05-20 19:03:03
【问题描述】:

我很难理解 doc2vec 的用法。我使用我在谷歌上看到的一些示例代码在一组文档上训练了一个玩具模型。接下来,我想找到模型认为与我的训练数据中的文档最匹配的文档。假设我的文档是“这是一个示例文档”。

test_data = word_tokenize("This is a sample document".lower())
v = model.infer_vector(test_data)
print(v)
# prints a numpy array.

# to find most similar doc using tags
similar_doc = model.docvecs.most_similar('1')
print(similar_doc)
# prints [('0', 0.8838234543800354), ('1', 0.875300943851471), ('3', 
#          0.8752948641777039), ('2', 0.865660548210144)]

我进行了相当多的搜索,但我很困惑如何解释similar_doc。我想回答这个问题:“我的训练数据中的哪些文档与文档'This is a sample document'最匹配”,那么如何将similar_doc 输出映射回训练数据?元组数组看不懂,每个元组的后半部分一定是概率但是什么是'0'、'1'等?

【问题讨论】:

  • 您可以计算向量之间的距离并比较这些距离。也许将similar_docv 进行比较?当然,如果它们都是向量...
  • 您将“1”作为正向量传递给 most_similar(),因此模型显然返回最接近的向量:“0”、“3”、“1”等相同的语义性质。我猜你应该写similar_doc = model.docvecs.most_similar(v)

标签: python machine-learning gensim doc2vec


【解决方案1】:

当提供从训练中已知的文档标签时,most_similar() 将返回 10 个最相似的文档标签的列表,以及它们的余弦相似度分数。然后要获取向量,您需要查找返回的标签:

vector_for_1 = model.docvecs['1']

模型不存储原文;如果您需要查找它们,您需要记住您自己的标签与文本的关联。

重要提示:

  • Doc2Vec/Word2Vec 不适用于玩具大小的示例:最终向量的有用相对定位需要大量不同的示例。 (你有时可以从小型数据集中挤出中等结果,就像在一些 gensim 测试用例和初学者演示中所做的那样,通过使用更小的向量和更多的训练迭代——但即使在那里,该代码也使用了数百个文本数百字。)

  • 从随机站点复制训练代码时要小心,很多这样的示例都非常损坏或过时。

  • infer_vector() 通常受益于使用比默认值 5 更大的 steps 值,尤其是对于短文本。对于非默认起始alpha,例如 0.025(与训练默认值相同),它通常也能更好地工作。

【讨论】:

    猜你喜欢
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 2019-04-29
    相关资源
    最近更新 更多