在语言建模中如何将“内插绝对折扣”用于bigram模型?

时间:2019-03-01 10:45:06

标签: nltk smoothing

我想比较两种用于bigram模型的平滑方法:

  • 添加一个平滑
  • 内插绝对折扣

对于第一种方法,我找到了一些代码。

def calculate_bigram_probabilty(self, previous_word, word):
    bigram_word_probability_numerator = self.bigram_frequencies.get((previous_word, word), 0)
    bigram_word_probability_denominator = self.unigram_frequencies.get(previous_word, 0)
    if self.smoothing:
        bigram_word_probability_numerator += 1
        bigram_word_probability_denominator += self.unique__bigram_words
    return 0.0 if bigram_word_probability_numerator == 0 or bigram_word_probability_denominator == 0 else float(
        bigram_word_probability_numerator) / float(bigram_word_probability_denominator)

但是,除了“ KneserNeyProbDist”的一些参考文献之外,我没有发现第二种方法。但是,这是用于卦的!

如何更改上面的代码以进行计算?该方法的参数必须从开发集中进行估算。

1 个答案:

答案 0 :(得分:1)

在此答案中,我只是整理了一些有关您的问题的发现,但我无法提供编码解决方案。

因此Modified Kneser–Ney smoothing现在是众所周知的,并且似乎是最好的解决方案,只是在运行代码中在公式旁边翻译说明仍然是一个步骤。 在原始链接文档中显示的文本下方(屏幕快照上方)仍然是一些有助于理解原始描述的解释,可能会有所帮助。