2017-02-15 86 views
3

我只是在使用gensim的Doc2Vec,分析stackexchange转储以分析问题的语义相似性以识别重复项。Doc2Vec:区分句子和文档

Doc2Vec-Tutorial上的教程似乎将输入描述为带标记的句子。

但原文:Doc2Vec-Paper声称该方法可用于推断段落/文档的固定长度向量。

有人可以解释在这种情况下,句子和文档之间的差异,以及我会如何推断段落向量。

由于一个问题有时可能会跨越多个句子,我认为,在培训期间,我会给同一个问题带来相同标签的句子,但那么我会如何做到这一点,推理看不见的问题?

而且这款笔记本:Doc2Vec-Notebook

似乎是培训训练和测试文档的载体,可以有人解释这样做的理由,我也应该这样做?

回答

1

Gensim's Doc2Vec期望您提供与示例TaggedDocument类相同对象形状的文本示例:同时具有wordstags属性。

words是文本的字符串标记的有序序列 - 它们可能是一个单独的文本,或者一个段落或一个长文档,这取决于您。

tags是从文本中学习的标签列表 - 例如纯整数或字符串标记,以某种方式命名相应的文本。在原来的“段落向量”纸,他们只是每个文本唯一的ID - 如整数从0单调递增(所以第一TaggedDocument可能只是一个[0]tags,下[1]等)

该算法仅适用于大量文本,并不知道文章/段落/文档等可能是什么。 (为了Doc2Vec的目的,只要将它们全部视为“文档”,您就可以决定从您的语料库中选择正确的“文档”)。标记化将标点符号(如句子之间的句点)保留为独立标记。经由infer_vector()方法,它接受一个强制参数doc_words,这应该是发生

推断列表的字符串的令牌就这样在训练期间被提供作为文本words那些。

您不会在推断的文本上提供任何标签:Doc2Vec只会给您一个原始矢量,该矢量在模型学习的关系中很好地适合文本。 (也就是说:矢量很好地预测了文本的单词,就像在批量训练期间学习的矢量和内部模型权重在预测训练文本的单词方面一样。)

请注意,很多人已经发现更好通过增加可选的steps参数(并且可能将开始alpha的推断减少为更像是开始α的批量训练,0.025至0.05)推断的结果。

doc2vec-IMDB演示笔记本尝试复制原始Paragraph Vectors文件中的一个实验,因此它遵循这里描述的内容以及其中一位作者(Mikolov)发布的演示脚本。由于'测试'文档(没有他们的目标标签/已知情绪)在培训时可能仍然可用,为了帮助改进文本建模,在无监督的Doc2Vec培训期间包含其原始文本可能是合理的。 (它们的已知标签是而不是,用于训练使用doc-vectors的分类器时使用)。

(请注意,此刻,2017年2月,doc2vec-IMDB演示笔记本有点过期相比目前的gensim Doc2Vec默认&最佳做法 - 尤其是模型没有给出正确的显式iter=1值,以使后面的手动循环和train()只做正确的训练通行证。)