Doc2Vec - 如何标记段落 (gensim)

数据挖掘 机器学习 文本挖掘 词嵌入 word2vec
2021-09-25 23:36:01

我想知道如何在 gensim 中使用 doc2vec 标记(标记)句子/段落/文档 - 从实际的角度来看。

您是否需要让每个句子/段落/文档都有自己独特的标签(例如“Sent_123”)?如果您想说“哪些单词或句子与标记为“Sent_123”的单个特定句子最相似,这似乎很有用。

您可以根据内容重复标签吗?例如,如果每个句子/段落/文档都与某个产品项目有关(并且给定产品项目有多个句子/段落/文档),您是否可以根据项目标记句子,然后计算单词或单词之间的相似度句子和这个标签(我猜这就像所有与产品相关的句子的平均值)?

2个回答

两者都是可能的。您可以给每个文档一个唯一的 ID(例如顺序序列号)作为一个 doctag,或者一个共享字符串 doctag 来表示它的其他内容,或者同时提供两者。

TaggedDocument 构造函数采用标签列表。(如果您碰巧将自己限制为从 0 升序的纯整数,则 Doc2Vec 模型将使用这些作为其支持数组的直接索引,并且您将节省大量内存,否则这些内存将用于字符串 -> 索引查找,这对于大型数据集可能很重要。但是您可以使用字符串文档标签,甚至可以使用 int 和字符串文档标签的混合。)

您必须尝试最适合您需求的方法。

对于某些分类任务,有时比我预期的效果更好的方法是完全跳过每个文本的 ID,只使用已知类示例训练 Doc2Vec 模型,并将所需的类作为 doctags。然后,您将获得仅用于类 doctags 的“文档向量”——不是每个文档——一个可能要小得多的模型。稍后推断新文本的向量会导致向量有意义地接近相关的类文档向量。

doc2vec模型从word2vec.

word2vec不需要标注单词,因为每个单词在词汇表中都有自己的语义但在 的情况下doc2vec,需要指定有多少单词或句子传达语义,以便算法可以将其识别为单个实体。出于这个原因,我们根据所传达的语义水平来指定句子或段落labelstags

如果我们为一个段落中的多个句子指定一个标签,则意味着该段落中的所有句子都需要传达含义。另一方面,如果我们为一个段落中的所有句子指定变量标签,这意味着每个句子都传达了一个语义含义,它们之间可能有相似性,也可能没有相似性。

简单来说,alabel表示某事物的语义。