Bert-Chinese-Text-Classification-Pytorch-master指标学习(自用待补充)

Bert-Chinese-Text-Classification-Pytorch-master指标学习

指标学习

混淆矩阵(Confusion Matrix)

  • 在n分类模型中,使用n行n列的矩阵形式来表示精度,纵列代表n个分类,在每行中的n个数据代表分别预测在每个类别的个数,完美的预测应该是一个列序数=行中有数据的索引数的一条斜线。
预测成正例 预测成反例 加和含义 统计量
正例 TP FN TP+FN表示实际数据集中正样本的数量 召回率TPR=TP/(TP+FN)
反例 FP TN FP+TN表示实际数据集中负样本的数量 召回率FPR =FP/(FP+TN)
加和含义 TP+FP表示预测为正类样本数 FN+TN表示预测的负类样本数
统计量 精确率=TP/(TP+FP) 正确率=(TP+TN)/(TP+TN+FP+FN)

TP:True Positive :做出Positive的判定,而且判定是正确的
FP:False Positive :做出Positive的判定,而且判定是错误的
TN:True Negative :正确的Negative判定
FN:False Negative:错误的Negative判定

准确率

  • 表的斜对角线,就是正例被预测为正例,反例被预测为反例。

accuracy=(TP+TN)/(TP+TN+FP+FN)

召回率(所有正确的条目有多少被检索出来。)

  • 在是正例中被预测为正例的数值。

  • recall = TPR 是召回率=TP / (TP + FN) ,TPR 是召回率

  • FPR 是反例被报告为正例的概率

  • FPR = FP/(FP+TN)

精确率

  • 精确率可以被理解为模型找到的所以正例的准确性。

  • precision= TP / (TP + FP)

  • 所有预测为正确的条目中有多少真正正确的

    随着精度的增加,召回率会降低,反之亦然。

F1score

F1 score 是对精度和召回率的调和平均
F1 Score = 2*P*R/(P+R),其中P和R分别为 precision 和 recall

micro avg(微平均)

  • 不区分样本类别,计算整体的 精准、召回和F1

macro avg(宏平均)

  • 对每个类别的 精准、召回和F1 加和求平均。

weighted avg(加权平均)

  • 是对宏平均的一种改进,考虑了每个类别样本数量在总样本中占比

原文链接:https://blog.csdn.net/TFATS/article/details/118334138

调参学习

分词器

“先进”的算法分词器能给下游带来优秀的性能吗?

  • 在神经网络使用预训练词向量的背景下**,确保分词器与词向量表中的token粒度match是更重要的事。**词分的再好,可是词向量表里没有,那么就变成OOV,没有用!!
    • 已知预训练词向量的分词器:wprd2vec,glove,fasttext
    • 不知道预训练词向量的分词器:
  • 另外还要保证大小写、OOV的定义跟词向量表match上。如果使用一个区分大小写的词向量表,但是你还将下游任务的单词全部小写,那么会增加啊损失。

中文字向量

  • 中文的字向量也需要预训练!并且预训练的时候记得把窗口开大一些,不要使用word—level的窗口大小,其他预训练超参数随手调一下也绝对比初始化的子向量更好。

数据集噪声很严重

  • 举例数据集D(X,Y)噪声严重的两种情况:
    • 文本为口语化表示或者由互联网用户生成。
    • 样本被明显的错误标注,一些样本难以定义属于哪一类,文本具有类别二义性。
  • 解决办法:
  • 第一种情况:
    • 直接将模型的输入变成char-level,然后train from scratch去和word—level对比。如果char-leve好,那短时间就基于char-level做模型吧
    • 性能差不多或者char已经做到头了,想做一下word—level
    • 有人使用fasttext去训练一份词向量。fasttext在中文时窗口大小一般是3-6,处理中文时,如果我们的目的是为了去除输入中的噪声,可以把窗口限制为1-2
  • 第二种情况:
    • 标签平滑
    • 忽略这个噪声,强行把模型尽可能好的训练出来,让训练好的模型去跑训练集和开发集,取出训练集中错误样本和开发集以很高的置信度做出错误决策的样本,然后去做这些bad cases的分析,如果发现错误标注有很强的规律星,则直接写一个批量脚本纠正一下(确保纠正后的标注正确率比之前的搞。
    • 如果没什么规律,但是发现模型高置信度做错的这些样本大部分都是标准错误的化,就直接把这些样本都删掉把,常常可以换来性能的小幅度提升,毕竟测试集都是人工标注

baseline选用CNN还是RNN?路线沿着CNN还是RNN

dropout加载哪里?

关于二分类

  • 一定使用sigmoid作为输出层的激活函数?

类别不均衡

  • 上采样下采样boosting?
  • 深度模型调参,调参好了发现不平衡不值得一提。决策阈值
  • 如果batch中完全是同一个类别的样本,均衡就有必要。

别太纠结系列

  • 文本截断长度
  • 对性能不敏感的超参数带来的开发集性能的微小的提升。
  • 未登录词的embedding是初始化成全0还是随机初始化,别跟pad共享embedding
  • 优化器使用Adam还是MomentumSGD

你可能感兴趣的:(毕设,bert,pytorch,学习)