点击上方,选择星标或置顶,每天给你送干货!
阅读大概需要5分钟
跟随小博主,每天进步一丢丢
来自 | 知乎
地址 | https://www.zhihu.com/question/62399257/answer/241969722
编辑 | 机器学习算法与自然语言处理
本文仅作学术分享,若侵权,请联系后台删文处理
如何理解LSTM后接CRF?
暂且简而言之,日后有时间了写文章详细展开。
1、perspectively
大家都知道,LSTM已经可以胜任序列标注问题了,为每个token预测一个label(LSTM后面接:分类器);而CRF也是一样的,为每个token预测一个label。
但是,他们的预测机理是不同的。CRF是全局范围内统计归一化的条件状态转移概率矩阵,再预测出一条指定的sample的每个token的label;LSTM(RNNs,不区分here)是依靠神经网络的超强非线性拟合能力,在训练时将samples通过复杂到让你窒息的高阶高纬度异度空间的非线性变换,学习出一个模型,然后再预测出一条指定的sample的每个token的label。
2、LSTM+CRF
既然LSTM都OK了,为啥researchers搞一个LSTM+CRF的hybrid model?
哈哈,因为a single LSTM预测出来的标注有问题啊!举个segmentation例子(BES; char level),plain LSTM 会搞出这样的结果:
input: "学习出一个模型,然后再预测出一条指定"
expected output: 学/B 习/E 出/S 一/B 个/E 模/B 型/E ,/S 然/B 后/E 再/E 预/B 测/E ……
real output: 学/B 习/E 出/S 一/B 个/B 模/B 型/E ,/S 然/B 后/B 再/E 预/B 测/E ……
看到不,用LSTM,整体的预测accuracy是不错indeed, 但是会出现上述的错误:在B之后再来一个B。这个错误在CRF中是不存在的,因为CRF的特征函数的存在就是为了对given序列观察学习各种特征(n-gram,窗口),这些特征就是在限定窗口size下的各种词之间的关系。然后一般都会学到这样的一条规律(特征):B后面接E,不会出现E。这个限定特征会使得CRF的预测结果不出现上述例子的错误。当然了,CRF还能学到更多的限定特征,那越多越好啊!
好了,那就把CRF接到LSTM上面,把LSTM在time_step上把每一个hidden_state的tensor输入给CRF,让LSTM负责在CRF的特征限定下,依照新的loss function,学习出一套新的非线性变换空间。
最后,不用说,结果还真是好多了呢。
LSTM+CRF codes, here. Go just take it.
hope this helps.
https://www.zhihu.com/question/62399257/answer/325334144
简单说就是条件随机场可以把label的上下文学出来。lstm加softmax分类的时候只能把特征的上下文关系学出来,label的没学出来。
https://www.zhihu.com/question/62399257/answer/206903718
我理解B-LSTM+CRF模型,所谓在LSTM上面套CRF其实是不严谨的说法,假如这样说,那实际上是两层sequence model了吗。我认为其实是说把LSTM和CRF融合起来。比如LSTM的产出只有发射概率,尽管这个发射概率考虑到了上下文,因为LSTM有门机制,可以记忆或者遗忘前面内容,然后双向,有前有后这样,但是毕竟没有转移概率,像CRF HMM这种,都是结合发射概率和转移概率的。比如在词性标注,最简单BIO这样,有显而易见的规则,就是B-X后面不会有I-Y。所以干脆搞出B-LSTM+CRF,结合发射概率和转移概率这样。实际上后面接的CRF并不是真的CRF,比如它又没有特征模板,它又不接受离散特征,他只是一次Viterbi推导而已。