doc2vec 的分层训练:如何将相同的标签分配给同一文档的句子?
Hierarchical training for doc2vec: how would assigning same labels to sentences of the same document work?
在doc2vec中给一堆句子分配相同的标签有什么影响?我有一个文档集合,我想使用 gensim 学习向量以完成 "file" 分类任务,其中文件指的是给定 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'])
我还有一些额外的分类标签要分配。那么最好的方法是什么?
这一切你都能做到!将同一个标签分配给多个文本具有 几乎 与将这些文本组合成一个更大的文本并为其分配该标签的效果相同。细微差别是 Doc2Vec
模式,其中有上下文 -window – PV-DM (dm=1
)。对于单独的文本,永远不会有跨越 end/beginning 个句子的上下文。
事实上,由于 gensim
的优化代码路径对文本大小有 10,000 个标记的限制,因此将较大的文档拆分为子文档,但有时需要重复它们的标签作为解决方法。
您特别提出的训练完整文档和文档片段的方法会奏效,但也会使文本量加倍(因此 training-attention/individual-prediction-examples) 'doc1'
标签,与较窄的每句标签相比。你可能想要,也可能不想要——它可能会影响每个人的相对质量。
什么是最好的还不清楚 - 这取决于您的语料库和最终目标,因此应该通过实验来确定,并进行明确的最终评估,以便您可以 automate/systematize 严格搜索什么是最好的。
但有一些相关说明:
Doc2Vec
对于每个文档至少包含十几个或更多单词的文档往往效果更好。
'words'
需要标记化 - 字符串列表,而不是字符串。
- 它受益于大量不同的数据,特别是如果您正在训练更大的模型 – 更多独特的标签(包括重叠的标签)和多维向量 – 您将需要更多数据以避免过度拟合.
在doc2vec中给一堆句子分配相同的标签有什么影响?我有一个文档集合,我想使用 gensim 学习向量以完成 "file" 分类任务,其中文件指的是给定 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'])
我还有一些额外的分类标签要分配。那么最好的方法是什么?
这一切你都能做到!将同一个标签分配给多个文本具有 几乎 与将这些文本组合成一个更大的文本并为其分配该标签的效果相同。细微差别是 Doc2Vec
模式,其中有上下文 -window – PV-DM (dm=1
)。对于单独的文本,永远不会有跨越 end/beginning 个句子的上下文。
事实上,由于 gensim
的优化代码路径对文本大小有 10,000 个标记的限制,因此将较大的文档拆分为子文档,但有时需要重复它们的标签作为解决方法。
您特别提出的训练完整文档和文档片段的方法会奏效,但也会使文本量加倍(因此 training-attention/individual-prediction-examples) 'doc1'
标签,与较窄的每句标签相比。你可能想要,也可能不想要——它可能会影响每个人的相对质量。
什么是最好的还不清楚 - 这取决于您的语料库和最终目标,因此应该通过实验来确定,并进行明确的最终评估,以便您可以 automate/systematize 严格搜索什么是最好的。
但有一些相关说明:
Doc2Vec
对于每个文档至少包含十几个或更多单词的文档往往效果更好。'words'
需要标记化 - 字符串列表,而不是字符串。- 它受益于大量不同的数据,特别是如果您正在训练更大的模型 – 更多独特的标签(包括重叠的标签)和多维向量 – 您将需要更多数据以避免过度拟合.