【问题标题】:Can gensim Doc2Vec be used to compare a novel document to a trained model?可以使用 gensim Doc2Vec 将新文档与训练模型进行比较吗?
【发布时间】:2020-01-03 21:33:29
【问题描述】:

我有一组文档,它们都符合预定义的类别,并且已经成功地从这些文档中训练了一个模型。

问题是,如果我有一个新文档,我如何计算这个新文档与我的训练模型的吻合程度?

我目前的解决方案:

novel_vector = model.infer_vector(novel_doc_words, steps = 20)
similarity_scores = model.docvecs.most_similar([novel_vector])
average = 0
for score in similarity_scores:
  average += score[1]
overall_similarity = average/len(similarity_scores)

我在文档中找不到任何方便的方法

【问题讨论】:

    标签: python python-3.x nlp gensim doc2vec


    【解决方案1】:

    对于整个模型,没有内置方法可以检查这种“符合”值。

    一种更典型的方法是匹配现有功能,即在各种文档上训练模型,而不仅仅是特定类别的文档。然后,在推断出一个新文档的向量后,计算它与感兴趣类别的文档的平均距离。

    如果您只在某个自相似类别的文档上训练模型,则学习的坐标空间将无法反映该类别之外的全部可能文档。 p>

    也就是说,如果您当前的代码(检查新文档与前 N 个最近邻居的相似程度)似乎可以为您的目的提供良好的结果,那么它可能是可以接受的。我只是期待一个在更广泛的文档上训练过的模型会得到更好的结果。

    【讨论】:

    • 这是有道理的,但 most_similar 仍然是正确的 API 吗?
    • most_similar() 将采用外部计算的向量作为报告附近其他已知向量的“原点”,所以可以肯定。 (在这种情况下,为了清楚起见,我更喜欢将positive' parameter explicitly, eg: similars = d2v_model.docvecs.most_similar(positive=[query_vector])`命名。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多