【问题标题】:How to use doc2vec with phrases?如何将 doc2vec 与短语一起使用?
【发布时间】:2016-08-16 06:53:20
【问题描述】:

我想在 doc2vec 中有短语,我使用 gensim.phrases。在 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)

【问题讨论】:

    标签: python nlp gensim phrases doc2vec


    【解决方案1】:

    Phrases() 的调用训练了一个短语创建模型。您稍后在文本上使用该模型来获取短语组合文本。

    不要像代码的第一行那样,用经过训练的模型替换原来的 text。此外,不要尝试分配到 Phrases 模型中,就像在当前循环中发生的那样,也不要通过整数访问 Phrases 模型。

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

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

    【讨论】:

    • 感谢您的回答。在这种情况下,使用“LabeledSentence”而不是 TaggedDocument 没有任何区别。我的问题是在哪里以及如何在 doc2vec 中使用短语?
    • 在 Doc2Vec 中使用 Phrases 并没有什么特别之处;这只是将一些单词对更改为组合word_pairs 的预处理步骤。所以我建议你忽略 Doc2Vec 方面,避免我在现有代码中指出的特定错误,并匹配它在 gensim 文档中的示例中完成的方式。
    • 我解决了您所说的错误,但主要问题是 LabeledSententces 的输出不能用作 Phrases 的输入。所以我不能用LabeledSentenses 构造短语。这个过程的逆过程也不能完成,因为LabeledSentences 不能标记短语!
    • 对,您应该使用Phrases 模型的输出 构造TaggedDocument 实例,而不是相反。按照 gensim 文档中的示例,让 Phrases 部分工作。只有您确认它按预期工作后,然后获取生成的令牌列表并将它们用作TaggedDocument 实例中的words
    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多