Doc2Vec-如何标记段落(gensim)


17

我想知道如何从gensim中使用doc2vec在gensim中标记(标记)句子/段落/文档。

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

能否根据内容重复标签?例如,如果每个句子/段落/文档都与某个特定产品有关(并且给定产品项目有多个句子/段落/文档),则可以根据该项目为句子加上标签,然后计算单词或词组之间的相似度句子和这个标签(我想这将是与产品有关的所有句子的平均值)?

Answers:


10

两者都有可能。您可以为每个文档指定唯一的ID(例如序列号)作为doctag,或者为共享字符串doctag表示其他名称,或者同时赋予两者。

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

您必须尝试最适合您的需求的东西。

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


非常感谢!顺便说一句,当我开始玩genim时-我很好奇是否有可能计算doc(无论使用的是唯一标签还是共享标签)与单词之间的相似度-凭您的经验可以做到吗?
B_Miner

1
一些训练模式会在“相同空间”内创建单词和文档向量,因此相似性可能有意义。例如,请参见此文件arxiv.org/abs/1507.07998,该文件甚至进行了涉及文档向量(维基百科文章)和词向量的“类比算术”。该论文中的训练类似于gensim的DBOW模式,并发跳过语法单词训练:dm=0, dbow_words=1
gojomo '16

谢谢@gojomo!我在gensim列表上添加了有关如何执行此操作的查询:groups.google.com/forum
#!topic/gensim/RLRfY6k3ulw

如果我错了,请纠正我。在您的最后一段中,您建议应像我们在此站点中标记问题一样标记每个文档。训练后,我们将获得每个标签的矢量表示。当新文档到达时,我们可以使用相似性度量为新文档建议标签。
用户

@user-是的,这样做虽然有时不是必须的,但可能是有好处的。
gojomo

9

doc2vec模型从word2vec

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

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

简而言之,label意味着某种事物的语义含义。


If we specify a single label to multiple sentences in a paragraph, it means that all the sentences in the paragraph are required to convey the meaning.我不确定我是否正确理解了这一点。从算法POV来看,是语义定义是否需要所有具有相同标签的句子,还是所有具有相同标签的句子都描述相同的事物?在第一种情况下,没有一个句子本身是自给自足的,在第二种情况下,单个句子是自给自足的。
用户

@user:这是第二种情况,从算法POV来看,标签被定义为一个实体,当在单个句子中使用该标签时,它会捕获所有单词的含义。同样,在多个句子中使用时,它也会捕获所有其他句子中的单词。
yazhi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.