中文分词词性和序列标注之BI-LSTM-CRF-2-代码试验

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或更高, 此处只试验性质,不再继续优化):

algorithm P R F OOV OOV Recall IV Recall
maximum matching 0.836 0.904 0.869 0.058 0.059 0.956
maximum probability 0.859 0.919 0.888 0.058 0.085 0.970
HMM 0.804 0.789 0.796 0.058 0.364 0.815
Full Second Order HMM 0.824 0.799 0.811 0.058 0.360 0.825
MEMM 0.909 0.891 0.900 0.058 0.383 0.923
CRF 0.932 0.912 0.922 0.058 0.556 0.934
BI-LSTM-CRF 0.956 0.950 0.953 0.058 0.703 0.965

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.

Proudly powered by WordPress   Premium Style Theme by www.gopiplus.com