第5章 隐含马尔可夫模型
到目前为止,它一直被认为是解决大多数自然语言处理问题最为快速、有效的方法。
预备知识:
下面,我们通过一个通信模型来认识隐马尔科夫模型。下图表示了一个典型的通信系统:
其中s1,s2,s3…表示信息源发出的信号,比如手机发送的信号。o1,o2,o3…是接收器(另一部手机)接收到的信号。通信中的解码就是根据接收到的o1,o2,o3…还原发送信号s1,s2,s3…。
在通信中,如何根据接收端的观测信号o1,o2,o3…来推测信号源发送的信息s1,s2,s3…呢?只需要从所有的源信息中找到可能产生出观测信号的那一个信息。用概率论的语言来描述,就是在已知o1,o2,o3…的情况下,求得令条件概率P(s1,s2,s3…|o1,o2,o3…)达到最大值的那个信息串s1,s2,s3…,即:
s1,s2,s3… =
其中Arg是参数Argument的缩写,表示能获得最大值的那个信息串。该公式不易求解,可以使用贝叶斯公式将其等价变形为:
P(s1,s2,s3…|o1,o2,o3…)= P(o1,o2,o3…|s1,s2,s3…)* P(s1,s2,s3…)/ P(o1,o2,o3…);
其中,P(o1,o2,o3…|s1,s2,s3…)表示信息s1,s2,s3…在传输后变成接收信号o1,o2,o3…的可能性;而P(s1,s2,s3…)表示s1,s2,s3…本身是一个在接收端合乎情理的信号的可能性;最后,P(o1,o2,o3…)表示在发送端产生信息o1,o2,o3…的可能性。一旦信息o1,o2,o3…产生了,就不会改变,所以,P(o1,o2,o3…)可以看做一个常数。因此上面的公式可以等价变成:
P(o1,o2,o3…|s1,s2,s3…)* P(s1,s2,s3…);
这都是由果索因,语音识别也是听着去猜测说话者要表达的意思,机器翻译也是,自动纠错也是。几乎所有的NLP问题都可以等嘉诚通信的编解码问题。马尔科夫链
前面都是铺垫,最为后面讲述的材料。要想理解隐马尔科夫模型,我们先了解一下什么事马尔科夫链。
19世纪,概率论的发展对随机变量的研究发展到对随机变量的时间序列s1,s2,s3…st…即随机过程的研究。随机过程要比随机变量复杂得多。首先,在任何一个时刻t,对应的状态St都是随机的。其次,任何一个状态St的取值都可能和周围其他的状态相关。这样随机过程就有了两维的不确定性。P(St| S1,S2,S3…,St-1,…).马尔科夫为了简化问题,提出了一种简化的假设,即随机过程中各个状态St的概率分布,只与它前一个状态St-1有关,即:
P(St|S1,S2,S3…,St-1,…)=P(St|St-1);
当然,这种假设未必适合所有的应用,但是至少对以前很多不好解决的问题给出了近似解。符合这个假设的随机过程就是传说中的马尔科夫过程,也称为马尔科夫链。
隐含马尔科夫模型
隐含马尔科夫模型是上述马尔科夫链的一个扩展:任何时刻t的状态St是不可见的。所以观察者设法通过观察到一个状态序列S1,S2,S3…,St…来推测转移概率等参数。但是,隐含马尔科夫模型在每个时刻t会输出一个符号Ot,而且Ot和St相关且仅和St相关。这个被称为独立输出假设。隐含马尔科夫模型的结构如下:其中隐含的状态S1,S2,S3,…是一个典型的马尔科夫链。因此将这种模型称为隐含马尔科夫模型。
基于马尔科夫假设和独立输出假设,我们可以计算出某个特定的状态序列S1,S2,S3…产生输出符号O1,O2,O3…的概率。
P(o1,o2,o3…s1,s2,s3…)=
又因为Ot仅和St相关,所以:
P(o1,o2,o3…|s1,s2,s3…)=
P(s1,s2,s3…)=
然后把(2)和(3)代入
P(o1,o2,o3…s1,s2,s3…)P(o1,o2,o3…|s1,s2,s3…)* P(s1,s2,s3…)
中,即可得到公式(1);这就是隐含马尔科夫模型。
许多自然语言的处理问题和通信的解码问题是等价的,完全可以用隐含马尔科夫模型来解决。隐含马尔科夫模型最成功的应用最早是语音识别,还有机器翻译、图像处理、基因序列以及股票投资等。
围绕隐含马尔科夫模型,有三个基本问题:
给定一个模型,如何计算某个特定的输出序列的概率
给定一个模型和某个特定的输出序列,如何找到最可能产生这个输出的状态序列
给定足够量的观测数据,如何估计隐含马尔科夫模型的参数
第二个问题:维特比解码算法
第三个问题:下面将会讨论的模型训练问题
分别对应的解决办法:
1. Forward-backward
2. Viterbi
3. Baum-welch
这里不对每一个具体的算法做解释了,请查阅相关资料。
(无监督训练方法)鲍姆-韦尔奇算法:
两个不同的隐含马尔科夫模型可以产生同样的输出信号,因此,仅仅通过观测到的输出信号来倒退产生他的隐含马尔科夫模型,可能会得到多个合适的模型。但是总会是一个模型Mtheta1 比另一个模型Mtheta2更有可能产生观测到的输出,而这个算法要做的就是找出这个theta(对应为模型的参数)。具体思想如下:
首先找到一组能够产生输出序列O的模型参数(显然他们是一定存在的,因为转移概率P和输出概率Q为均匀分布时,模型可以产生任何输出,当然包括了我们观察到的输出O)现在,有了这样的一个初始模型,我们称之为M0.需要在这个基础上找到一个更好的模型。假定解决了前两个问题,不但可以找出这个模型产生O的概率,而且可以找到这个模型产生O的所有可能路径以及这些路径的概率。这些路径,实际上标志着每个状态经历了多少次,到达了哪些状态,输出了哪些符号,因此可以将他们看作标注的训练数据。从而可以算出对应参数,得到新的模型。称之为一次迭代。
可以证明,这个新模型的概率更大。
不断迭代,就是鲍姆-韦尔奇算法的原理。这个算法的每一次迭代都是不断的估计新的模型参数,使得输出的概率达到最大化,因此这个过程被称为期望值最大化。简称EM过程。能找到局部最优点,不能找到全局最优点。是一种无监督的算法。
一直怀着很好奇的心情学习了隐含马尔科夫模型,当然现在只是了解了一些基本知识,在这里和大家一起分享下,肯定有许多不足之处,希望能多讨论,多指点。关于隐含马尔科夫的训练方法(鲍姆----韦尔奇算法)这里就不作介绍了。
第六章 信息的度量和作用
1、信息熵:信息的度量
对于任一个随机变量
X
,它的信息熵定义如下:
变量的不确定性越大,信息熵越大,所需要的信息量越大。
2、信息的作用:消除不确定性
信息往往与不确定性挂钩,在没有任何信息的情况下,一个事物内部是笼统的不确定的,当我们得到越来越多的信息的时候,事物才会被确定下来。所以信息量越大我们越能确定一个事物。所以信息是为了消除不一致性的
比如说搜索,我们输入一组关键词会得到许多包含这些关键词的网页,那么这些关键词就是信息,这些信息从上亿的网页中挑选出了一部分,从而消除了部分不确定性。那么我们想继续的消除不确定性得到更精确的搜索结果要怎么办,那就需要得到更多的信息,而不仅仅是对现有的信息玩一些公式数学的游戏,这里更多的信息比如包括网站质量的排名等等。再比如在自然语言处理中,我们通过一元模型来统计词频,或者二元模型乃至更高的模型根据上下文信息来确定某个词语,这都是信息的应用。
当然这里我们说的获取更多的信息指的是相关信息,不然也没什么用。
3、条件熵
条件熵公式:
公式说明,在了解Y的情况下,关于X的不确定性下降了。语言模型中的意义是,二元语言模型的不确定性小于一元语言的不确定性。
4、互信息:相关性度量
互信息公式:
公式4.2表明,互信息的意义表示:X的不确定性在了解了Y之后的下降值。 H(X) 表示X的不确定性, H(X|Y) 表示X在了解了Y之后的不确定值。互信息是一个取值在0到 min(H(X),H(Y)) 之间的函数,当X和Y完全相关时,它的取值是1;当二者完全无关时,它的取值是0。
互信息被广泛用于度量一些语言现象的相关性。例如词语的二义性(或称歧义性)。
5、相对熵
相对熵也用来衡量相关性,但和变量的互信息不同,它用来衡量两个取值为正数的函数的相关性,其定义如下:
从公式中得出结论:
(a.)对于两个完全相同的函数,它们的相对熵为零;
(b.)相对熵越大,两个函数的差异性越大;反之,相对熵越小,两个函数的差异性越小;
(c.)对于概率分布或者概率密度函数,如果取值均大于零,相对熵可以度量两个随机分布的差异性。
需要指出的是,相对熵不是对称的,即:
这样使用起来很不方便,为了让其对称,詹森和香农提出一种新的相对熵的计算方法,将公式5.1两边去平均,即:
相对熵可以用来衡量两段信息的相似度,如文章相似性。Google的自动问答系统用的就是相对熵来衡量两个答案的相似性。相对熵,衡量的是两个分布函数的相似性,TF-IDF的理论依据就是它。