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

时间:2018-06-24 22:25:10

标签: python nlp word2vec gensim doc2vec

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

我还有一些其他的类别标签,这些标签将分配给我。那么最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以做所有这一切!将相同的标签分配给多个文本几乎具有与将这些文本组合成一个较大的文本并为其分配标签的效果相同。略有不同是针对存在上下文窗口的Doc2Vec模式– PV-DM(dm=1)。使用单独的文本,永远不会在句子的结尾/开头处出现上下文。

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

您特别建议的是,对完整文档和文档片段进行培训都行得通,但也会使文本数量增加一倍(从而提高了培训注意力/个体预测示例的效果) 'doc1'标签,相比之下,窄句子标签则更是如此。您可能想要或不想要-这可能会影响每个产品的相对质量。

最好的还不清楚-它取决于您的语料库和最终目标,因此应通过实验确定,并给出清晰的最终评估,以便您可以自动/系统地进行严格搜索以找到最好的。

不过,一些相关说明:

  • Doc2Vec往往与每个文档至少十几个单词或更多单词的文档配合使用会更好。
  • 'words'需要标记化-字符串列表,而不是字符串。
  • 它受益于大量不同的数据,尤其是如果您正在训练一个更大的模型-更多唯一的标签(包括重叠的标签)和多维向量-您将需要更多的数据以避免过拟合。 / li>