我正在使用 Gensim Phrases 来检测文本中的 n-gram。因此,我有兴趣了解 Phrases 用于检测文本中这些 n-gram 的机制。有人可以简单地解释一下 Phrases 中使用的机制吗?
Gensim 中的短语如何工作?
数据挖掘
nlp
word2vec
gensim
2022-01-24 09:27:15
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
(即)为0 ,如果我们len_vocab
乘以_ _下一个位置。corpus_word_count
original_scorer
wordb
worda
wordb
worda
wordb
我不明白为什么 gensim 选择在len_vocab
这里使用,但也许他们有一些理由。您也可以传递自己的评分函数。