N-Gram是一种在自然语言处理(NLP)中常用的一种概率语言模型(Probabilistic Language Model),常用于语音\手写识别、机器翻译、拼写纠错等等领域。
它的本质就是计算一个句子或者一连串词出现的概率。
/*
T 是由 W1,W2,W3,W4,W5 ... Wn组成的一个句子。
*/
P(T) = P(W1,W2,W3,W4,W5 ... Wn) //这个句子出现的概率是里面每一个词出现的概率的叠加。
P(W5|W1,W2,W3,W4) //已经出现第1个至第4个的词的情况下,第5个词出现的概率。
比如:
I am working 后面很有可能出现at
, in
, for
,而不是refrigerator
, throw
, gull
。那么如何计算N-Grams呢?我们可以使用链式法则(Chain Rule),求多个关联事件并存时的概率:
但是这样会有两个问题:
所以为了简化这个问题,我们引入马尔科夫假设(Markov Assumption):”一个词的出现仅仅依赖于它前面出现的一个或者有限的几个词。”
P(T) = P(W1)P(W2)...P(Wn)
P(T) = P(W1)P(W2|W1)P(W3|W2)...P(Wn|Wn-1)
P(T) = P(W1)P(W3|W1,W2)...P(Wn|Wn-2,Wn-1)
下面用Bi-gram举个例子,语料库来自 [Berkeley Restaurant Project] ,总词数为 10132。