自然语言处理4-2:语言模型之Chain Rule和Markov Assumption
Chain Rule
前面讲过的Noisy Channel Model中提到了,P(text)是指的语言模型。那么,语言模型究竟有什么意义,又该怎么求呢?
语言模型其实就是考察text出现的概率。例如,在拼写纠错中,text使我们猜测的正确的单词,那么,这个单词是否常见呢?如果这个单词很常见,就说明他出现的概率很大,那么我们就越有理由相信,该单词就是我们要纠正到的正确单词。同样,在机器翻译中,我们将source翻译成text,如果text出现的概率越大,就说明text越符合目标语言的语法习惯,那么翻译就越准确。
综上所述,语言模型其实就是判断text出现的概率,从而在具体应用中发挥判定作用。
那么,该如何计算P(text)呢?假设我们有一句话“我喜欢喝奶茶”,经过分词之后,变成“我 喜欢 喝 奶茶”,那么,现在我们需要计算P(我喜欢喝奶茶),计算方法其实就是运用了链式法则。
链式法则如下所示,设A,B都是随机变量,那么有
$$ P(A,B)= P(A)P(B|A) $$
当随机变量有n个时,链式法则如下所示:
$$P(\omega _{1},\omega _{2},...,\omega _{n}) = P(\omega _{1})P(\omega _{2} |\omega _{1})P(\omega _{3}|\omega _{1},\omega _{2})...P(\omega _{n}|\omega _{1},...,\omega _{n-1})$$
所以,对于text为“我喜欢喝奶茶”这句话,可以用链式法则得到:
$$P(我喜欢喝奶茶) = P(我)P(喜欢|我)P(喝|我,喜欢)P(奶茶|我,喜欢,喝)$$
所以,对于一句话求其概率,就是先将他分词,然后利用链式法则求概率就好了
Markov Assumption
但是,不管是什么算法,最终都要实用哈。例如对于P(奶茶|我,喜欢,喝)这个概率,我们怎么求它呢?首先,我们肯定是有一个超大的语料库,里面有各种各样乱七八糟的句子。然后我们在里面寻找有“我喜欢喝”这个前缀的句子,假设我们找到了以下五句:
我喜欢喝奶茶
我喜欢喝可乐
我喜欢喝咖啡
我喜欢喝茶
我喜欢喝奶茶
那么,在五个句子当中,有两个句子是在“我喜欢喝”后面接的“奶茶”,所以P(奶茶|我,喜欢,喝)= 2/5.
可是,如果这个前缀超大呢?例如,如果一个前缀是“我喜欢喝无糖少冰加椰果珍珠红豆的”,然后要我求后面接“奶茶”的概率
可问题是,语料库中可能就压根不存在带有这个前缀的句子,或者有也是一两句,那么是很难准确求出它的概率的啊。而且,其实前缀涉及到的单词越多,训练模型需要的容量就越大,假设我们的词典中有三个单词a,b,c,如果只要求一个前缀的概率,也就是P(y|x)形式的概率,那么我们只需要一个3*3的矩阵就可以了。矩阵的行是“a,b,c”,矩阵的列是"a,b,c",矩阵的第a行第b列就是P(b|a)。但是如果允许前缀有两个单词,那么矩阵的行就有六个了“a,b,c,(a,b),(a,c),(b,c)”。这还只是假设词典库中只有三个单词,如果词典库中有成千上万的单词,那么需要的矩阵是非常大的。所以,我们应该尽量避免求前缀太大的概率。这就用到了马尔科夫假设了
马尔科夫假设的大概意思很简单,就是假定接下来出现的单词只和前面几个有关(可以是前面一个,也可是两个,。。。)。
例如,对于1st order Markov Asumption,我们就认为,接下来出现的单词只和前一个有关。
例如,虽然“奶茶”和“我,喜欢,喝”都可能有关,但是我们就认为“奶茶”只和“喝”有关,那么,就能够得到如下的公式:
$$P(我喜欢喝奶茶) = P(我)P(喜欢|我)P(喝|喜欢)P(奶茶|喝)$$
这样求右边的每个概率就很简单了。
写成一般表达式如下:这里ωi指代的是词典库的单词
$$P(\omega _{1},\omega _{2},...,\omega _{n}) = P(\omega _{1})P(\omega _{2} |\omega _{1})P(\omega _{3}|\omega _{2})...P(\omega _{n}|\omega _{n-1})$$
既然有1st order Markov Asumption,就会有2nd order Markov Asumption,后者假定,对于下一个出现的单词,只和前两个单词有关,写成公式如下:
$$P(\omega _{1},\omega _{2},...,\omega _{n}) = P(\omega _{1})P(\omega _{2} |\omega _{1})P(\omega _{3}|\omega _{1},\omega _{2})...P(\omega _{n}|\omega _{n-2},\omega _{n-1})$$
马尔科夫假设虽然丢掉了比较靠前的上文信息,但是使得模型能够实用,效果也是非常好的