机器学习与深度学习

BiLSTM CRF 模型代码实践过程中的记录

2020-01-15  本文已影响0人  LCG22

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),也可扩展到多分类

,公式:Micro_P = \frac{\sum_{i=1}^nTP_i}{\sum_{i=1}^n(TP_i + FP_i)}

④macro,宏平均,分类别计算各自的精准率,再求算术平均。对于二分类,公式:(TP / (TP + FP) + TN / (TN + FN) ) / 2,

扩展到多分类,公式:Macro_P = \frac{1}{n}\sum_{i=1}^n \frac{TP_i}{TP_i + FP_i}

关于样本平衡问题和微平均和宏平均的关系,如下:

参考自: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。

如图:

图 4.1

5、往样本的首尾分别加入 <START>、<END> 标记符号是必需的吗?假如不是必需的,那么加入和不加入有什么区别?

6、不同的 batch_size 对训练结果影响是怎么样的呢?

上一篇 下一篇

猜你喜欢

热点阅读