doc2vec 的分层训练:如何将相同的标签分配给同一文档的句子?

Hierarchical training for doc2vec: how would assigning same labels to sentences of the same document work?

在doc2vec中给一堆句子分配相同的标签有什么影响?我有一个文档集合,我想使用 gensim 学习向量以完成 "file" 分类任务,其中文件指的是给定 ID 的文档集合。我有几种标记方法,我想知道它们之间有什么区别,哪种最好 -

例如(忽略句子未分词)-

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'])

示例 -

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'])

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

这一切你都能做到!将同一个标签分配给多个文本具有 几乎 与将这些文本组合成一个更大的文本并为其分配该标签的效果相同。细微差别是 Doc2Vec 模式,其中有上下文 -window – PV-DM (dm=1)。对于单独的文本,永远不会有跨越 end/beginning 个句子的上下文。

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

您特别提出的训练完整文档和文档片段的方法会奏效,但也会使文本量加倍(因此 training-attention/individual-prediction-examples) 'doc1' 标签,与较窄的每句标签相比。你可能想要,也可能不想要——它可能会影响每个人的相对质量。

什么是最好的还不清楚 - 这取决于您的语料库和最终目标,因此应该通过实验来确定,并进行明确的最终评估,以便您可以 automate/systematize 严格搜索什么是最好的。

但有一些相关说明:

  • Doc2Vec 对于每个文档至少包含十几个或更多单词的文档往往效果更好。
  • 'words' 需要标记化 - 字符串列表,而不是字符串。
  • 它受益于大量不同的数据,特别是如果您正在训练更大的模型 – 更多独特的标签(包括重叠的标签)和多维向量 – 您将需要更多数据以避免过度拟合.