序列标注可以理解为给序列中的每一帧都进行分类任务,可以将这个序列用 CNN 或 RNN 进行编码,接一个全连接层用 softmax 激活,即逐帧softmax,其缺点是并没有直接考虑输出层面的上下文关联信息,而是把这些关联放到编码层面,希望模型自己学到这些内容,有时候会“强模型所难”。逐帧softmax把序列标注看成是 n 个 k 分类器
CRF 将输出层面的关联分离出来,以路径为单位,考虑的是路径的概率。CRF 将序列标注看成是1 个 k的n次方问题。
CRF 两个假设:
1、 分布是指数簇分布
2、 输出之间的关联仅发生在相邻位置,并且关联是指数加性的。(我们只需要对每一个标签和每一个相邻标签分别打分,然后将所有打分结果求和得到总分。)
h(y1;x)+g(y1,y2;x)
线性链 CRF:考虑到当前深度学习模型中,RNN 或 层叠 CNN 等模型已经能够比较充分捕捉各个 y 与输入的联系,因此可以考虑函数 g(相邻标签关系函数) 与 x 无关。
h(y1;x)+g(y1,y2)
g是一个有限的,待训练的参数矩阵而已;单标签的打分函数h 可以通过RNN或CNN 来建模。
训练 CRF,最大似然作为损失函数,难度在于归一化因子,需要对所有可能的路径打分进行指数求和(k 的 n 次方)。由于只考虑临近标签(马尔科夫假设),可以递归算出归一化因子,将原来的指数的计算量降低为线性级别。
模型训练完成以后,通过维比特算法找出最优路径来。主要思想就是一条最优路径切分成两段,那么每一段都是一条(局部)最有路径。
网友评论