**
**
1. 这篇文章主要关于环境搭建以及遇到的一些bug等一些基础的梳理
2. 正确使用版本后没有问题,项目可以跑通,这是利用lstm_train.py跑通的结果
但仍然存在问题,
plt.plot(history.history['accuracy'])
这句代码里网络上给出的结果是将“accuracy”改为“acc”,但实际上仍有错误,不过暂时不影响模型的训练
3.现在整理一下研究思路
模型参考的这篇博文https://www.cnblogs.com/vipyoumay/p/ner-chinese-keras.html
其中BiLSTM+CRF的结构如下,很清晰
将已经标注好的训练样本送入进行训练即可
4.一些常见bug
(1)TypeError: Tensors in list passed to ‘values’ of ‘ConcatV2’ Op have types [bool, float32] that don’t match
情况一:
keras=2.3.1,tensorflow=2.2.0,keras_contribute=2.0.8
这个是因为版本的修改问题,可以修改crf.py 516行:
mask2 = K.cast(K.concatenate([mask, K.zeros_like(mask[:, :1])], axis=1),
修改为
mask2 = K.cast(K.concatenate([mask, K.cast(K.zeros_like(mask[:, :1]), mask.dtype)], axis=1),
这个是有效的,我的问题就在这里
情况二:
keras=2.3.1,tensorflow=1.3.1,keras=2.0.8
同样可以修改516,517行
mask2 = K.cast(K.concatenate([mask, K.zeros_like(mask[:, :1])], axis=1),
K.floatx())
修改为
mask2 = K.cast(K.concatenate([tf.to_float(mask), K.zeros_like(mask[:, :1])], axis=1),
K.floatx())
这个不清楚效果,有问题的话可以适用一下
其他情况欢迎大家补充.
(2)keras加载模型load_model报错——ValueError: Unknown layer: CRF
from keras.models import load_model
model = load_model(model_path)
会报错,但具体原因没有弄清楚,希望懂的朋友可以讲解一下需要在load_model函数中添加custom_objects参数,来声明自定义的层
(用keras搭建bilstm-crf,在训练模型时,使用的是:from keras_contrib.layers.crf import CRF)
from keras_contrib.layers.crf import CRF, crf_loss, crf_viterbi_accuracy
model = load_model(model_path, custom_objects={
"CRF": CRF, 'crf_loss': crf_loss,
'crf_viterbi_accuracy': crf_viterbi_accuracy})
修改为这样的代码后即可解决问题,亲测是有效的
–to be continued