
先看上图就知道LSTM和CRF具体产出什么。LSTM+softmax分类后只能把特征的上下文关系学出来,CRF可以把label的上下文学出来。
比如通过上下文特征,BiLSTM输出“杨”最大概率是1.8,对应B-PER,“帅”最大概率是1.6,对应I-PER。这样貌似已经很完美了,都预测出来了。又比方我们换个句子,根据不同上下文特征学习后,“帅”的最大概率也许对应B-PER, 这就前后就有两个B,很显然就不对了。BiLSTM虽然是根据上下文特征学习后输出,但是输出值label相互之间是独立的。有没有可能在输出值label间再加点“东西”来学习label之间的关系了?HMM, MEMM,CRF就可以。要弄懂HMM,MEMM,CRF要先从贝叶斯开始.
生成式模型:联合概率P(Y, X) = P(Y|X) * P(X)=P(X|Y)*P(Y)
判别式模型:条件概率P(Y|X) = P(X|Y) / P(X)
从机器学习视角来看贝叶斯,假设分类问题中X可以理解为某特征,Y理解为某类。
P(“属于某类”|“具有某特征”)=在已知某样本“具有某特征”的条件下,该样本“属于某类”的概率。
P(“具有某特征”|“属于某类”)=在已知某样本“属于某类”的条件下,该样本“具有某特征”的概率。 所以叫做『后验概率』。
P(“属于某类”)=(在未知某样本具有该“具有某特征”的条件下,)该样本“属于某类”的概率。
P(“具有某特征”)= (在未知某样本“属于某类”的条件下,)该样本“具有某特征”的概率。所以叫做『先验概率』。
HMM属于生成式模型,为什么了?
HMM由五元素组成:
- StatusSet隐藏状态集,如上面例子中的{B,I,O};
- ObervedSet观察值集,就是语料库中的汉字{“杨”,“帅”......};
- 3.InitStatus 初始状态比如“O”;
- 4.TransProbMatrix转移概率矩阵,初始状态“O”转移到一下个隐状态是“B”的概率,是一个33的矩阵 {B,I,O}{B,I,O};
- 5.EmitProbMatrix发射概率矩阵,之前是隐状态(都不知道系统在干嘛),这次要“发射”出来了,隐状态值”B”到观察值“杨”的概率。
整个过程中,先求P(“隐状态O”),再求P(“隐状态B”|“隐状态O”),所以拟合的是 P(X)*P(Y|X) ,P(“隐状态B”,“隐状态O”)的联合概率分布,是生成式模型。
HMM中从隐状态“B”到观察值“杨”,接着隐状态“B”再到隐状态“I”,然后“I”再到观察值“帅”。这里两个观察值“杨”由“B”输出,“帅”由“I”输出,另外新的隐状态“I”好像只与前一个隐状态“B”有关。有没有一种方法可以让“杨”与“I”建立更多关系,这样”I”输出的观察值是不是和“杨”就有更多关联,同时隐状态“I”与更多的隐状态有关联,这样学习的会更深更准确。MEMM尝试解决这两个问题:
MEMM

MEMM 最大熵马尔科夫模型把上一个隐状态“B”和当前观察值“杨”通过最大似然估计得到当前隐状态“I”,再由“I”输出“帅”,这样“杨”和“帅”就建立了更多联系,虽然解决了HMM的第一个问题,不过存在局部最优,而不是全局最优,CRF因此出现了。
MEMM是求条件概率的过程:P(Y|X1,X2) P(“隐状态I”|“隐状态”B,观察值“杨”),因此是判别式模型。
最大似然估计(MLE)
岔开一个话题,讲下最大似然估计(Maximum likelihood estimation, MLE),似然likelihood和概率probability在英语里都有可能性的意思,所以本质上这两者都是概率。

不同的是likelihood是通过给定的数据来计算出参数的似然L,probability是通过给定的参数来观测出数据的概率P。
最大似然估计有点贪婪的意味,已知结果,求产生该结最大可能的条件。也顺带提一下EM算法,EM相当于一个框架,你可以采用不同的模型进行聚类,比如HMM,MEMM,GMM(高斯混合模型)等。主要分两大步骤:一是Expectation先初始化参数,然后再观察预期;二是如果灿在偏差就重新估计参数,这个是最大化的步骤(Maximization).
CRF条件随机场

回归正题继续CRF,上图可以看出,线性Linear-CRF对比HMM把箭头(转移方向)变成了直线。最直白的感官体验是每个圆圈(向量)都可以肆无忌惮畅通无阻的相邻的圆圈相连了,交互多了,模型也变复杂了,每个圆圈之间的关系从“局部”也变成“全局”。线性Linear-CRF是CRF很多结构中比较常用的一种,只要保证状态序列满足马尔科夫性都是CRF。那什么是马尔科夫性了?
这时候引入“团”,“势函数”和“分离”的概念。如下图1,2,3就是一个极大团;1,3,4也是一个极大团;4,5也是一个极大团。当一个团中再也无法加入其他节点说明这个团就是一个极大团。做算法时,都是极大团,因为如果它不是极大团,那它一定属于某个极大团。

每个极大团对应一个势函数,势函数用于描述团中变量之间的关系,要求为非负函数,除以Z是为了规范化,保证P(X)构成一个概率分布。

分离:比如从节点1到5,如果{1,2}和{5}被{3,4}分离,那么{1,2}和{5}可以看成是独立的。方法分全局马尔科夫性,局部马尔科夫性和成对马尔科夫性。实际上通过全局可以得到局部,通过局部可以得到成对,通过成对可以得到全局,所以这三者实际上是等价的。这里就解释什么是马尔科夫性了。直白总结,和我连接的节点说明是相关的,不连接的节点说明是独立的。如下图{1,2}与{3,4}相关,与{5}独立。

继续杨帅的例子,“杨”“帅”两个字(圆圈)构成一个词,这个词就是一个“团”,并且这个“团”上有对应的“势函数”。依次类推,“杨帅”与“出生”就是两个“团”并对应两个“势函数”。比方说“杨帅”和“出生”分别对应{1,2},{3,4}, ”于”对应{5}。根据马尔科夫性,“杨帅”与“出生”具备相关性,“杨帅”与“于”相互独立。
以上是马尔科夫性和马尔科夫随机场,条件随机场相当于马尔科夫随机场加入了x输入和y输出。还是以输出标签为例,用线性linear-CRF来实现。

状态特征:定义在节点上,该节点是否拥有某个属性
转移特征:定义在边上,这两个状态是否会因为某个特征而转移
比如杨帅,“杨”状态特征是B,B的转移特征:B后面可以接I,但是不能接B。那“帅”就不会是B。具体公式如下:

其实我们看到全连接,又看到w权重是不是很熟悉,这个不就是我们的深度学习的影子吗?为什么CRF牛,建立了部分“全连接”而且可反向传播调整权重。当然这是我的理解,不准确可以给我留言,大家一起讨论。
进入代码环节:

之前的图有隐层不是很详细,所以换了张图:

在损失层中,project_logits是神经网络最后一层的输出,该矩阵的shape为[batch_size, num_steps, num_tags],第一个是batch size,第二个是输入的句子的长度,第三个标记的个数,即命名实体识别总标记的类别数。targets是输入句子的label,即每个字的label,它的维度为[batch_size, num_steps]。损失层定义了一个self.trans矩阵,大小是[num_tags+1, num_tags+1], 加1是因为还有一个类别是未定义。将project_logit,targets以及self.trans交给tensorflow的系统函数crf_log_likelihood即可求得损失了。

crf_log_likelihood函数中分为两步,最终得到scores:
(1)调用crf_sequence_score函数计算sequence_scores。
(2)将sequence_scores进行归一化处理。
CRF参数的学习及score计算过程主要在crf_sequence_score中进行,我们好好看看这个函数。

网友评论