我正在玩gensim的Doc2Vec,分析stackexchange转储以分析问题的语义相似性,以识别重复项。
Doc2Vec-Tutorial上的教程似乎将输入描述为带标签的句子。
但原始论文:Doc2Vec-Paper声称该方法可用于推断段落/文档的固定长度向量。
在这种情况下,有人可以解释句子和文档之间的区别,以及如何推断段落向量。
因为问题有时可以跨越多个句子, 我想,在训练期间,我会给同一个问题产生相同标签的句子,但那么我怎么能在看不见的问题上推断这个呢?
这本笔记本:Doc2Vec-Notebook
似乎是TRAIN和TEST文档上的培训向量,有人可以解释这背后的基本原理吗?我应该这样做吗?
答案 0 :(得分:2)
Gensim的Doc2Vec希望您提供与示例TaggedDocument类相同的对象形状的文本示例:同时具有words
和tags
属性。
words
是文本字符串标记的有序序列 - 它们可能是单句,或段落,或长文档,由您自己决定。
tags
是要从文本中学习的标记列表 - 例如plain int或string-tokens,它们以某种方式用于命名相应的文本。在原始的“段落向量”文章中,它们只是每个文本的唯一ID - 例如整数从0开始单调递增。(因此第一个TaggedDocument可能只有tags
只有[0]
,下一个{ {1}}等。)
算法只适用于文本块,而不知道句子/段落/文档等可能是什么。 (为了Doc2Vec的目的,只考虑它们所有的'文档',你从你的语料库中决定什么是正确的'文档'。)标记化甚至常见的是保留标点符号,例如句子之间的句点,作为独立的标记。
通过[1]
方法进行推理,该方法采用强制参数infer_vector()
,该参数应该是一个字符串标记列表,就像在文本doc_words
期间提供的那样。训练。
您不会在推断的文本中提供任何标记:Doc2Vec只会返回一个原始向量,该向量在模型学习的关系中很好地适合文本。 (即:向量擅长预测文本的单词,就像在批量训练中学习的向量和内部模型权重能够很好地预测训练文本的单词一样。)
请注意,许多人通过增加可选的words
参数(并且可能将推理开始steps
减少到更像是批量训练起始alpha,0.025到0.05)来推断出更好的结果。
doc2vec-IMDB演示笔记本尝试从原始段落向量文件中重现其中一个实验,因此它遵循那里描述的内容,以及其中一位作者(Mikolov)曾发布过的演示脚本。由于“测试”文档(不包括其目标标签/已知情绪)可能仍然可用,在培训时间,为了帮助改进文本建模,在无人监督的Doc2Vec培训期间包含原始文本是合理的。 (在训练使用doc-vectors的分类器时,他们的已知标签不。
(请注意,目前,2017年2月,doc2vec-IMDB演示笔记本与目前的gensim Doc2Vec默认设置和最佳实践相比有点过时 - 特别是模型没有给出正确的显式alpha
值使后面的手动循环 - 和 - iter=1
只做正确的训练过程。)