使用PhrasesTransformer进行短语检测。

问题描述 投票:-1回答:1
from gensim.sklearn_api.phrases import PhrasesTransformer

# Create the model. Make sure no term is ignored and combinations seen 3+ times are captured.
m = PhrasesTransformer(min_count=1, threshold=3)
text = [['I', 'love', 'computer', 'science', 'computer', 'science', 'is', 'my', 'passion', 'I', 'studied', 'computer', 'science']]

# Use sklearn fit_transform to see the transformation.
# Since computer and science were seen together 3+ times they are considered a phrase.
m.fit_transform(text)

上面的代码确实按照预期返回了computer_science。但是,什么是正确的提取短语的方法呢?

nlp gensim n-gram phrase
1个回答
0
投票

PhrasesTransformer 封装了一个gensim的 Phrases 模型,它做了实际的共现统计编制&将大词组推广到短语。

遗憾的是,该 Phrases 对象不会,至少通过 gensim-3.8.3 (2020年4月),提供它可以发出的所有短语的任何清单。从本质上讲,它只是编译统计,然后当呈现的是 新的 文本,检查哪些大梁应该被合并(根据其当前的统计& 参数)。

这种方法的缺点包括

  • 大量多余的重新计算。
  • 没有方便地列出 "所有 "可能的短语清单
  • 保留耗费记忆的潜在短语,这些短语不符合当前的评分阈值参数,但如果这些参数改变,则可能保留

这种方法的优点包括:

  • 改变计分阈值参数可以立即启用新的短语。

要真正得到一个短语的列表,a Phrases 实例可以创建,你需要给它输入所有潜在的短语文本,看看它能推广什么。这可能应该是gensim上的一个实用方法。Phrases - 因为类似的枚举已经在相关的 Phraser 类初始化--但不是。这样的方法大致可以这样工作(这可能有bug,因为我没有测试过)。

from gensim.models.phrases import pseudocorpus

def report_all_phrases(phrases_model):
    corpus = pseudocorpus(phrases_model.vocab, phrases_model.delimiter, phrases_model.common_terms)
    phrasegrams = set()
    for bigram, score in phrases_model.export_phrases(corpus, self.delimiter, as_tuples=True):
        phrasegrams.add(bigram)
    return phrasegrams
© www.soinside.com 2019 - 2024. All rights reserved.