我正在努力理解doc2vec的用法。我使用google搜索时看到的一些示例代码在一组文档上训练了一个玩具模型。接下来,我想找到模型认为与我的训练数据中的文档最匹配的文档。说我的文件是"这是一个示例文档"。
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。我想回答这个问题:"我的培训数据中哪些文档最接近文档'这是一个示例文档'",那么如何将similar_doc输出映射回培训数据?我不理解元组的数组,每个元组的后半部分必须是概率,但是' 0',' 1'等?
答案 0 :(得分:1)
如果提供了培训中已知的doc-tag,most_similar()
将返回10个最相似的文档标签列表及其余弦相似度分数。要获取向量,您需要查找返回的标记:
vector_for_1 = model.docvecs['1']
该模型不存储原始文本;如果你需要查找它们,你需要记住你自己的标签到文本的关联。
重要说明:
Doc2Vec / Word2Vec不适用于玩具大小的示例:最终向量的有用相对定位需要大量不同的示例。 (你有时会从小型数据集中挤出中等结果,就像在一些gensim测试用例和初学者演示中所做的那样,通过使用更小的向量和更多的训练迭代 - 但即使在那里,该代码也使用了数百个文本数百个单词。)
小心地从随机网站复制培训代码,很多这样的例子都很破碎或过时。
infer_vector()
通常可以使用比默认值5更大的steps
值,特别是对于短文本。对于非默认的起始alpha
,它通常也能更好地工作,例如0.025(与训练默认值相同)。