TrustAI是集可信分析和增强于一体的可信AI工具集,助力NLP开发者提升深度学习模型效果和可信度。在后续应用中,希望将TrustAI和智能标注以及模型构螺迭代打造持续学习链路。
- 解决训练数据存在脏数据的问题
- 解决训练数据覆盖不足的问题(稀疏数据)
- 解决训练数据分布偏置的问题
- 解决文本冗余导致精度下降的问题
相关文章参考:
AiTrust下预训练和小样本学习在中文医疗信息处理挑战榜CBLUE表现
注意上述项目中对训练过程一些参数做了简单调整如500steps保存一次模型等,而本项目为了快速实现效果展示就以epoch为保存最优模型单位,如果为追求更好性能请参考上述项目或者自己修正。
项目参考:(更细算法原理请参考相关论文) https://github.com/PaddlePaddle/TrustAI
https://github.com/PaddlePaddle/TrustAI/blob/main/trustai/interpretation/token_level/README.md
https://github.com/PaddlePaddle/TrustAI/blob/main/trustai/interpretation/example_level/README.md
结果部分展示:
随着深度学习模型的越发复杂,人们很难去理解其内部的工作原理。“黑盒”的可解释性正成为许多优秀研究者的焦点。
通过这些非常有效的可解释性方法,人们可以更好知道模型为什么好,为什么不好,进而可以针对性提高模型性能。
目前,可解释性研究领域缺乏一个用于评估解释方法的科学评估体系。
对于ante-hoc可解释性而言,其评估挑战在于如何量化模型的内在解释能力。
对于post-hoc可解释性而言,其评估挑战在于如何量化解释结果的保真度和一致性。
0.1.1 表示点方法(Representer Point)
论文:NeurIPS 2018 Representer Point Selection:https://proceedings.neurips.cc/paper/2018/file/8a7129b8f3edd95b7d969dfc2c8e9d9d-Paper.pdf
这篇论文做的跟ICML 2017 best paper influence function那篇论文一样,想分析对于一个测试点来说,哪些训练样本对这个决策影响最大,包括positive(这里叫excitatory)和negative(这里叫inhibitory)的训练样本点。方法上,这篇论文将输出层的margin(pre-activation prediction)分解成训练样本点的激活值的加权线性组合,这个权重叫做representer value,表达训练样本点对网络参数的影响。文中主要claim的比influence function有优势的是计算效率。
开源的代码里sklearn,tensorflow,pytorch都有用到,比较混乱,应用可能需要梳理这部分代码,从双方开源的代码看,该论文也借鉴了一部分influence function的代码,比如genericNeuralNet.py和genericNeuralNet.py。论文中提出的方法需要一些fine-tune,预估到最后一层的输入值等额外的步骤,也给工程框架上带来一定的困难。 相比于文中3.2估计预估误差是对比预估输出和真实输出的差异,influence function是对比去掉该训练样本前后训练得到模型的loss。输出对不同的训练样本的依赖可能有相关性,有可能当前模型比较依赖该训练样本,但不见得去掉该训练样本后,预测值有大的变化。相比之下,去掉该样本重新训练模型得到的结论会更鲁棒一些。 这篇论文提出的方法相比influence function的主要优势是计算量小,但也有一些限制(L2或者fine-tune),可以用在对计算效率要求比较高的场景。
开源代码:https://github.com/chihkuanyeh/Representer_Point_Selection
参考链接:https://zhuanlan.zhihu.com/p/114461143
0.1.2 基于梯度的相似度方法(Grad-Cosin, Grad-Dot)
论文:Input Similarity from the Neural Network Perspective https://proceedings.neurips.cc/paper/2019/hash/c61f571dbd2fb949d3fe5ae1608dd48b-Abstract.html
https://proceedings.neurips.cc/paper/2019/file/c61f571dbd2fb949d3fe5ae1608dd48b-Paper.pdf
在许多应用中,了解模型做出特定预测的原因可能与预测的准确性一样重要。然而,大型现代数据集的最高精度通常是通过甚至专家都难以解释的复杂模型来实现的,例如集成或深度学习模型,这在准确性和可解释性之间造成了矛盾。作为回应,最近提出了各种方法来帮助用户解释复杂模型的预测,但通常不清楚这些方法是如何相关的,以及何时一种方法优于另一种方法。为了解决这个问题,我们提出了一个解释预测的统一框架,SHAP(SHapley Additive exPlanations)。SHAP 为每个特征分配一个特定预测的重要性值。其新颖的组件包括:(1) 识别一类新的加性特征重要性度量,以及 (2) 理论结果表明该类中存在一个具有一组理想属性的唯一解。新类统一了六种现有方法,值得注意的是,该类中最近的几种方法缺乏建议的理想属性。基于这种统一的见解,我们提出了新的方法,这些方法显示出比以前的方法更好的计算性能和/或与人类直觉更好的一致性。
0.1.3 基于特征的相似度方法(Feature-Cosin, Feature-Dot, Feature-Euc)
论文:An Empirical Comparison of Instance Attribution Methods for NLP https://arxiv.org/abs/2104.04128
https://github.com/successar/instance_attributions_NLP
深度模型的广泛采用激发了对解释网络输出和促进模型调试的方法的迫切需求。实例归因方法构成了通过检索(可能)导致特定预测的训练实例来实现这些目标的一种方法。影响函数(IF;Koh 和 Liang 2017)通过量化扰动单个列车实例对特定测试预测的影响,提供了实现这一目标的机制。然而,即使逼近 IF 在计算上也是昂贵的,在许多情况下可能会令人望而却步。更简单的方法(例如,检索与给定测试点最相似的训练示例)可能具有可比性吗?在这项工作中,我们评估不同潜在实例归因在训练样本重要性方面的一致性程度。我们发现,简单的检索方法产生的训练实例与通过基于梯度的方法(例如 IF)识别的训练实例不同,但仍然表现出与更复杂的归因方法相似的理想特征
参考链接 https://blog.csdn.net/wxc971231/article/details/121184091
0.2.1 可解释性之积分梯度算法(Integrated Gradients)
论文:IntegratedGraients: Axiomatic Attribution for Deep Networks, Mukund Sundararajan et al. 2017 https://arxiv.org/abs/1703.01365
我们研究将深度网络的预测归因于其输入特征的问题,这是之前由其他几项工作研究过的问题。我们确定了归因方法应该满足的两个基本公理——敏感性和实现不变性。我们表明,大多数已知的归因方法都不满足它们,我们认为这是这些方法的根本弱点。我们使用这些公理来指导一种称为集成梯度的新归因方法的设计。我们的方法不需要对原始网络进行修改,实现起来非常简单;它只需要对标准梯度运算符进行几次调用。我们将这种方法应用于几个图像模型、几个文本模型和一个化学模型,展示了它调试网络、从网络中提取规则的能力
一种神经网络的可视化方法:积分梯度(Integrated Gradients),它首先在论文《Gradients of Counterfactuals》中提出,后来《Axiomatic Attribution for Deep Networks》再次介绍了它,两篇论文作者都是一样的,内容也大体上相同,后一篇相对来说更易懂一些,如果要读原论文的话,建议大家优先读后一篇。当然,它已经是2016~2017年间的工作了,“新颖”说的是它思路上的创新有趣,而不是指最近发表。所谓可视化,简单来说就是对于给定的输入x以及模型F(x),我们想办法指出x的哪些分量对模型的决策有重要影响,或者说对x各个分量的重要性做个排序,用专业的话术来说那就是“归因”。一个朴素的思路是直接使用梯度∇xF(x)来作为x各个分量的重要性指标,而积分梯度是对它的改进
参考链接:https://www.spaces.ac.cn/archives/7533
https://zhuanlan.zhihu.com/p/428131762
https://zhuanlan.zhihu.com/p/365815861
https://blog.csdn.net/wxc971231/article/details/121184091
0.2.2 LIME算法
论文: Lime: “Why Should I Trust You?”: Explaining the Predictions of Any Classifier, Marco Tulio Ribeiro et al. 2016 https://arxiv.org/abs/1602.04938
尽管被广泛采用,机器学习模型仍然主要是黑匣子。然而,了解预测背后的原因对于评估信任非常重要,如果一个人计划根据预测采取行动,或者在选择是否部署新模型时,这是至关重要的。这种理解还提供了对模型的洞察力,可用于将不可信的模型或预测转换为可信的模型。在这项工作中,我们提出了 LIME,这是一种新颖的解释技术,通过在预测周围学习可解释的模型,以可解释和忠实的方式解释任何分类器的预测。我们还提出了一种通过以非冗余方式呈现具有代表性的个体预测及其解释来解释模型的方法,将任务定义为子模块优化问题。我们通过解释文本(例如随机森林)和图像分类(例如神经网络)的不同模型来展示这些方法的灵活性。我们通过模拟和人类受试者的新实验展示了解释的效用,在各种需要信任的场景中:决定是否应该信任预测、在模型之间进行选择、改进不可信的分类器以及确定为什么不应该信任分类器.
Local: 基于想要解释的预测值及其附近的样本,构建局部的线性模型或其他代理模型;
Interpretable: LIME做出的解释易被人类理解。利用局部可解释的模型对黑盒模型的预测结果进行解释,构造局部样本特征和预测结果之间的关系;
Model-Agnostic: LIME解释的算法与模型无关,无论是用Random Forest、SVM还是XGBoost等各种复杂的模型,得到的预测结果都能使用LIME方法来解释;
Explanations: LIME是一种事后解释方法。
参考链接:https://cloud.tencent.com/developer/news/617057
https://blog.csdn.net/weixin_42347070/article/details/106455763
https://blog.csdn.net/weixin_42347070/article/details/106076360
0.2.3 Quantifying Attention Flow in Transformers
Rollout: Quantifying Attention Flow in Transformers, Abnar et al. 2020 https://arxiv.org/abs/2005.00928
在 Transformer 模型中,“self-attention”将来自参与嵌入的信息组合到下一层焦点嵌入的表示中。因此,在 Transformer 的各个层中,来自不同令牌的信息变得越来越混合。这使得注意力权重在解释探测时变得不可靠。在本文中,我们考虑通过自我注意来量化这种信息流的问题。我们提出了两种在给定注意力权重、注意力推出和注意力流的情况下将注意力近似于输入令牌的方法,作为使用注意力权重作为输入令牌的相对相关性时的事后方法。我们表明,这些方法对信息流给出了互补的观点,并且与原始注意力相比,
参考链接 https://blog.csdn.net/Western_europe/article/details/109611695
- paddlenlp(https://github.com/PaddlePaddle/PaddleNLP)
- trustai(https://github.com/PaddlePaddle/TrustAI)
背景:训练数据标注质量对模型效果有较大影响,但受限于标注人员水平、标注任务难易程度等影响,训练数据中都存在一定比例的脏数据,即标注质量差的数据。这些数据往往会阻碍模型效果提升。但当标注数据规模较大时,数据检查就成为一个难题。
TrustAI提供了脏数据识别能力,从训练数据中识别候选脏数据。当选择占比约为全部数据的10%的数据作为脏数据时,可召回超40%的脏数据。开发者对候选脏数据进行人工修正,可显著提升模型效果。
脏数据识别包含三个步骤:依赖安装、脏数据识别模型训练和候选脏数据选择。
基于全部训练数据,训练一个脏数据识别模型。
注意:当前的脏数据识别能力主要适用于分类任务。这里的脏数据识别模型就是一个普通的分类模型
训练结果:
表示点方法(Representer Point)将训练数据对当前预测数据的重要度影响(即表征值),分解为训练数据对模型的影响和训练数据与预测数据的语义相关度。对于一条给定的测试数据和测试结果,表征值为正的训练数据表示支持该预测结果,相反,表征值为负的训练数据表示不支持该预测结果。同时,表征值的大小表示了训练数据对测试数据的影响程度。
- 使用脏数据识别模型,对所有的训练数据计算它们作为脏数据的分数。分数越大,表明越可能是脏数据。
脏数据选择方法:使用TrustAI提供的实例级证据分析方法,计算每一条训练样本对模型loss的影响度。经分析,发现影响度较大的数据,有较大比例都是标注质量差的数据。所以,我们使用这个影响分数来识别脏数据。
实例级证据分析方法具体见:https://github.com/PaddlePaddle/TrustAI/tree/main/trustai/interpretation/example_level
基于相似度计算任务开源数据集LCQMC的部分数据上进行模拟实验,在LCQMC的测试集和DuQM鲁棒性数据集上评估效果。评估指标为准确率。
首先,从LCQMC的训练数据中随机抽取5000条作为训练集。基于抽取的训练集train_5000.tsv训练一个基线模型,。运行命令如下所示:
对候选脏数据进行人工检查和修正(占全部训练集10%),修正后的数据为。数据修正的比例为38.4%,而在随机选取的数据集中需要修正的数据比例仅为5%。
基于修正后的新训练集训练模型,即可提升模型效果。
开发者可基于修正后的训练集和修正前的训练集进行对比实验,由下表可知,对候选脏数据进行人工检查及修正(规模为原始训练集的10%),模型在LCQMC测试集上提升2.13%,在相似度匹配鲁棒性数据集(DuQM)上提升4.01。
注:epoch为10情况下测试。
标注尽量少的数据,提升模型效果
方法介绍 训练数据覆盖不足会导致模型在对应的测试数据上表现不好。数据扩充是提升模型效果直接的方法,然而数据标注是一个费时费力的工作,如何标注更少的数据带来更大的效果提升是大多数NLP开发者面临的难题。
TrustAI提供了“目标数据识别->有效数据选择->训练数据丰富”流程,用尽量少的标注数据有效提升模型效果。首先,基于可信分析中的实例级证据分析方法,从测试数据中识别因训练数据覆盖不足而导致的预测效果差的测试样本,称作目标集。然后,在大量的未标注数据中,选择可以支持目标集中数据预测的证据进行标注。最后,将新标注的数据加入到训练数据中重训模型。
基于特征的相似度方法(Feature-Cosin, Feature-Dot, Feature-Euc)通过模型的特征挑选对当前测试数据有正影响和负影响的数据。
同样的:从LCQMC的训练数据中随机抽取5000条作为训练集,剩余数据作为未标注数据集。基于抽取的训练集训练一个基线模型,用于在后续步骤中做可信分析
基于训练的基线模型从验证集中选择目标数据,即为目标集。
目标集选择方法为:使用TrustAI提供的实例级可信分析方法,计算验证集中样本的正影响证据的平均分数。分数较低的样本表明其训练证据不足,训练数据对此类数据覆盖度较低,模型在这些样本上表现也相对较差。
输出结果:
在目标数据选择好后,只需要再次利用方法从未标注的数据集中选择支持目标集的有效数据进行人工标注即可。
注:此处为模拟实验,的数据已被标注
在完成有效数据的标注后,将其与原始数据拼接后训练模型,即可提升模型效果。
部分结果展示:
同时,可以随机选择相同数量的随机数据以及和全量样本进行训练进行对比实验。实验结果如下表所示:
注:10epoch结果
缓解数据偏置对模型训练的影响,提升模型鲁棒性!
- 方法介绍
受限于数据集收集方法、标注人员经验等影响,构建的训练数据集存在分布偏置问题。模型会利用数据集中的偏置作为预测的捷径,如在情感分析任务中,遇到否定词或描述直接给出“负向”情感预测。这种偏置会导致模型没有学会真正的理解和推理能力,在与训练数据分布一致的测试数据上表现非常好,但在与训练数据分布不一致的测试数据上表现很差,也就是说模型的泛化性和鲁棒性很差。
TrustAI提供了基于数据集统计方法偏置识别方法,并提供了数据分布修正和权重修正两种优化策略。
基于数据集统计方法偏置识别方法:即统计训练数据中词与标注标签的分布,基于此进行偏置词和数据的识别。
数据权重修正通过降低偏置样本对训练loss的影响来减少模型从偏置样本中学习,即在训练loss计算时引入样本的偏置度(详见Du, Yanrui, et al. 2022)。
- 实验步骤
首先,统计训练数据中偏置词。
偏置词的统计方法为:统计词在不同类别上的分布,若词出现的频次大于,且最少在一个类别上出现的比例大于,则将该词视为偏置词。
基于偏置词的统计结果,计算训练集中样本偏置度的大小,生成包含样本权重的训练数据。
当前方案提供了和两种计算样本偏置度的策略,前者考虑了词的有偏性,而后者同时考虑词的有偏性和频次。
缓解数据偏置对模型训练的影响,提升模型鲁棒性
数据分布修正通过对非偏置数据多次重复采样,使训练数据分布尽量均衡。该方案通过可信分析方法识别训练数据中对模型预测其重要贡献的证据,然后通过分析训练中标签和证据的分布识别偏置样本,对偏置样本重复采样来达到数据均衡的目的。
- 实验步骤
本方案在情感分析数据集ChnsentiCorp上进行实验,在情感分析鲁棒性数据集上评估效果。
首先,通过可信分析识别训练数据中对模型预测其重要贡献的证据。 重要证据统计方法为:基于特征级可信分析方法识别训练数据中起重要贡献的证据和频次。
基于梯度的相似度方法(Grad-Cosin, Grad-Dot)通过模型的梯度挑选对当前测试数据产生正影响和负影响的数据。
基于统计的证据及其频次分析偏置样本,在偏置样本的不均衡类别上重复采样,达到数据均衡的目的。
部分输出结果:
基于生成的均衡数据训练模型,即可提升模型效果。
实验结果如下表所示:
参考链接:
https://github.com/PaddlePaddle/TrustAI/tree/main/tutorials/redundancy_removal
- 背景
机器阅读理解(MRC)是一项通过让机器回答基于给定上下文的问题来测试机器理解自然语言的程度的任务,它有可能彻底改变人类和机器之间的互动方式。具有MRC技术的搜索引擎可以直接以自然语言返回用户提出的问题的正确答案,而不是返回一系列相关的web页面。
而答案抽取式MRC任务是一个典型的MRC任务。首先给定一个文章,一个问题,要求机器根据问题从文章中找出一个连续的片段作为答案。示例如下
在长文本的理解问题上,机器阅读理解(MRC)模型往往存在着严重的理解困难问题,同时也存在严重的虚假相关性,即会根据与答案无关的文本信息以抽取答案。具体来说,模型可能会出现下述2种情况:
- 方法 TrustAI提供了“长文本MRC数据证据抽取->抽取式阅读理解预测”流程。在长文本阅读任务中,即,我们先通过Selector抽取一个与问题相关的关键句子,然后再在关键句子上通过Predictor进行预测。
比如说,我们给定一个样本:
Selector会抽取与问题相关的句子,抽取后的文章部分如下所示:
Predictor会根据Selector抽取后的文章部分,进行预测:
该方案实现了端到端的可解释和预测,即主动学习证据,基于证据做预测,避免后验分析的弊端。通过在长文本任务上的效果验证,方案在体改性能的同时也有效地提升了模型鲁棒性。
初始文件结构介绍
数据集准备
实验基于微调,评估指标为EM 和 F1 分数,数据集为Dureaderrobust 和 Dureaderchecklist。
在运行基线系统之前,请下载Dureaderrobust 数据集和Dureaderchecklist 数据集。 你可以前往千言 进行数据集的手动下载。
可以运行如下命令以快速获得这两个数据集(数据集将保存到中):
最终,在项目根目录下会出现一个文件夹,内部结构如下:
5.2.1 训练基线模型
我们运行如下命令以启动数据集的训练过程。在训练结束时,模型参数、中间筛选证据和最终dev集预测结果将被保存到。
其次,在训练完基线模型后,我们会在文件夹下获得类似下面的目录:
接着,我们可以测试基线模型在Checklist上的效果:
5.2.2训练Selector模型
首先我们运行如下指令训练Selector模型:
其次,在训练完selector模型后,我们会在文件夹下获得类似下面的目录:
下一步地,我们需要根据训练好的selector筛选相应dev集数据:
在select完dev集合数据后,我们会在文件夹下获得类似下面的目录:
然后,基于此,我们训练模型的Predictor:
由于我们的模型训练过程仅预测dev集结果,我们需要运行以下命令以预测其他数据集:
首先我们测试数据集:
其次,我们测试数据集:
由下表可知,通过冗余处理方案,在EM指标上在Dev集上效果提升2.84%,在Challenge Test集上提升了4.96%,说明方案在提升模型性能的同时较好地提高了模型的鲁棒性。
同时方案在Zero Shot设置上也取得了较高的收益。在Robust上训练的该方案在Checklist数据集(移除no answer设置)上将效果提升2.33%。 实验结果(V100上结果)如下表所示:
参考见:项目开始
TrustAI的实例级分析接口需要用户提供一个在相关任务上训练好的模型和全部的训练数据,用于分析测试样本。
相关文章参考:
AiTrust下预训练和小样本学习在中文医疗信息处理挑战榜CBLUE表现
下面以中文情感分析任务为例,向大家展示TrustAI实例级证据分析接口的使用步骤,以及代码详细讲解
将待分析的测试数据转化为模型的输入格式。
提供IG,LIME,attention等多种分析方法,可根据实际实验结果选取最有效的一种方法。
a)IntGradInterpreter
b) AttentionInterpreter
c)LIMEInterpreter
d)GradShapInterpreter
6.2.1特征级证据分析结果可视化(细颗粒度)
a.获取测试样本的切词
b.调用可视化接口,传入切词与特征重要度分数
下面以LIME的分析结果为例,进行可视化展示。
6.2.2特征级证据分析结果可视化(粗颗粒度)
开发者还可以将分析结果对齐到更大粒度的切词上去,但是这需要开发者提供模型的原始切词和更大粒度切词的(即切词后位置与原始文本位置的映射词典).
下面的代码将LIME方法的可信分析结果映射到jieba的切词粒度上。
将LIME方法的分析结果与jieba分词对齐,并进行可视化展示。
各个方法对比可以看每个章节的小结
总结下来:实例级证据分析方法RepresenterPointModel和FeatureSimilarityModel整体取得效果更佳,主要原因在于可以判别出需要标注的数据,这样在部分样本下就能取得更好的效果。
github提了一个issue关于PaddleNLP在持续学习这块的迭代期待: https://github.com/PaddlePaddle/PaddleNLP/issues/3395
问题背景: 2021-11-29 :百度ERNIE-Health登顶中文医疗信息处理CBLUE榜单冠军:https://baijiahao.baidu.com/s?id=1717731573139745403&wfr=spider&for=pc
2022-04-13 :云知声登顶中文医疗信息处理挑战榜CBLUE 2.0:https://baijiahao.baidu.com/s?id=1729960390071520105&wfr=spider&for=pc
2022-05月份: 艾登&清华团队在中文医疗信息处理挑战榜喜创佳绩:https://www.cn-healthcare.com/articlewm/20220606/content-1372998.html
1.可以看到在CBLUE榜单上,ERNIE最先刷榜登顶,后续有一些别的团队再更新刷榜。通过模型对比,我相信ERNIE一定是NLP领域前沿模型,效果性能都很优越。而后续新榜单模型,在算法模型的优化侧重点可能没那么大,感觉更多的会对数据集的处理上下了很大功夫。模型差不多情况下,不同数据增强等技术影响还是比较大的,然后不断迭代。
2.看到paddlenlp已经推出了:pipelines面向 NLP 全场景为用户提供低门槛构建强大产品级系统的能力,通过一种简单高效的方式搭建一套语义检索系统,使用自然语言文本通过语义进行智能文档查询。
因此引出了一个问题:关于持续学习
目前看到在paddlenlp 提供了一些数据优化的方法:如:AITrust等可信分析,以及BML平台上看到的智能标注(或者个人依赖ERNIE生成的教师模型),来提供相对较高质量的标注数据。
但感觉在模型迭代过程中更多的是点状,是靠人工进行一个个串行起来。 希望可以出现一个持续学习模型的流程(自动化)和这些技术结合起来,还是有很大意义的。
参考论文: