语言模型
只要是提到模型这个词,我就会感到很抽象,但是如果把它理解为一系列的函数或者映射,就会有更加直观的理解。对语言模型来说,输入就是一个句子,输出就是这个句子存在概率。这个从输到输出的函数,就可以认为是模型。 这是个人的不严谨的理解。
本博客的内容如下(内容来自collins 在coursera在线课程的讲义):
- 简介
- 马尔可夫模型
- 三元语言模型(Trigram Language Model)
- 平滑处理
- 其他主题
简介
首先给定一个包含若干句子的语料库,定义一个词表V, 包含了所有出现在语料库中的单词。譬如,V可能长这样:
V={the,dog, laughs, saw, barks, cat,…}
实际上V可能非常大,但我们认为它是一个有限集。这样一个句子可以表示为
x1x2x3…xn
其中xn为一个停止符stop,x1…xn-1属于V.例如
the dog barks stop
the cat saw the dog stop
the stop
cat cat cat stop
stop
…
使用
V+
表示所有使用V中词汇生成的句子。由于句子可以为任意长度,所以
V+
是一个无限集。
定义一(语言模型):一个语言模型包含一个有限集V,以及一个映射p(x1,x2,…,xn)满足:
1. 对任意
任意<x1,x2,...,xn>∈V+,p(x1,x2,...,xn)>0
2.
因此p(x1,x2,…xn)是一个 V+ 上的一个概率分布。
那么如何求这个概率分布具体每个句子的概率值呢?定义c(x1,x2…xn)为句子x1x2..xn在语料库中出现的次数,N是语料库中所有的句子数目。显然我们可以使用p(x1,x2…xn)=c(x1…xn)/N 来求句子x1,x2…xn的概率。但是这种简单的方法对于语料库中没有的句子,它的概率会等于0.尽管句子的单词全部是属于V的。
马尔可夫模型
固定长度序列的马尔可夫模型
马尔可夫模型实际上就是一个条件独立性假设。在求p(x1,x2…xn)时,
p(x1,x2…xn)=p(x1)p(x2|x1) *p(x3|x1x2) *p(x4|x1x2x3) … p(xn|x1x2…xn-1)
一阶马尔可夫假设p(x3|x1x2)=p(x3|x2)…即上面的每一项条件概率都等于它前面一个元素的条件概率。则:
p(x1,x2….xn)=p(x1)*p(x2|x1) *p(x3|x2)…. *p(xn|xn-1)
二阶马尔可夫假设为每一项的条件概率等于前面两项的条件概率。
即
p(x1,x2…xn)=p(x1)*p(x2|x1) *p(x3|x1x2) *p(x4|x2x3)….p(xn|xn-2,xn-1)
以此类推
变长的马尔序列的马尔可夫模型
变长的马尔可夫模型是一个序列生成的模型:
1 初始化i=1, 同时
x0
=
x−1
=*(
x0
和x
−1
可以看成是两个虚拟节点)
2 按照概率p(xi|x
i−2
,x
i−1
)生成x
i
3 如果x
i
=STOP,就返回序列x1…xi.否则,设置i=i+1并重复步骤2.
Trigram Language Models(三元语言模型)
基本概念
p(x1,x2,x3….xn)=
∏ni=1
p(
xi|xi−2,xi−1)
其中
x0
=
x−1
=*.
xn
=STOP.
定义(三元模型):一个三元模型包含一个有限集V,和参数:p(w|u,v).对每一个u,v,w如果w ∈ v ∪STOP 同时 u,v ∈v∪∗ ,在三元模型下,一个句子的概率为p(x1,x2…xn)= ∏ni=1p(xi|xi−2,xi−1) 其中 x0 与 x−1 都是伪节点*。
有个这个模型,现在的问题是如何根据语料来估计模型的参数p(w|u,v).
最大似然估计
对于参数估计来说,最简单的当然要用最大似然估计了。具体的对于p(w|u,v)
统计语料库中uvw与uv的次数,然后相除就可以得到p(w|u,v).
如p(barks|the,dog)=c(the,dog,barks)/c(the,dog).
但是这种简单的参数估计方法存在如下两个问题:
- 如果分子项为零,那么概率就就被定义为了0.也就是语料中没有相应的短语。可能是语料库不够大而导致的数据稀疏。
- 如果分子等于零,概率值求不出来。
模型的评估
对于一个学习好的模型,如何评估它的好坏呢
方法是给定一个测试数据集,里面有m个句子s1,s2,…,sm.对于每个句子si,计算它在当前模型下被生成的概率。对所有句子的概率求积。即:
∏mi=1p(xi)
这个值越大,说明模型越好。
参数估计的平滑处理
前面提到由于数据稀疏而导致的参数估计问题。这里讨论两种方法,第一种是linear interpolation,第二种是discounting methods.
linear interpolation
定义trigram,bigram,以及unigram 最大似然估计为:
p(w|u,v)=c(u,v,w)/c(u,v)
p(w|v)=c(v,w)/c(v)
p(w)=c(w)/c()
linear interpolation就是使用三个估计,通过定义
p(w|u,v)=c1*p(w|u,v)+ c2 * p(w|v) +c3*p(w)
其中c1>=0;c2>=0;c3>=0且
c1+c2+c3=1;
对于如何选取合适的c1,c2,c3。其中的一个方法是使用一个验证集数据,选取的c1,c2,c3使得验证集的概率最大。另外一种方法是另c1=c(u,v)/(c(u,v)+t),
c2=(1-c1)* c(v)/(c(v)+t)),c3=1-c1-c2. 其中t为一个待定参数。t的取值仍然可以是最大化验证集。
discounting Methods
考虑一个二元模型。也就是求参数p(w|v)
首先定义一个discounted counts.对任意的c(v,w)只要c(v,w)>0,就定义
c
∗(v,w)
=c(v,w)-r;
其中r是一个0到1之间的数。
然后对于任意的p(w|v)=c
∗(v,w)
/c(v);这样等于对每个不等于0的c,都从中抽取了r.然后可以将r分配给那些c等于0的短语,防止出现零的情况。