我目前正参加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,这对于计算看不见的单词的概率是最重要的。
有没有简单的方法来解决这个问题(特别是最后一部分)?
答案 0 :(得分:0)
我不是专家,但我遇到了类似的问题。这是Good-Turing平滑的一个问题,在Jurafsky的教科书中有具体提及。
我刚刚使用了最接近的计数,无论是在上面还是下面。这似乎产生了不错的结果。