我正在玩gensim的Doc2Vec,分析stackexchange转储以分析问题的语义相似性以识别重复.
Doc2Vec-Tutorial上的教程似乎将输入描述为带标记的句子.
但原始论文:Doc2Vec-Paper声称该方法可用于推断段落/文档的固定长度向量.
在这种情况下,有人可以解释句子和文档之间的区别,以及如何推断段落向量.
由于问题有时可以跨越多个句子,
我想,在训练期间,我会给同一个问题产生相同标签的句子,但那么我怎么能在看不见的问题上推断这个呢?
似乎是在TRAIN和TEST文档上训练向量,有人可以解释这背后的基本原理,我应该这样做吗?
最佳答案 Gensim的Doc2Vec希望您提供与示例TaggedDocument类相同的对象形状的文本示例:同时具有单词和tags属性.
单词是文本的字符串标记的有序序列 – 它们可能是单个句子值,或段落,或长文档,这取决于您.
标签是要从文本中学习的标签列表 – 例如plain int或string-tokens,它们以某种方式用于命名相应的文本.在原始的“Paragraph Vectors”论文中,它们只是每个文本的唯一ID – 例如整数从0开始单调递增.(因此第一个TaggedDocument可能只有[0],下一个[1]等标签)
该算法只适用于文本块,而不知道句子/段落/文档等可能是什么. (为了Doc2Vec的目的,只考虑它们所有的’文档’,你从你的语料库中决定什么是正确的’文档’.)标记化甚至常见的是保留标点符号,例如句子之间的句点,作为独立的标记.
推理通过infer_vector()方法进行,该方法采用强制参数doc_words,它应该是一个字符串列表标记,就像在训练期间作为文本单词提供的那样.
您不会在推断文本中提供任何标记:Doc2Vec只会返回一个原始向量,该向量在模型学习的关系中很好地适合文本. (即:向量善于预测文本的单词,就像