《数学之美》随笔

第一章 文字和语言 VS 数学和信息

数学、文字和自然语言一样,都是信息的载体,它们之间原本有着天然的联系。

语言和数学的产生都是为了同一个目的——记录和传播信息。

随着人类的进步和文明化的进展,需要表达的信息也越来越多,不再是几种不同的声音就能完全覆盖的了,语言就此产生。

当语言越来越丰富,越来越抽象,语言描绘的共同语言,比如物体、数量、动作便抽象出来,形成了今天的词汇。

当语言和词汇多到一定程度的时候,人类仅靠大脑已经记不住所有词汇了,高效记录信息的需求就产生了,这便是文字的起源。 在早期,象形文字的数量和记录一个文明需要的信息量是相关的。随着文明的进步,信息量的增加,埃及的象形文字便不再随着文明的发展而增加了,因为没有人能够学会和记住那么多的文字,于是,概念的第一次概括和归类就开始了。

在古埃及的象形文字中,读音相同的词可能用同一个符号记录。这种概念的聚类,在原理上与今天自然语言处理或者机器学习的聚类有很大的相似性。

不同的文字系统在记录信息上的能力是等价的。

文字只是信息的载体,而非信息本身,不用文字,也可以用数字来存储同样意义的信息。这也是现代通信的基础。

信息的冗余是信息安全的保障。

语言的数据,我们称之为料,尤其是双语或者多语的对照语料对翻译至关重要,它是我们从事机器翻译研究的基础。

既然文字是出现在远古“信息爆炸”导致人们的头脑装不下这些信息的时候,那么数字的出现则是在人们的财产多到需要数一数才搞清楚有多少的时候。

早起数字并没有书写的形式,而是掰手指,这就是为什么我们今天使用十进制的原因。(玛雅文明使用的是二十进制)

具有书写形式的数字和象形文字应该诞生于同一时期。

数字和其他文字一样,在早期只是承载信息的工具,并不具有任何抽象的含义。

描述数字最有效的是古印度人,他们发明了包括0在内的10个阿拉伯数字(这个0很重要,否则就需要许多描述进制的量词,如个十百千万等),就是今天全世界通用的数字。这种表示方法比中国和罗马的都抽象,但是使用方便。阿拉伯数字或者说印度数字的革命性不仅在于它的简洁有效,而且标志着数字和文字的分离。这在客观上让自然语言的研究和数字在几千年里没有重复的轨迹,而且越走越远。

任何事物的规律是内在的,并不随它的载体而改变。自然语言的发展在冥冥之中,都受着信息科学规律的引导。

从象形文字到拼音文字(在人类第二个文明的中心古巴比伦诞生)是一个飞跃,因为人类在描述物体的方式上,从物体的外表到抽象的概念,同时不自觉地采用了对信息的编码。

犹太人在抄写圣经时,为避免错误,发明了一种类似于我们今天计算机和通信中校验码的方法。他们把每一个希伯来字母对应于一个数字,这样每行文字加起来便得到一个特殊的数字,这个数字便成为了这一行的校验码。同样,对每一列也是这样处理。

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

最早提出机器智能设想的是计算机科学之父阿兰图灵(Alan Turing),1950年他在《思想》(Mind)杂志上提出了一种来验证机器是否有智能的方法:让人和机器进行交流,如果人无法判断自己交流的对象是人还是机器时,就说明这个机器有智能了。这种方法被称为图灵测试(Turing Test)。

上个世纪70年代,基于统计的方法的核心模型是通信系统加隐含马尔可夫模型。这个系统的输入和输出都是一维的符号序列,而且保持原有的次序。

自然语言处理的研究从单纯的句法分析和语义理解,变成了非常贴近应用的机器翻译、语音识别、文本到数据库自动生成、数据挖掘和知识的获取等等。

基于统计的自然语言处理方法,在数学模型上和通信是相通的,甚至就是相同的。因此,在数学意义上自然语言处理又和语言的初衷——通信联系在一起了。但是,科学家们认识到这个联系却花了几十年的时间。

第三章 统计语言模型

自然语言从它产生开始,逐渐演变成一种上下文相关的信息表达和传递的方式,因此让计算机处理自然语言,一个基本的问题就是为自然语言这种上下文相关的特性建立数学模型。这个数学模型就是在自然语言处理中常说的统计语言模型,它是今天所有自然语言处理的基础,并且广泛应用于机器翻译、语音识别、印刷体或手写识别、拼写纠错、汉字输入和文献查询。

统计语言模型产生的初衷是为了解决语音识别问题。在语音识别中,计算机需要知道一个文字序列是否能构成一个大家理解而且有意义的句子,然后显示或者打印给使用者。 贾里尼克用一个简单的统计模型解决了上述问题:一个句子是否合理,就看看它的可能性大小如何。。至于可能性救用概率来衡量。
这个方法更普通而严格的描述是:假定S表示某一个有意义的句子,由一连串特定顺序排列的词w1,w2,...,wn组成,这里n是句子的长度。而S在文本中出现的可能性,也就是数学上所说的S的概率P(S)。既然S = w1,w2,...,wn,那么不妨把P(S)展开表示:P(S) = P(w1,w2,...,wn) 利用条件概率的公式,S这个序列出现的概率等于每一个词出现的条件概率相乘,于是P(w1,w2,...,wn)可展开为:
P(w1,w2,...,wn) = P(w1)X P(w2|w1) X P(w3|w1,w2)...P(wn|w1,w2,..,w n-1)
其中P(w1)表示第一个词w1出现的概率;P(w2|w1)是在已知第一个词的前提下,第二个词出现的概率;以此类推。不难看出,到了词wn,它的出现概率取决于它前面的所有词。

从计算上看,第三个词的条件概率P(w3|w1,w2)已经非常难算了,到了最后一个词wn,条件概率P(wn|w1,w2,..,w n-1)的可能性太多了,无法估算。

19世纪到20世纪初,俄罗斯有个数学家叫马尔可夫,他给了个偷懒但还颇为有效的方法,也就是每当遇到这种情况时,就假设任意一个词wi出现的概率只同它前面的词wi-1有关,这样问题就变得简单了。这种假设在数学上称为马尔可夫假设。现在,S出现的概率就变得简单了:P(S) = P(w1) X P(w2|w1) X P(w3|w2) ...P(wi|wi-1)...P(wn|wn-1)
此公式对应的统计语言模型是二元模型(Bigram Model)。
而假设一个词由前面N-1个词决定的,对应的模型被成为N元模型。

接下来的问题就是如何估计条件概率P(wi|wi-1)。根据它的定义
P(wi|wi-1) = P(wi-1,wi)/P(wi-1)
而估计联合概率P(wi-1,wi)和边缘概率P(wi-1),只要数一数wi-1,wi这对词在统计的文本中前后相邻出现了多少次#(wi-1,wi),以及wi-1本身在同样的文本中出现了多少次#(wi-1),然后用两个数分别除以语料库的大小#,即可得到这些词或者二元组的相对频度。而根据大数定理,只要统计量足够,相对频度就等于概率,而P(wi|wi-1)就是这两个数的比值,所以P(wi|wi-1)约等于#(wi-1,wi) / #(wi-1)

高阶语言模型

上述的二元模型太过简化了,比如“美丽的花朵”,花朵其实和美丽有关。因此,更普遍的假设是某个词和前面若干个词有关。

假定文本中的每个词wi和前面N-1个词有关,而与更前面的词无关,这样当前词wi的概率只取决于前面N-1个词P(w i-n+1,w i-n+2,...w i-1)。因此
P(wi|w1,w2,...,wi-1) = P(wi|w i-n+1,w i-n+2,...w i-1)
这种假设被称为N-1阶马尔可夫假设,对应的语言模型称为N元模型(N-Gram Model)。N = 2是二元模型,而N = 1的一元模型实际上是一个上下文无关的模型,也就是假定当前词出现的概率与前面的词无关。而在实际应用中最多的是N = 3的三元模型,更高阶的模型就很少使用了。

N元模型的大小(或者说空间复杂度)几乎是N的指数函数,即O(|V|^N),这里|V|是一种语言词典的词汇量,一般在几万到几十万个。而使用N元模型的速度(或者说时间复杂度)也几乎是一个指数函数,即O(|V|^(n-1))。当N从1到2,再从2到3时,模型的效果上升显著。而当模型从3到4时,效果的提升就不是很显著了,而资源的耗费增加却非常快,所以,除非不是不惜资源为了做到极致,很少有人使用四元以上的模型。Google的罗塞塔翻译系统和语言搜索系统,使用的是四元模型,该模型存储于500台以上的Google服务器中。

然而,三元或者四元模型甚更高阶的模型也无法覆盖所有的语言现象。因为在自然语言中,上下文之间的相关性可能跨度非常大,甚至可以从一个段落跨到另一个段落。因此,即使模型的阶数再提高,对这种情况也无可奈何,这就是马尔可夫假设的局限性。这时就需要采用其他一些长程的依赖性(Long Distance Dependency)来解决问题。

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

使用语言模型需要知道模型中所有条件概率,我们称之为模型的参数。
通过对语料的统计,得到这些参数的过程称作模型的训练。

对于二元模型的模型训练方法,就是那两个数计算一下比值即可——P(wi|wi-1)约等于#(wi-1,wi) / #(wi-1),但问题是,如果同现的次数#(wi-1,wi)等于0怎么办。
如果用直接的比值计算概率,大部分条件概率会为0,这种模型我们称之为“不平滑”。在实际应用中,统计语言模型的零概率问题是无法回避的,必须解决。

训练统计语言模型的艺术就在于解决好统计样本不足时的概率估计问题。
1953年古德(I.J.Good)在他的老板图灵(Alan Turing)的指导下,提出了在统计中相信可靠的统计数据,而对不可信的统计数据打折扣的一种概率估计方法,同时将折扣出来的那一部分概率给与未看见的时间(Unseen Events)。古德和图灵还给出了一个重新估算概率的公式,这个公式被称为古德-图灵估计(Good-Turing Estimate)。
古德-图灵估计的原理是这样的:对于没有看见的事件,我们不能认为它发生的概率就是零,因此我们从概率的总量中分配一个很小的比例给与这些没有看见的事件。这样一来,看见的那些事件的概率总和就要小于1了,因此,需要将所有看见的时间概率调小一点。至于小多少,要根据“越是不可信的统计折扣越多”的方法进行。

以统计词典中的概率为例,来说明古德-图灵公式。

假定在语料库中出现r次的词有Nr个,特别的出现0次(未登录词)出现的次数为N0个。语料库中词语的个数为N,显然

出现r次的词在词典中的相对频度为r/N。如果不做任何优化处理,就依这个相对频度作为这些词的概率估计。

加入当r非常小时,这么统计可能不可靠,因此出现r次的那些词在计算它们的概率时要使用一个更小一点的数,是dr,而不是r。古德-图灵估计按照下面的公式计算dr:

显然

一般来说,出现一次的词的数量比出现两次的词的数量多,出现两次的词的数量比出现三次的数量多。这叫做Zipf定律。
即r越大,词的数量Nr越小,即Nr+ < Nr。 因此,一般情况下dr < r,而d0 > 0。这样就给未出现的词赋予了一个很小的非零值,从而解决了零概率的问题。同时下调了出现频率很低的词的频率。当然,在实际的自然语言处理中,一般对出现次数超过某个阈值的词,频率不下调,只对出现次数低于这个阈值的词,频率才下调,下调得到的频率总和给未出现的词。

这样出现r次的词的概率估计为dr/N。于是,对于频率超过一定阈值的词,它们的概率估计就是它们在语料库中的相对频度,对于频率小于这个阈值的词,它们的概率估计就小于它们的相对频度,出现次数越少的,折扣越多。对于未看见的词,也给予了一个比较小的概率。这样所有词的概率估计都很平滑了。

对于二元组(wi-1,wi)的条件概率估计P(wi|wi-1)也可以做同样的处理。因通过前一个词wi-1预测后一个词wi时,所有可能情况的条件总和应该为1,即

——(3.14)

对于出现次数非常少的二元组(wi-1|wi),它们出现的次数需要按着古德-图灵的方法打折扣,这样意味着有一部分概率没有分配出去,留给了未登录的二元组(wi-1wi)。基于这种思想,估计二元模型概率公式如下:

其中T是一个阈值,一般在8-10左右,函数fgt表示经过古德-图灵估计后的相对频度。而
这样可以保证上方等式3.14成立。

这种平滑的方法,最早由前IBM科学家卡茨(S.M.Katz)提出,故称为卡茨退避法(katz backoff)。类似地,对于三元模型,概率估计公式如下:

语料的选取问题

模型训练中另一个重要的问题就是训练数据,或者说语料库的选取。如果训练语料和模型应用的领域相脱节,那么模型的效果通常要大打折扣。

训练数据通常是越多越好。毕竟在数据量多的时候概率模型的参数可以估计得比较准确。高阶的模型因为参数多,需要的训练数据也相应会多很多。遗憾的是,并非所有的应用都能得到足够的训练数据。

在训练数据和应用数据一致并且训练量足够大的情况下,训练语料的噪音高低也会对模型的效果产生一定的影响,因此,在训练以前有时需要对训练数据进行预处理。一般情况下,少量的(没有模式的)随机噪音清除起来成本非常高,通常就不做处理了。但是对能找到模式的、量比较大的噪音还是需要进行过滤的。

第四章 谈谈中文分词

利用统计语言模型分词的方法,可以用几个数学公式简单概括如下:假定一个句子S可以有几种分词方法,为了简单起见,假定有以下几种:
A1,A2,...Ak
B1,B2,...Bm
C1,C2,...Cn
其中,A1,A2...B1,B2...C1,C2...等等都是汉语的词,上述各种分词结构可能产生不同数量的词串,k,m,n三个不同的下标表示句子在不同的分词时词的数目。那么最好的一种分词方法应该保证分完词后这个句子出现的概率最大。也就是说,如果A1,A2...Ak是最好的方法,那么其概率满足
P(A1,A2...Ak) > P(B1,B2,...Bm) 且 P(A1,A2...Ak) > P(C1,C2,..Cn)

如果穷举所有可能的分词方法并计算出每种可能性下句子的概率,那么计算量是相当大的,因此,可以把它看成是一个动态规划(Dynamic Programming)的问题,并利用维特比(Viterbi)算法快速地找到最佳分词。

一般来讲,根据不同应用,汉语分词的颗粒度大小应该不同。比如在机器翻译中,颗粒度应该大一些,“北京大学”就不能被分成两个词。而在语音识别中,“北京大学”一般是被分成两个词。因此,不同的应用应该有不同的分词系统。

语言处理的许多数学方法是通用的,和具体的语言无关。

分词的一致性

在将统计语言模型用于分词以前,分词的准确率通常较低,可以提升的空间非常大。不同的人切分的区别虽然会影响分词评测的准确性,但是好的方法和坏的方法还是可以根据分词结果与人工切分的比较来衡量的。

当统计语言模型被广泛应用后,不同的分词器产生的结构的差异要远远小于不同人之间看法的差异,这时简单依靠与人工分词的结果比较来衡量分词器的准确性就毫无意义了。所幸的是,中文分词现在是一个已经解决了的问题了,提高的空间微乎其微了。只要采用统计语言模型,效果都差不到哪里去。

词的颗粒度和层次

人工分词产生不一致性的原因主要在于人们对词的颗粒度的认识问题。

不同的应用中,应有不同的颗粒度。一个好的方法是让一个分词器同时支持不同层次的词的切分。原理介绍如下:
首先需要一个基本的词表(包括像“清华”、“大学”这样无法再分的词),和一个复合词的词表(包含复合词以及它们由哪些基本词构成,包括像“清华大学:清华-大学”)。
接下来需要根据基本词表和复合词表各建立一个语言模型,比如L1和L2.然后根据基本词表和语言模型L1对句子进行分词,就得到了小颗粒度的分词结果。最后,在此基础上,再用复合词表和语言模型L2进行第二次分词。

分词的不一致性可以分为错误和颗粒度不一致两种,错误又分成两类,一类是越界型错误,比如把“北京大学生”分成“北京大学-生”。另一类是覆盖型错误,比如把“贾里尼克”拆成了四个字。

对于某些应用,需要尽可能地找到各种复合词,而不是将其切分。因此,需要花一些功夫做数据挖掘的工作,不断完善复合词的词典(它的增长速度比较快),这是近年来中文分词主要花精力的地方。

转载于:https://juejin.im/post/5be655cae51d454b812f2728

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值