数学之美——阅读笔记(一)

本文是数学之美系列的阅读笔记,重点探讨自然语言处理从规则方法转向统计方法的过程。介绍了统计语言模型,如二元模型,以及模型训练中的零概率问题和平滑方法,讨论了语料库的选择对模型性能的影响。

数学之美 —— 阅读笔记(一)

自然语言处理 —— 从规则到统计

对于计算机能否读懂自然语言,涉及到两个认知方面的问题:

  1. 计算机能否处理自然语言?
  2. 如果能,它处理的方法是否和人类一样?

而对于这两个问题,答案都是肯定的。

虽然字词可以被认为是有限且闭合的集合,而语言却不是,语言是无限的,因此语言必有语法无法覆盖到的存在。这就涉及两个考虑问题的方向,一个是从 语言 的角度,另一个是从 语法 的角度。经过长期的争论,最后的实践宣布了语言的正确性的胜利。

然而让计算机处理自然语言,并非计算机真正理解的自然语言的含义和表达的内容,这一切都归功于数学(准确地说是统计)

如果使用基于规则的方法,那么要覆盖哪怕 20% 的真实语句,文法规则的数量都是相当庞大的,这是其一;其次,在文法规则增加后会产生一些矛盾,因此会定义规则使用的特定环境等。
虽然计算机能理解现在的高级编程语言,然而这两者的计算量却不能同日而语。编程语言的文法是上下文无关的,其理解所耗费的时间复杂度为文本长度的平方;但是自然语言是上下文相关的,其时间复杂度为文本长度的六次方。

而从规则到统计的变革起源于 IBM 华生实验室对语音识别的改进,开始使用基于统计的方法。

统计语言模型

让计算机处理自然语言,一个基本问题就是为自然语言这种上下文相关的特征建立数学模型。

用数学的方法描述语言的规律

假定 S 表示一个有意义的句子,由一连串特定顺序排列的词 w1,w2,w3,...,wn 组成,这里 n 为句子长度。现在我们想知道 S 在文本中出现的可能性,即 S 的概率 P(S)。不妨把这个概率展开:

P(S)=P(w1,w2,...,wn)

利用条件概率公式,S 出现的概率等于每一个词出现的条件相乘,即:

P(w1,w2,...,wn)=P(w1)P(w2|w1)P(w3|w1,w2)...P(wn|w1,w2,...,wn1)

利用 马尔科夫假设S 中每一个词的出现只与它前面一个词有关,这样就可以简化上面的公式:

P(S)=P(w1)P(w2|w1)P(w3|w2)...P(wn|wn1)

这个模型称为 二元模型(Bigram)

这样一来直接使用条件概率的定义就可以求得每个词出现的概率了。然后根据 大数定理,只要统计量足够,相对频度就等于概率。

理论上,使用高阶语言模型准确度会更高,比如假设每个词和前面 N1 个词有关,那么这就是个 N-1阶马尔科夫假设,对应为 N元模型。但是随着 N 的增加,模型的大小几乎是指数增长的,即 O(|V|N) ,其中 |V| 为一种语言词典的词汇量,一般在几万到几十万之间;同时时间复杂度也几乎是一个指数函数,即 O(|V|N1) 。因此多数的统计语言模型使用的是 N=1,2,3 而 Google 的罗塞塔翻译系统和语言搜索系统使用的是四元模型。然而高阶语言模型却并不能覆盖所有的语言现象。因为自然语言中,上下文之间的相关性跨度可能非常大。

模型的训练、零概率问题和平滑方法

对于二元模型,我们对参数的确定就是用语料库中 #(wi1,wi)#(wi1) 进行比值计算。但如果 #(wi1,wi)=0#(wi1,wi)==#(wi1) 怎么办,难道概率就分别等于 0 和 1 吗?
当然不行。对于这个问题,古德和图灵提出了重新估算概率的公式:古德-图灵估计。它的原理是:对于没有看见的事件,不能认为其发生的概率为 0,因此我们从概率的总量中分配一个很小的比例给这些没看见的事件。

假定语料库中出现 r 次的词有 Nr 个,那么可以推测出整个语料库的大小为:

N=r=1rNr

当 r 很小时,统计可能不可靠,因此出现 r 次的那些次在计算时需要用更小的次数,而是:

dr=(r+1)Nr+1Nr

显然仍有如下式成立:

rdrNr=N

解释:一般来说,出现一次的词的数量比出现两次的多,出现两次的词比出现三次的多,依次类推。这种规律称为 Zipf 定律

而实际的自然语言处理中,对古德-图灵估计进行灵活运用。对于出现次数超过阈值的词,不下调频率;而只下调出现次数小于阈值的词的频率,并将下调得到的频率总和给未出现的词。

基于这种估计,二元模型概率的公式如下:

P(wi|wi1)=f(wi|wi1)        if  #(wi1,wi)Tfgt(wi|wi1)     if  0<#(wi1,wi)<TQ(wi1)f(wi)  otherwise

其中的阈值 T 一般在 8~10 左右,而 Q(wi1)f(wi) 的存在是为了确保 wiVP(wi|wi1) 成立。

Q(wi1)=1wi seenP(wi|wi1)wi unseenf(wi)

不仅限于二元模型,对于任意 N 元模型都有这种平滑的估计方法,称为 卡茨退避法(Katz backoff)

还有一种用低阶语言模型和高阶模型进行线性插值来打到平滑目的的方法,公式类似与对一元、二元和三元模型进行一个加权的计算。这种插值法的效果略低于卡茨退避法,已经很少使用了。

语料的选取

训练模型所需的语料库也是一个影响性能的重要因素。

  • 需要根据语料库大小控制模型的阶数;
  • 对于噪声的处理要考虑实际应用的场景。比如对于网页搜索问题的训练数据,需要使用保留一定噪声的数据集,因为这样能使训练数据和应用一致;相反,如果用干净的数据进行训练,效果可能反而不太好。
  • 在保证训练数据和应用一致且训练量足够大的情况下,一般会去除容易处理的比较大的噪声。对于一些没有模式的少量的清除成本较高的噪声,通常就不做处理了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值