python条件随机场_一文读懂用于序列标注的条件随机场(CRF)模型

模型前的铺垫

8ed53af32978b292c8bc40a9d1aa76c4.png

我们先引入一个假设,假设一个句子的产生只需要两步:

第一步:基于语法产生一个合乎文法的词性序列

第二步:对第一步产生的序列中的每个词性找到符合这个词性的一个词汇,从而产生一个词汇序列,便产生出了一个句子

b84bac94fa2fbacb3f3b146574865e93.png

图1

那么如图1所示,假如我们基于语法产生了一个词性序列("PN V D N"),那基于这样的词性序列到对应的词典集合中选词便可以组合出一个句子。

1447070829e4907eedc16b02f19e2b72.png

图2

假如我们产生的句子是"John saw the saw",那么如图2所示,每个词都有一定的概率被选出,基于词性序列("PN V D N")产生这个句子的概率为:

1e9e47b4402c35bf5774dbcc780fc250.png

如果把词性序列用y表示,把句子的词汇序列用x表示,那么上述句子的生成可以表示为:

e9f01da9a642d7420c2fc793de0f895c.png

这样我们就可以得到序列x、y同时出现的概率P(x,y):

763bf649b1a707f2bc7bcf585252b4a6.png

其中P(y)表示序列y出现的概率:

6bf023290d8ed3a50a5ecc94026c63a6.png

P(x|y)表示基于序列y生成序列x的概率:

dcd00e1c917a360951d2e10884330943.png

基于上述想法,我们可以得到更一般化的表示:

58c80939157644ecfadcf253960460f8.png

从而P(y)可以更一般的表示为:

5f42d962dbf34ae637650fb9c31004c8.png

同样P(x|y)可以更一般的表示为:

7e375723c7af7f7daaf5541dc84cd602.png

那么可以得到P(x,y)更一般的表示为:

0ae2916b174a0ac9ba8b81787ba2bde0.png

58235ae8af995a6a5c6ed45aaa7e74ab.png

图3

再来看图3,当序列x是已知的或者说是可观测的,而标记序列y是隐藏的或者说是未知的,那么如何来求得理想标记序列y呢?我们通过采取求解条件概率P(y|x)来求得,即:

65fa58bc5538d75b7d1ef278bffdf934.png

其中y是一个可能的标记序列,Y是所有可能的标记序列。上式的意义在于期望求得一个能使条件概率P(y|x)最大的标记序列y。也就是说,如果我知道了P(y|x)如何求,再把每个可能的标记序列y带进去,就能得到想要求得的理想标记序列y。

CRF模型引入

基于上述的铺垫,下面我们开始引入条件随机场模型。

条件随机场(CRF)模型可以用如下式子来描述:

68f921c28bedffec71d30568e33ecb90.png

其中:w表示权重向量

0dd1d83549e06177d8de825641de8900.png表示特征向量

现在我们重点来关注如何求解条件概率P(y|x)辅助理解

61af8a46330fb31b1313022e6b2aa9ea.png

从标注问题的角度来理解条件概率P(y|x)的含义。x表示给定的待标注序列,y表示给定x下对应的一个标记序列。我们希望通过求解条件概率P(y|x)来得到给定x条件下对应的一个理想标注序列

P(y|x)可以表示为:

5a7bf1a8eaaad4d3e75e81598170376f.png

我们知道

14cfe9d58b6807a6dfb008e0051facdf.png

不妨设

db125446e14bf2c5b1dad8a97a433c3d.png辅助理解

61af8a46330fb31b1313022e6b2aa9ea.png

R为比例系数

将上式带入P(y|x)的表达式中可得

42475aec31875785a7a7a9533ea03c7b.png辅助理解

61af8a46330fb31b1313022e6b2aa9ea.png

Y表示所有可能的标注序列的集合,y'表示所有标注序列的集合中的某个标注序列

观察上式,可以看到分母部分其实只和x有关,所以可以将其简化的表示为Z(x),即:

0c4d3729567cd6d70176b797ccfc0047.png

也就是说,要求P(y|x),关键在于求解P(x,y),由之前的铺垫,我们知道:

cbb4eac5fccd7353df61574c379e473e.png

我们对上式两边取对数得:

06d93da27b6e32b5af36207faaa09051.png

其中

25a96beeaecec8403ff3609281316896.png

上式是如何来的呢?

0e3a55ecb484dbbdd3d88f80e6da6d00.png

图4

如图4所示,可得:

861c43c4d49e244f51eeb199402869d8.png

从而

3f1249bd7c40734891755f722a0f7606.png

同样,我们也能得到

ceb2ef86cb2baaaf9ad655981705eaf3.png

从而

f183344229cccc0749e704a6764ab8c1.png

我们可以将上式向量化表示为:

50e85a814b5c6e003fedf5da6995b0d9.png

我们可以令

70f60d3af6eb3c4b6365979d419b6bd4.png

其中

6df46a9a64f9f34b4ef0438acc076464.png

由于

4f988ef655d0bfb147594b3e59ad317f.png的值可能会大于1,这就不能用来表示概率了,所以

a6c21f840372071def5173911636832e.png

参考资料:

李宏毅《Sequence Labeling Problem》课程

目前本公众号建立了一个技术交流群

诚挚欢迎各位志同道合的朋友加入

63d7991161ee99a1cec1aa01cdd46476.png

1e49f215b1c464ea3b32c86dc55f3cae.png


版权声明:本文为weixin_39863155原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。