【问题标题】:Phrase detection using PhrasesTransformer使用 PhrasesTransformer 进行短语检测
【发布时间】:2020-04-28 04:26:29
【问题描述】:
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。但是什么才是实用的词组提取方法呢?

【问题讨论】:

  • 你所说的“正确的方式”和“务实的”是什么意思? (Phrases 统计技术适用于多种目的,但会遗漏人们会感知的短语/概念/实体,并且会结合人们可以从上下文中分辨出来的多重字母,而不是真正的单位。意义。因此,结果通常不会向用户展示,但对于分类或信息检索之类的幕后仍然很有帮助。)
  • 类似于 m.get_phrases() 的东西,所以它可以返回 computer_science。我不确定是否有这样的方法或属性可以做到这一点
  • 你的意思是,列出所有它学到的可能的短语吗?
  • 没错,我不确定是否有这样的方法或属性,因为我是 n-gram 的新手

标签: nlp gensim n-gram phrase


【解决方案1】:

PhrasesTransformer 包装了 gensim 的 Phrases 模型的一个实例,该模型执行共现统计的实际编译和将二元组提升为短语。

不幸的是,Phrases 对象至少在 gensim-3.8.3(2020 年 4 月)之前没有提供它可以发出的所有短语的任何列表。本质上,它只是编译统计数据,然后当出现 new 文本时,检查以查看应该组合哪些二元组(根据其当前的统计数据和参数)。

这种方法的缺点包括:

  • 大量冗余的重新计算
  • 没有方便的“所有”可能短语列表
  • 保留不符合当前评分/阈值参数但可能会在更改时消耗内存的潜在短语

这种方法的优点包括:

  • 更改评分/阈值参数可以立即启用新短语

要真正获得Phrases 实例可以创建的短语列表,您需要向其提供包含所有潜在短语的文本,并查看它所宣传的内容。这可能应该是 gensim Phrases 上的实用方法——因为在关联的 Phraser 类初始化中已经完成了非常相似的枚举——但不是。这样的方法可以大致工作(这可能有错误,因为我没有测试过):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2017-08-30
    • 2012-07-15
    • 2015-07-12
    • 2014-02-16
    • 1970-01-01
    相关资源
    最近更新 更多