Ngram型号:Good-Turing Smoothing

时间:2014-12-09 03:57:56

标签: nlp n-gram

我目前正参加Kaggle's Billion Word Imputation比赛,参加大学校园比赛。我们正在使用一个简单的3克模型。事情是我们别无选择,只能忽略1,2,3次出现的unigrams,以及在我们的训练集中出现过一次的bigrams,以节省记忆。所以我们忘记频率为1,2,3的单词;包含那些词的双子星和频率为1的双子星;以及包含任何先前删除的ngrams的3grams。

现在我们已经找到了缺失的单词应该去哪里以及它是哪个单词。这里的问题是我们如何计算/估计每个ngram的概率,以便当我们找到一个看不见的单词或短语时,概率不是0?好吧,在发现我们无法处理整个训练集之前,我们考虑使用Good-Turing Smoothing,它看起来非常好并且易​​于实现。

对于Good-Turing Smoothing,我们需要每个频率的频率,现在我们没有频率为1的任何二元组(w1,w2),那么我们该怎么办?我想只为每个w1存储这个数字,所以我们可以在计算中使用它(*)。我真的不知道这是否会让事情变得更好......

另一方面,无论我们在模型中做了什么切割,如果我们有以下内容怎么办?

Freq c ---> Freq Nc的频率

1 ---> 456

2 ---> 123

3 ---→50

5 ---> 23

为了估计新的c,c *,对于频率为c = 3的单词,我们需要N4和N2,但是N4是0 !!!

(*)所以,虽然我们没有存储c = 1的任何单词w2,但我们会得到N1,这对于计算看不见的单词的概率是最重要的。

有没有简单的方法来解决这个问题(特别是最后一部分)?

1 个答案:

答案 0 :(得分:0)

我不是专家,但我遇到了类似的问题。这是Good-Turing平滑的一个问题,在Jurafsky的教科书中有具体提及。

我刚刚使用了最接近的计数,无论是在上面还是下面。这似乎产生了不错的结果。