这个,终于到了要解决
命名实体识别
的问题,搞自然语言处理,貌似这个绕不开的。CRF,传统的干这活的利器,听名字就是高大上。既然绕不开,那就整整吧。
CRF是用来标注和划分序列结构数据的概率化结构模型
。言下之意,就是对于给定的输出,标识序列Y和观测序列X,条件随机场通过定义条件概率P(Y | X),而不是联合概率分布P(X, Y)来描述模型。
很清楚了,这是个判别模型。
CRF也可以看做一个无向图模型或者马尔可夫随机场。
任何一个概念,都要从定义着手:
设G = (V, E)为一个无向图,V为结点集合,E为无向边的结合。Y = {Yv | v ∈ V},即V中的每个结点对应于一个随机变量Yv,其取值范围为可能的标记集合{y}。如果以观察序列X为条件,每一个随机变量Yv都满足以下马尔可夫特性:
p(Yv | X, Yw, w ≠ v) = p(Yv | X, Yw, w ~ v)
,其中,w ~ v表示两个结点在图G中是邻近结点。那么(X,Y)为一个条件随机场。
从定义中能得出啥来呢?
CRF考虑一件东西,不但要考虑自身,还要考虑周围的情况。举个例子,我们做命名实体识别,例句:“Google的总部在硅谷”。我们知道地址是“硅谷”,其他位置的词对我们识别“硅谷”有啥帮助呢?例如,“硅谷”前面是“在”,是不是这个字后面经常接地址呢?“在”前面的词是不是应该是名词?这样的综合考虑,就是CRF中的特征选择或者叫特征模板。
简要的说,CRF算法,需要解决三个问题:
1、特征的选择
在CRF中,很重要的工作就是找特征函数,然后利用特征函数来构建特征方程。在自然语言处理领域,特征函数主要是指一个句子 s,词在句子中的位置 i,当前词的标签 l_{i},前一个词的标签 l_{i-1}。
2、参数训练
在每一个特征函数之前,都有一个