【问题标题】:Doc2Vec: Differentiate Sentence and DocumentDoc2Vec:区分句子和文档
【发布时间】:2017-02-16 11:49:52
【问题描述】:

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

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

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

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

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

还有这个笔记本:Doc2Vec-Notebook

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

【问题讨论】:

    标签: python gensim doc2vec


    【解决方案1】:

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

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

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多