2016-08-16 97 views
0

我想在doc2vec中使用短语,并使用gensim.phrases。在doc2vec中,我们需要标记文档来训练模型,并且我不能标记这些短语。我怎么能做到这一点?如何在短语中使用doc2vec?

这里是我的代码

text = phrases.Phrases(text) 
for i in range(len(text)): 
    string1 = "SENT_" + str(i) 

    sentence = doc2vec.LabeledSentence(tags=string1, words=text[i]) 
    text[i]=sentence 

print "Training model..." 
model = Doc2Vec(text, workers=num_workers, \ 
      size=num_features, min_count = min_word_count, \ 
      window = context, sample = downsampling) 

回答

0

Phrases()调用列车词组创造模型。您稍后在文本上使用该模型来取回短语组合文本。

不要用您的代码的第一行替换您的原版text与训练有素的模型。此外,不要尝试分配到短语模型,就像当前循环中发生的一样,也不要使用整数访问短语模型。

gensim docs for the Phrases class有正确使用Phrases类的例子;如果你遵循这种模式,你会做得很好。

此外,请注意LabeledSentence已被替换为TaggedDocument,其tags参数应该是一个标签列表。如果你提供一个字符串,它会将它看作一个一个字符的标签(而不是你想要的一个标签)。

+0

感谢您的回答。在这种情况下,使用“LabeledSentence”而不是TaggedDocument没有任何区别。我的问题是在doc2vec中使用短语的地方和方式? –

+0

关于在Doc2Vec中使用短语没有什么特别之处;这只是一个预处理步骤,可以将某些单词对变为组合的“word_pairs”。因此,我建议您忽略Doc2Vec方面,避免我在现有代码中指出的特定错误,并且与gensim文档中的示例中的方式相匹配。 – gojomo

+0

我解决了你说的错误,但主要问题是'LabeledSententces'的输出不能用作'Phrases'的输入。所以我不能用'LabeledSentenses'构造短语。由于'LabeledSentences'不能标记短语,所以这个过程的反向也不能完成。 –

相关问题