2 tensorflow 实现 BI-LSTM-CRF

代码比较长,请访问github查看 bilstmcrf

2.1 训练

用GRU替代LSTM,这也是工程中常用的做法,其参数更少。训练时使用tf.contrib.crf.crf_log_likelihood计算损失, 模型公式参考前文,其函数内部使用向前算法计算Z(x)规范化因子,和之前纯crf模型一样使用$\log\sum\exp$计算$logZ_w(x)$而不是直接计算$Z_w(x)$,这样才能避免数值超float32浮点范围。

2.2 解码

解码使用tf.contrib.crf.viterbi_decode,其实这个函数是numpy实现的,和显卡没什么关系。其算法参考 中文分词词性和序列标注之CRF-4-查找最大概率序列

2.3 试验效果

使用gensim.models.Word2Vec预训练zh-wiki, word2vec,最小字频=3, 向量维度=640,其余参数默认。
bilstm模型在pku集训练,并在对应集评分分词效果。前后向lstm(gru)分别640个单元,只有一层,输出拼接后接投影层,优化算法使用adam, 梯度剪切norm尺寸=5. 其余参数默认, pku评分如下表(猜测继续尝试超参数和优化结构应可提高到0.96或更高, 此处只试验性质,不再继续优化):

algorithmPRFOOVOOV RecallIV Recall
maximum matching0.8360.9040.8690.0580.0590.956
maximum probability0.8590.9190.8880.0580.0850.970
HMM0.8040.7890.7960.0580.3640.815
Full Second Order HMM0.8240.7990.8110.0580.3600.825
MEMM0.9090.8910.9000.0580.3830.923
CRF0.9320.9120.9220.0580.5560.934
BI-LSTM-CRF0.9560.9500.9530.0580.7030.965

Tag:none

Add a new comment.