【问题标题】:Hierarchical training for doc2vec: how would assigning same labels to sentences of the same document work?doc2vec 的分层培训:如何为同一文档的句子分配相同的标签?
【发布时间】:2018-06-24 22:25:09
【问题描述】:

给doc2vec中的一堆句子分配同一个标签有什么效果?我有一个文档集合,我想使用 gensim 来学习向量来执行“文件”分类任务,其中文件是指给定 ID 的文档集合。我有几种标记方式,我想知道它们之间有什么区别,哪种是最好的 -

  • 获取一个文档 d1,为标签分配标签 doc1 并训练。为其他人重复

  • 获取一个文档 d1,为标签分配标签 doc1。然后将文档标记为句子并为其标签分配标签doc1,然后使用完整文档和单个句子进行训练。为其他人重复

例如(忽略该句子未标记化)-

Document -  "It is small. It is rare" 
TaggedDocument(words=["It is small. It is rare"], tags=['doc1'])
TaggedDocument(words=["It is small."], tags=['doc1'])
TaggedDocument(words=["It is rare."], tags=['doc1'])
  • 与上述类似,但也为每个句子分配一个唯一标签以及doc1。完整文档包含所有句子标签以及doc1。

示例 -

Document -  "It is small. It is rare" 
TaggedDocument(words=["It is small. It is rare"], tags=['doc1', 'doc1_sentence1', 'doc1_sentence2'])
TaggedDocument(words=["It is small."], tags=['doc1', 'doc1_sentence1'])
TaggedDocument(words=["It is rare."], tags=['doc1', 'doc1_sentence2'])

我还有一些额外的分类标签要分配。那么最好的方法是什么?

【问题讨论】:

    标签: python nlp word2vec gensim doc2vec


    【解决方案1】:

    你可以做到这一切!将相同的标签分配给多个文本几乎与将这些文本组合成一个更大的文本并为其分配该标签具有相同的效果。细微的差别在于Doc2Vec 模式,其中有一个上下文窗口 – PV-DM (dm=1)。使用单独的文本,永远不会有上下文延伸到句子的结尾/开头。

    事实上,由于gensim 的优化代码路径对文本大小有 10,000 个标记的限制,因此将较大的文档拆分为子文档,但有时需要重复它们的标签作为一种解决方法。

    您具体提出的建议,即同时训练完整文档和文档片段,会起作用,但也会使文本量加倍(因此训练注意力/个人预测示例)对于'doc1' 标签,与更窄的每句标签相比。您可能想要,也可能不想要 - 它可能会影响每个人的相对质量。

    什么是最好的尚不清楚 - 这取决于您的语料库和最终目标,因此应通过实验确定,并进行明确的最终评估,以便您可以自动化/系统化严格搜索最佳内容。

    不过有一些相关说明:

    • Doc2Vec 往往更适用于每个文档至少有十几个单词的文档。
    • 'words' 需要进行标记 - 字符串列表,而不是字符串。
    • 它受益于大量不同的数据,特别是如果您正在训练一个更大的模型——更多独特的标签(包括重叠的标签)和多维向量——你需要更多的数据来避免过度拟合。

    【讨论】:

    • 谢谢。我不是特别明白你所说的将文本加倍和“训练注意力/个人预测示例”的效果是什么意思?会不会导致过拟合?
    • 如果您有一个大型模型(在可调参数的总数中,这里本质上是 word/doc 向量)和相对较小的数据,则过度拟合主要是一种风险。但是,您不能仅通过重复将小数据变成大数据。 (如果您只有 2 个唯一的文档,通过将它们每个重复一百万次,它不会像 200 万个文档那样好。)如果您为一个文档提供 2 个标签,这有点像提供两次文档,一次用一个标记,一次与另一个。事实上,在 PV-DBOW 模式下 (dm=0),它就是这样工作的。 …
    • 在 PV-DM 模式 (dm=1) 中,同一个文档上的两个标签并不完全如此——但您提出的“一次性输入整个文本,然后再次拆分为句子”的方法其中句子有两个标签”再次意味着 'doc1' 标签在训练期间参与的单个目标词预测(“个人预测示例”)是(1)完全训练的两倍文档;或 (2) 仅对双标记句子进行训练。所以从某种意义上说,它得到了更多的努力。根据您的需要,这可能是好是坏。 …
    • 说明性示例:如果某些文档看起来特别重要,您可以考虑只重复它们,并让其他文档出现一次,这样重复的文档会对模型产生更大的影响。或者,考虑到如果文档的字长差异很大,他们的训练工作就会不平衡。 (一个 100 字的文档让模型尝试预测它的 100 个词,因此每次训练通过 100 次模型微调;一个 10 字的文档只有 10 个。)您可以尝试通过重复它们来增加小型文档的权重,或者减少较长的文档的权重(也许通过随机删除单词),以尝试平衡它们对模型和矢量质量的影响。 …
    • (我给出这些例子是为了说明效果,而不是具体的建议。但如果你确实注意到,例如,完整文档向量很好但句子不好,或者long-doc-vectors 好,short-doc-vectors 不好,你可以考虑尝试这些变体。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2020-07-17
    相关资源
    最近更新 更多