条件随机场的作用
条件随机场解决的问题是在已知观测序列的情况下,如何求解隐藏状态,比如说已知语音"我爱自然语言处理",如何求解每个语音对应的文字,通过X将Y1-Yn求解出来,与HMM不同,在HMM中要求Y1-Yn是一个序列,在条件随机场中Y1-Yn可以是一个无向图,并且x不是条件独立的,而是作为一个整体进行考虑,这也是条件随机场的优势,因为要求Y1-Yn是一个序列显然是不合理的。
注意:在一般的条件随机场中,Y1-Yn可以是任意的无向图,但是在自然语言处理中,Y1-Yn是一个序列,是链式的,图上所示的结构,下面的讨论也是基于这个前提的。
条件随机场数学模型
归纳为求解如下公式:
P(Y|X),例如X是"我爱自然语言处理"对应的语音(也就是观测序列),Y是"我爱自然语言处理"对应的文字(也就是隐藏状态)。
假如在势函数上,每一个团都有一个势函数φC,可以使用吉布斯分布建立一个概率分布。
是在上文中出现的公式,表示的是在一个团上面的因子函数写成势函数的形式,即使在概率Yc左边加上条件式X依旧能够成立。
Yi是其中的一个隐藏状态,比如y3"我爱自然语言处理"的语音对应第三个语音对应的文字,因为是一个链式的结构,与yi有联系的就只有yi1和yi+1,x作为一个前提条件出现,这样就将x考虑进去了。
在链式结构中,一条边上定义一个因子函数,也就是势函数,因为一条边就是一个团,tk对应的构建在边上的势函数,si相当于是构建在点上面的势函数,因为一个点也是一个团,因为势函数相乘就是指数相加,再除以归一化因子,就可以写成上面的形式,这里相当于将最大熵模型里的公式α写成了exp(λ)。
该表达式和最大熵模型的联系:
exp{-E(λktk(yi-1,yi,x))}其实就是最大熵模型的指数族表示,其中将α写成exp(λ)的形式,tk表示的是特征函数,特征函数有k个,有k个特征函数就会对应有k个系数,这个和最大熵模型里面的概念是对应的, 这个函数的含义就是因为这里Y是以一种链式的特殊无向图的形式,所以无向图中包含的团是单节点和双节点,其他的都不是团,因为如果是三个节点的话必然会有两个节点之间没有互联,所以不是最大团,在马尔科夫网络中,整体的概率分布等于所有团的概率相乘,exp{-E(λiti(yi-1,yi,x))}这个是双节点团满足一个特征函数求得的值,E(Σλktk(yi-1,yi,x))}这个是这个团满足所有的特征函数,也就是这个团的概率,所以接下来就是要讲tk也就是特征函数是怎么得到的。sl的理解和tk是一样的,只是这里的团是一个节点,这样和最大熵模型的理解就是一样的了。
最大熵模型详解: https://blog.csdn.net/she201007780123/article/details/90524375
理解重要:yi对应的势函数以为和yi-1和yi+1有联系,可以写成),
=P(y0...yi...yn|x)=P(y0|x)*...P(yi|x)*...P(yn|x)=exp{-E(λktk(y0,y1,x))}*...exp{-E(λktk(yi,y1,x))}*...exp{-E(λktk(yn,y1,x))}=
),同理单节点团也能通过这种形式求得,最后再将单节点团和两节点团的幂加起来,在链式图中所有单点团和所有双点团的和就是这个图所有的团,这些团因子函数相乘再除以归一化因子,就是Y在X的前提下的联合概率分布。
关于马尔科夫网相关内容,请参考本人另外一篇博客如下:
https://blog.csdn.net/she201007780123/article/details/90581806
tk,sl是什么呢
tk,sl类似最大熵模型里面特征函数,越重要的特征函数对应的系数越大,一份语料满足特征函数的次数越多,该特征函数对应的系数越大,通过语料的训练获得参数值,使用特征函数表达我们关心的内容,比如关心数字是不是大写,是不是数字,连续的两个字是不是“地名”,这些特征函数对最后的结果有决定性的作用,比如判别是不是“公司名”,是不是“景区”等等。
如何生成特征
这篇博客讲的很好:
https://blog.csdn.net/bobobe/article/details/80511489
如何求得最优的隐含状态
推理时需要尝试每一种隐藏状态组合,计算该隐藏状态组通过训练好的CRF模型得到的概率,依次遍历计算所有的隐藏状态序列,最后取概率最大的隐藏状态组合。但是要将Y1-Yn反推出来理论上需要将Y1-Yn的组合都尝试一遍,然后将概率最大的拿出来,但是这种组合太多了,没有可能枚举,比如分词问题,标签有(BMES),即使只有Y1-Y2-Y3三个隐含状态,也会有4*4*4=64种状态序列,下面使用维特比算法解决这个问题,首先要做的是将公式中的参数都求出来,然后通过维特比确定最佳的状态序列。
y*是表示能使最后计算出来的概率最大的隐藏状态,由于最大的概率和Z(x)无关,所有这里省去了,由于指数函数是增函数,所有将exp去掉,是由K个特征函数组成的向量,
是k个向量,两个做一个笛卡尔积,
每一个fk有变脸整条隐藏状态,最后可以将这个表达式写成
,写成这个形式就能使用维特比算法来推理最佳的隐藏状态了。
相当于求从左到右连乘的最大概率,其中行表示状态,如果是分词就是BMES,长度表示的就是序列长度,任意两个节点之间的概率是可以计算出来的,通过该式计算,通过动态规划,行话就是维特比算法,假设求解yi的状态是什么,此时之前一个状态的解已经计算出来了,然后比如yi-1位B,位用分别计算BM,BB,BE,BS的概率,通过
计算,将最大的概率作为yi的状态,然后再通过yi计算yi+1,一次递推,计算整个状态,其中通过另外一个变量记录所以节点的状态,
,其中刚开始的两个节点之间的最大概率需要通过笛卡尔积求解相邻两个节点之间的最大概率,确定最大概率对应的状态作为前两个节点的状态。
如何验证估算的参数是否正确
参考: