首先,语言模型用于解决什么问题呢?常用的两个场景:
1. 机器翻译、语音识别系统中用于判断一个句子是否合理
假设用户说了这么一句话:“I have a gun”,因为发音的相似,该语音识别系统发现如下几句话都是可能的候选:1、I have a gun. 2、I have a gull. 3、I have a gub. 那么问题来了,到底哪一个是正确答案呢?
这个问题可以转化为,以上三个句子的概率
2. 用户输入提示, 如下图
这个问题可以转化为,在输入是“deep learning“的情况下,下一个单词是XXX的概率
那么问题来了, 假设一个句子$w_1, w_3, ....w_m$,这个句子的概率$P(w_1, w_2....w_m)$怎么计算呢?
首先根据链式法则:
$$P(w_1, w_2....w_m) = P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)...P(w_m|w_1,..., w_{m-1})$$
第二,利用马尔科夫链的假设,当前词只与前面有限的n个词相关,即
$$P(w_i|w_1,..., w_{i-1}) \approx P(w_i|w_{i-(n-1)},...,w_{i-1})$$
$n=1$时为Uni-gram,$P(w_3|w_1,..., w_2) \approx P(w_3)$
$n=2$时为Bi-gram,$P(w_3|w_1,..., w_2) \approx P(w_3|w_2)$
$n=3$时为Tri-gram,$P(w_3|w_1,..., w_2) \approx P(w_3|w_1, w_2)$
实际工作中,最多的情况是$n=3$
第三,根据大数定理,当语料库够大时,
$$P(w_i|w_{i-(n-1)},...,w_{i-1}) \approx \frac{Count(w_{i-(n-1)},..., w_{i-1}, w_i)}{Count(w_{i-(n-1)},..., w_{i-1})} $$
其中 $Count(w_i, w_{i+1}, ..., w_j)$ 表示语料库中序列$w_i, w_{i+1}, ..., w_j$出现的次数
假设基于一个语料库,我们统计出如下信息:
每个单词出现次数
Bi-gram 次数
$P(want|i) = \frac{Count(i, want)}{Count(i)}=\frac{827}{2533}=0.326$
$P(i|want) = \frac{Count(want, i)}{Count(want)}=\frac{2}{927}=0.00216$
显然,i want比want i更make sence
可以注意到,上面的Bu-gram 统计表中有些位置为0,这表示当前的语料库中没有这些序列,但并不能说明测试环境中不存在这样的序列
为了避免这种序列概率为0的情况,N-gram 语言模型会加入平滑处理
参考: