5

我只是在玩 gensim 的 Doc2Vec,分析 stackexchange 转储以分析问题的语义相似性以识别重复项。

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

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

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

由于一个问题有时可以跨越多个句子,我想,在训练期间,我会给同一个问题产生的句子赋予相同的标签,但是我将如何在未见过的问题上进行推断向量呢?

还有这个笔记本:Doc2Vec-Notebook

似乎是关于 TRAIN 和 TEST 文档的训练向量,有人可以解释这背后的基本原理吗?我也应该这样做吗?

4

1 回答 1

4

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

它们是文本的words字符串标记的有序序列——它们可能是一个句子、一个段落或一个长文档,这取决于你。

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

该算法仅适用于文本块,不知道句子/段落/文档等可能是什么。(出于 Doc2Vec 的目的,只需将它们视为所有“文档”,您可以从语料库中决定什么是正确的“文档”。)标记化保留标点符号(例如句子之间的句点)作为独立标记甚至很常见.

推理通过该infer_vector()方法进行,该方法接受一个强制参数doc_words,它应该是一个字符串标记列表,就像words在训练期间作为文本提供的那些一样。

您不会在推断文本上提供任何标签:Doc2Vec 只是为您返回一个原始向量,该向量在模型学习的关系中非常适合文本。(即:向量擅长预测文本的单词,就像批量训练中学习的向量和内部模型权重擅长预测训练文本的单词一样。)

请注意,许多人通过增加可选steps参数(并且可能降低推理开始alpha更像批量训练起始 alpha,从 0.025 到 0.05)从推理中发现了更好的结果。

doc2vec-IMDB 演示笔记本试图重现原始段落向量论文中的一个实验,因此它遵循那里描述的内容,以及作者之一 (Mikolov) 曾经发布的演示脚本。由于“测试”文档(没有其目标标签/已知情感)在训练时可能仍然可用,以帮助改进文本建模,因此在无监督 Doc2Vec 训练期间包含其原始文本是合理的。(在训练使用文档向量的分类器时,使用它们的已知标签。)

(请注意,目前,2017 年 2 月,doc2vec-IMDB 演示笔记本与当前的 gensim Doc2Vec 默认值和最佳实践相比有点过时了——特别是模型没有给出正确的明确iter=1值来制作后面的手动循环train()并执行正确数量的训练通过。)

于 2017-02-16T03:49:52.740 回答