NLP中,一个句子通常被看作是一系列词语的全排列,这些词语能形成各种不同的组合,比如
我 在 北京 天安门
在 我 北京 天安门
北京 我 在 天安门
北京 在 我 天安门
...
在这些所有可能的排列的情况中,只有很少一部分(由于语言的多样性,不一定只有一种可能是合法)是可以被人理解的。
为了衡量一个词语序列是否可被理解(或者说合法),自然语言处理大师贾里尼克(Fred Jelinek) 提出了一个统计数学模型来描述一个自然语言的句子。这个模型就是语言模型
语言模型
概率表示
给每个句子一个概率,合法的句子概率大,只需要从所有可能的情况中选取概率最大的那种组合,就能够得到合法的句子。
这个概率该如何赋予呢?如何保证合法的就能够得到大概率,不合法的就是小概率呢?这需要从数学角度来看待这个问题。
假设\(S\)表示一个有意义(合法)的句子,我们可以将其表示成\(S=w_1,w_2,\cdots,w_n\),其中\(w_i\)表示第\(i\)个词语。
用\(P(S)\)来表示这个句子出现的概率,则
\[ \begin{equation} P(S) = P(w_1,w_2,\cdots,w_n) \end{equation} \]
根据条件概率公式,可以推导得
\[ \begin{equation} P(S) = P(w_1,w_2,\cdots,w_n) = P(w_1) \cdot P(w_2\vert w_1) \cdot P(w_3\vert w_1,w_2)\cdots P(w_n\vert w_1,w_2,\dots,w_{n-1}) \end{equation} \]
其中 \(P(w_1)\)表示第一个词语是\(w_1\)的概率,\(P(w_2\vert w_1)\)表示在给定第一个词\(w_1\)的情况下,\(w_2\)出现的概率,后面的以此类推。第\(i\)个词语出现的概率是由其前面的\(i-1\)个单词所决定的。