Gensim 中的短语如何工作?

数据挖掘 nlp word2vec gensim
2022-01-24 09:27:15

我正在使用 Gensim Phrases 来检测文本中的 n-gram。因此,我有兴趣了解 Phrases 用于检测文本中这些 n-gram 的机制。有人可以简单地解释一下 Phrases 中使用的机制吗?

2个回答

由于 gensim 工具引用了 Mikolov 非常著名的论文——“单词和短语的分布式表示...... ”,它是使用它来实现的。在本文中,如果您查看“4 个学习短语”部分,它们会很好地解释如何计算 n-gram(等式 6)。

在此处输入图像描述

因此,如果要计算二元组,这个公式很简单;score(wi, wj) 是任何两个单词同时出现的分数。但是在计算三元组时,'wi' 将是一个二元组,'wj' 将是一个单词。对于任何数量的克,同样如此。

如果两个单词的评分函数超过阈值(这是 Phrases 的参数),Gensim 会检测到二元组。

默认评分函数是 flyDope 的答案,但乘以词汇量(使用help(Phraser)或查看gensim 的 Github 存储库(gensim/models/phrases.py)):

def original_scorer(worda_count, wordb_count, bigram_count, len_vocab, min_count, corpus_word_count):
   #...
   """
    worda_count : int
        Number of occurrences for first word.
    wordb_count : int
        Number of occurrences for second word.
    bigram_count : int
        Number of co-occurrences for phrase "worda_wordb".
    len_vocab : int
        Size of vocabulary.
    min_count: int
        Minimum collocation count threshold.
    corpus_word_count : int
        Not used in this particular scoring technique.
    """
    #...

    return (bigram_count - min_count) / worda_count / wordb_count * len_vocab

另一个实现的评分函数npmi_scorer基于 G. Bouma 的一篇论文。

我认为 n>2 的 n-gram 是通过应用二元检测n-1时间来完成的。

如果min_count(即delta)0 如果我们len_vocab乘以_ _下一个位置。corpus_word_countoriginal_scorerwordbwordawordbwordawordb

我不明白为什么 gensim 选择在len_vocab这里使用,但也许他们有一些理由。您也可以传递自己的评分函数。