第二章
我们把一个要表达的意思,通过某种语言的一句话表达出来,就是用这种语言的编码方式对头脑中的信息做一次编码,编码的结果就是一串文字。而如果对方懂得这门语言,他或她就可以用这门语言的解码方式获得说话人要表达的意思。这就语言的数学本质。
【语言的本质是信息载体,不同的语言是对同一种意思的不同编码方式,这个解释是自然语言的理解和语言之间的翻译基石】
图灵测试:让人和机器进行交流,如果人无法判断自己交流的对象是人还是机器,就说明这个机器具有智能了。
机器翻译和语音识别两种应用都是靠数学,更准确说是统计。
自然语言在演变过程中,产生了词义和上下文相关的特性。他的文法是比较复杂的上下文有关文法。对于上下文U无关文法,算法的复杂度基本是语句长度的二次方,而对于上下文有关文法,计算复杂度基本上是语句长度的六次方。【自然语言处理时的难点】
利用计算机处理自然语言的努力直到20世纪70年代初都是相当失败的。1970年,统计语言学的出现使得自然语言处理重获新生,并取得今天非凡的成就。推动整个技术路线转变的关键人物是frederick jelinek贾里尼克和他领导的IBM华生实验室。主管谷歌研究的斯伯格特当时还是卡内基-梅龙大学教授,卡内基-梅隆大学已经在传统的人工智能领域走的非常远了,大家遇到了很多跨不过去的障碍。后来,他去IBM华生实验室参观,看到那里基于统计的方法取得巨大成绩,连他一个做系统出身的教授也觉得这个领域的研究方法一定要有变化。【选择上的错误,会对结果造成很大的影响,选择大于努力。面对选择时的几点注意:(1)跟从大多数理性(2)找相关的专业人士了解情况,确定自己的兴趣是否是这方面。(3)】
在从20世纪80年代末至今的25年里,随着计算能力的提高和数据量的不断增加,过去看似不能通过统计模型完成的任务,渐渐都变得可能了,包括很复杂的句法分析。
只需要用数学的方法给出现今所有自然语言处理相关问题的全部答案。
自然语言处理的应用,包括了机器翻译,语音识别,文本到数据库的自动生成,数据挖掘和知识获取等等。
第三章
自然语言从它产生开始,逐渐演变成一种上下文相关的信息表达和传递的方式,因此让计算机处理自然语言,一个基本问题就是为自然语言这种上下文先关的特性建立数学模型。这个数学模型就是在自然语言处理中常说的统计语言模型。【统计语言模型的含义,以及这个数学模型描述的问题】
统计语言模型使得计算机能够知道一个文字序列是否能够构成一个大家都理解的并且有意义的句子。
【为了完成这个任务,上世纪70年代的科学家试图判断这个文字序列是否合乎文法、含义是否正确等。正如之前所说的,这条路走不通。而贾里尼克用一个简单的统计模型漂亮的搞定了这个问题。】
贾里尼克的观点:一个句子是否合理,就看它的可能性大小如何。至于可能性就用概率来衡量。
具体描述:
假定s表示一个有意义的句子,由一连串特定顺序排列的词w1,w2,w3…wn组成,n为句子长度。要想知道s在文本中出现的可能性,也就是概率P(S),一种不可行的方法就是统计历史上所有讲过的话,当然这不可行。换个思路,P(S) = P(w1,w2,w3…wn),利用条件概率公式,S序列出现的概率等于每个词出现的条件概率相乘:
其中P(w_1)表示第一个词出现的概率。从计算上来看,越到后面,计算条件概率就越来越难算了,最后一项几乎无法估算。但是根据马尔科夫提出的一种方法(每当遇到这种情况时,就假设任意一词wi出现的概率只同它前面一词 有关),问题变得简单了但是依然较为准确。现在S的概率可以描述为:
这就是统计语言模型中的 二元模型。如果模型更复杂了可能称为N元模型。
根据条件概率的定义:
统计 和 可以利用很多机读文本和专业人士语料库。根据wi和w_i相邻出现的次数 和 本身在文本中出现的次数 可以计算两者的频度。根据大数定理,相对频率等于概率,有
即:
高阶语言模型:假设文本中的每个词都与前面N-1个词有关,而与更前面的无关,这样的假设称为N-1阶马尔科夫假设,对应的模型称为N元模型。
N元模型的复杂度(取2,3多的原因):N元模型的空间复杂度几乎是N的指数函数,即 ,|V|表示语言字典的词汇量,一般在几万到几十万。第二个问题是效益递减,1->2模型的效果显著,但越往上提升越小。最后一个问题, 马尔科夫假设的局限性:自然语言中上下文的相关性跨度可能非常大,马尔科夫假设无法解释,需要 长程的依赖性解决。
零概率问题和平滑方法:出现概率为0或概率为1的情况统计不可靠。
以中文为例,中文的三元模型有8*10^15个参数,而从网页上获取的全部语料也只有10^13,如果直接用此值计算概率,依然大部分条件概率为0,这种模型成为不平滑。【统计语言模型的不平滑问题不可避免,必须解决】
古德-图灵估计的思想是,在统计中相信可靠的统计数据,对不可信的统计数据打折扣的概率估计方法,对折扣出来的这部分概率给予未看见的事件。其原理是:对于没有看见的事件,我们不能认为他发生的概率就为0,因此我们从概率的总量中,分配一个很小的比例给这些没有看见的部分。要对所有看见的数据的概率进行打折,变小多少根据越是不可信的统计折扣越多的方法进行。
古德-图灵估计:
以统计词典中每个词的概率为例:
假定语料库中出现r次的词有
个,特别的,未出现的词数量是
,语料库大小为N。显然有
假定当r较小时,它的统计可能是不可靠的,因此在计算那些出现r次的词的概率时,要使用一个更小一点的次数,是 而不是r。古德图灵估计按照下式计算dr:
在实际使用中,当频数低于一个阀值了才会使用这样的估计,这样出现r次的词的概率估计 。对于次数大于阀值的词,其概率估计就是语料库中的相对频度,对于出现次数较少的词,他们的概率估计小于他们的相对频度,出现的次数越少,这个折扣就越多,对于未看见的词,也给予了一个比较小的概率。这样所有词的概率估计就是很平滑的。
卡兹退避法:
对于二元组的条件概率估计也可以用古德-图灵估计做同样的处理。对于出现次数非常少的二元组
其概率估计需要打折扣,这样
,同时有一部分概率没有分配出去,留给了没有看到的二元组。基于此,给出二元组概率的公式如下:
其中T是一个阀值,通常去8-10左右,函数 表示古德-图灵估计后的概率。
关于语料选取的问题,对网页的语料进行筛选后用以训练的效果,不会比人民日报的语料差,语料的选取需要与应用场景一致。