Doc2Vec中most_similar结果解读及训练数据映射咨询
搞定你的Doc2Vec疑惑
嘿,我来帮你把这些困惑逐个拆解清楚:
1. '0'、'1'这类标签到底是什么?
这些字符串数字,是训练时给每个文档分配的唯一ID标签。
- 大部分示例代码里,会直接用文档在训练列表里的索引当标签(比如第0个文档标
'0',第1个标'1'),省得手动想标签名;如果你用TaggedDocument构造训练数据,也可以自己给每个文档指定自定义标签(比如给某篇新闻标"news_20240501")。 - 模型训练时会把每个标签和对应的文档向量绑定,后续就能通过标签快速定位到对应文档的向量。
2. 元组里的第二个值不是概率!
你看到的0.8838、0.8753这些数,是余弦相似度得分,范围在[-1, 1]之间:
- 越接近
1,说明两个文档的向量越像; - 越接近
-1,说明向量差异越大; - 趋近于
0的话,就表示两者没啥相似性。
3. 怎么把结果对应回训练文档?
核心是训练时就保存好标签和原始文档的映射关系,比如用个字典存起来:
# 假设你的训练文档都存在这个列表里 train_docs = ["第一个训练文档内容...", "第二个训练文档内容...", "第三个...", "第四个..."] # 建立「标签-文档」的映射,这里用索引当标签,和示例代码对应 tag_to_doc = {str(idx): doc for idx, doc in enumerate(train_docs)} # 之后拿到similar_doc结果,直接查字典就行 for tag, similarity in similar_doc: print(f"标签{tag}对应的文档:{tag_to_doc[tag]},相似度:{similarity}")
4. 你代码里有个小坑!
你现在调用的model.docvecs.most_similar('1'),是在找和标签为'1'的训练文档最像的其他训练文档,但你的需求是找和测试文档「This is a sample document」最相似的训练文档,所以得用你推断出来的向量v来查询:
# 注意要把v放到列表里传入 similar_to_test = model.docvecs.most_similar([v]) print(similar_to_test)
这样出来的结果,才是你真正想要的和测试文档匹配的训练文档列表~
内容的提问来源于stack exchange,提问作者Lin Endian
相关产品推荐
相关产品推荐

