毕业论文
您现在的位置: 语言识别 >> 语言识别前景 >> 正文 >> 正文

语言模型上

来源:语言识别 时间:2022/10/31

1.引言:朴素贝叶斯的局限性

我们在之前探讨过,朴素贝叶斯的局限性来源于其条件独立假设,它将文本看成是词袋子模型,不考虑词语之间的顺序信息,就会把“武松打死了老虎”与“老虎打死了武松”认作是一个意思。那么有没有一种方法提高其对词语顺序的识别能力呢?有,就是本节要接到的N-gram语言模型。

2.N-gram语言模型是啥?

2.1从假设性独立到联合概率链规则

照抄我们前文垃圾邮件识别中的条件独立假设,长这个样子:

((“我”,“司”,“可”,“办理”,“正规发票”,“保真”,“增值税”,“发票”,“点数”,“优惠”)

)P((“我”,“司”,“可”,“办理”,“正规发票”,“保真”,“增值税”,“发票”,“点数”,“优惠”)

S)=(“我”

)×(“司”

)×(“可”

)×(“办理”

)×(“正规发票”

)=P(“我”

S)×P(“司”

S)×P(“可”

S)×P(“办理”

S)×P(“正规发票”

S)×(“保真”

)×(“增值税”

)×(“发票”

)×(“点数”

)×(“优惠”

)×P(“保真”

S)×P(“增值税”

S)×P(“发票”

S)×P(“点数”

S)×P(“优惠”

S)

为了简化起见,我们以字母xi表示每一个词语,并且先不考虑条件“S”。于是上式就变成了下面的独立性公式。

(1,2,3,4,5,6,7,8,9,10)P(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)=(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)=P(x1)P(x2)P(x3)P(x4)P(x5)P(x6)P(x7)P(x8)P(x9)P(x10)=(“我”)(“司”)(“可”)(“办理”)...(“优惠”)=P(“我”)P(“司”)P(“可”)P(“办理”)...P(“优惠”)

如果不满足独立性假设,上面的等号就不成立。那么有没有一个不依赖于任何其他的假设,而能够原原本本地把所有的语序信息都考虑进来的恒等式呢?有,它就是联合概率链规则(chainrule):

(1,2,3,4,5,…,)P(x1,x2,x3,x4,x5,…,xn)=(1)(2

1)(3

1,2)...(

1,2,...,1)=P(x1)P(x2

x1)P(x3

x1,x2)...P(xn

x1,x2,...,xn1)

2.2从联合概率链规则到n-gram语言模型

上面的联合概率链规则公式虽然考虑到了所有的词和词之间的依赖关系,但是非常复杂,在实际生活中几乎没办法使用,于是我们就想了很多办法去近似这个公式,效果又要求比独立性假设好。比如我们要讲到的语言模型n-gram就是一个这样的简化。

如果我们考虑一个词语对上一个词语的依赖关系,公式就简化成了如下形式,我们把它叫做二元语法(bigram,2-gram):

(1,2,3,4,5,6,7,8,9,10)P(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)=(1)(2

1)(3

2)(4

3)..(10

9)=P(x1)P(x2

x1)P(x3

x2)P(x4

x3)..P(x10

x9)=(“我”)(“司”

“我”)(“可”

“司”)(“办理”

“可”)...(“优惠”

“点数”)=P(“我”)P(“司”

“我”)P(“可”

“司”)P(“办理”

“可”)...P(“优惠”

“点数”)

如果把依赖词长度再拉长一点,考虑一个词对前两个词的依赖关系,就叫做三元语法(trigram,3-gram),公式如下:

(1,2,3,4,5,6,7,8,9,10)P(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)=(1)(2

1)(3

1,2)(4

2,3)×...×(10

8,9)=P(x1)P(x2

x1)P(x3

x1,x2)P(x4

x2,x3)×...×P(x10

x8,x9)=(“我”)(“司”

“我”)(“可”

“我”,“司”)(“办理”

“司”,“可”)...(“优惠”

“发票”,“点数”)=P(“我”)P(“司”

“我”)P(“可”

“我”,“司”)P(“办理”

“司”,“可”)...P(“优惠”

“发票”,“点数”)

如果我们再考虑长一点,考虑n个词语之间的关系,恩恩,这就是n-gram的由来。歪果仁果然取名字简单粗暴又好记…

其实以上几个简化后的公式,就是著名的马尔科夫假设(MarkovAssumption):下一个词的出现仅依赖于它前面的一个或几个词。这相对于联合概率链规则,其实是一个有点粗糙的简化,不过很好地体现了就近思路,离得较远和关系比较弱的词语就被简化和省略了。实际应用中,这些简化后的n-gram语法比独立性假设还是强很多的。其实可以把独立性假设理解成为1-gram。

2.3怎样选择依赖词的个数“n”?

选择依赖词的个数“n”主要与计算条件概率有关。理论上,只要有足够大的语料,n越大越好,毕竟这样考虑的信息更多嘛。条件概率很好算,统计一下各个元组出现的次数就可以,比如:

(“优惠”

“发票”,“点数”)=(“发票”,“点数”,“优惠”)出现的次数(“发票”,“点数”)出现的次数P(“优惠”

“发票”,“点数”)=(“发票”,“点数”,“优惠”)出现的次数(“发票”,“点数”)出现的次数

但我们实际情况往往是训练语料很有限,很容易产生数据稀疏,不满足大数定律,算出来的概率失真。比如(“发票”,“点数”,“优惠”)在训练集中竟没有出现,就会导致零概率问题。

又比如在英文语料库IBM,Brown中,三四百兆的语料,其测试语料14.7%的trigram和2.2%的bigram在训练语料中竟未出现!

另一方面,如果n很大,参数空间过大,产生维数灾难,也无法实用。假设词表的大小为,,,那么n-gram模型的参数数量为,,n。这么多的参数,估计内存就不够放了。

那么,如何选择依赖词的个数n呢?从前人的经验来看:

经验上,trigram用的最多。尽管如此,原则上,能用bigram解决,绝不使用trigram。n取≥4的情况较少。当n更大时:对下一个词出现的约束信息更多,具有更大的辨别力;当n更小时:在训练语料库中出现的次数更多,具有更可靠的统计信息,具有更高的可靠性、实用性。3.N-gram实际应用举例

说了这么N-gram语言模型的背景知识,咱们再来看看N-gram语言模型在自然语言处理中有哪些常见应用。

PS:此部分以原理介绍为多,具体的技术实现细节请参考文中链接或者google。

3.1词性标注

词性标注是一个典型的多分类问题。常见的词性包括名词、动词、形容词、副词等。而一个词可能属于多种词性。如“爱”,可能是动词,可能是形容词,也可能是名词。但是一般来说,“爱”作为动词还是比较常见的。所以可以统一给“爱”分配为“动词”。这种最简单粗暴的思想非常好实现,如果准确率要求不高则也比较常用。它只需要基于词性标注语料库做一个统计就够了,连贝叶斯方法、最大似然法都不要用。词性标注语料库一般是由专业人员搜集好了的,长下面这个样子。其中斜线后面的字母表示一种词性,词性越多说明语料库分得越细:

![图](

转载请注明:http://www.0431gb208.com/sjsbszl/2176.html