BiLSTM CRF 模型代码实践过程中的记录
1、一个适当的 embedding_size 可以加速模型的运行速度
当将 embedding_size 的大小由 30 改为 100 的时候,可以明显感觉到运行速度增加了几倍
2、为什么要增加下面的操作呢?在参考的两个不同的人写的代码中都看到了下面的操作
embedding_word = tf.nn.dropout(x=embedding_word, keep_prob=self.keep_prob)
3、对命名实体识别任务的评估标准是什么呢?是怎么规定的呢?
在评估标准上跟其它的分类任务没有区别,都可以使用精准率、召回率、f1 score 等作为评估标准。
但是由于命名实体识别的特点,可以分为字符级和实体级。
另外由于命名实体识别的标签大部分都是 O ,故而在使用评估标准进行评估时,需要做出一定的修改。
例如在计算精准率 (precision score) 时,使用 sklearn 的 precision_score (from sklearn.metrics import precision_score)方法进行计算时,
对于参数 average 分别可选为:
① None,此时计算的是各个类别的精准率,返回的是一个一维数组,维度为 (label_num, )
② binary,二分类,一般来说不适合命名实体识别
③micro,微平均,不分类别计算精准率。对于二分类,公式:(TP + TN) / (TP + FP + TN + FN),也可扩展到多分类
,公式:
④macro,宏平均,分类别计算各自的精准率,再求算术平均。对于二分类,公式:(TP / (TP + FP) + TN / (TN + FN) ) / 2,
扩展到多分类,公式:
关于样本平衡问题和微平均和宏平均的关系,如下:
参考自:sklearn计算准确率、精确率、召回率、F1 score
如果每个类别的样本数量差不多,那么宏平均和微平均没有太大差异
如果每个类别的样本数量差异很大,那么注重样本量多的类时使用微平均,注重样本量少的类时使用宏平均
如果微平均大大低于宏平均,那么检查样本量多的类来确定指标表现差的原因
如果宏平均大大低于微平均,那么检查样本量少的类来确定指标表现差的原因
————————————————
版权声明:本文为CSDN博主「hfutdog」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hfutdog/article/details/88085878
由于命名实体识别中大部分的标签都是 O,故根据上面的话,应该选择宏平均
4、目前训练到第 40 轮,总第 16591 步,但是模型基本上只能预测对前 7个序列的标签,但是对于 7个序列后面的序列的标签却根本学习不了, 预测输出都是 0
答:原因是 crf_decode 函数的一个参数写错了,应该要使用 max_length_size 而不是 label_size。
如图:

5、往样本的首尾分别加入 <START>、<END> 标记符号是必需的吗?假如不是必需的,那么加入和不加入有什么区别?
6、不同的 batch_size 对训练结果影响是怎么样的呢?