每次看badcase时,都会怀疑自己的能力,是我哪里做的不对吗?这都学不会?

幸运的话,会找到一批有共性的问题,再有针对性地加入训练数据或者改动模型解决。而不幸的话,就是这儿错一个那儿错一个,想改动都无从下手。

今天,就推荐一篇香侬科技出品的「NLP模型可解释性综述」,帮大家寻找模型预测结果的根据所在,从而更有针对性地进行优化。

论文:Interpreting Deep Learning Models in Natural Language Processing: A Review

这篇文章描述的「可解释性」,旨在理解模型为什么给出当前的预测结果。从预测结果根据的出处来看,作者把可解释性方法分为三类:

  1. Training-based:从训练数据找根据,比如某条训练样本使得模型将当前测试样本预测为A类

  2. Test-based:从测试数据本身找根据,比如某个词、某个片段

  3. Hybrid-based:同时从训练数据和测试数据找根据

从可解释性方法的使用来看,又可以分为两种:

  1. Joint methods:把负责可解释性的模块加入到模型中一起训练

  2. Pos-hoc methods:在训练后加入可解释性模块

接下来的梳理主要以第一种分类体系为主线,不过作者也同时给出了每个方法的使用方式:

Training-based

Influence Functions

这类方法主要通过一个函数,来衡量训练样本z对于测试样本x的影响。最naive的方法就是去掉z再训练一个模型,但这样测完的时候就可以领盒饭走人了。不过我们有数学呀!于是在计算训练loss的时候,我们可以给样本z的loss加一个扰动,然后就能计算出z对于模型权重的影响,再把x输入进去,就能计算出每个z对每个x的影响情况。

由于公式太复杂,我就不列出来杀大家的脑细胞了。其中有个问题是Hessian矩阵比较难算,对于深度模型简直是灾难。于是又有学者提出了更简单的方法:Turn over dropout

该方法的核心思想是,在训练完模型后,得到每个样本的一个mask矩阵m(z),应用mask之后可以分离出那些不受样本z影响的神经元。于是我们可以应用矩阵得到两个子网络,再输入x后预测,就能计算出预测的diff。

KNNs Based Interpretation

基于KNN的方法旨在通过测试样本的隐层表示找到相近的训练样本

这个方法理解起来就容易多了,而且很实用。比如我们在做分类任务时,有的测试样本置信度没那么高,这时就可以通过KNN的方法去找相近的TopK个训练样本,根据它们的label分布来帮助预测:

Kernel based Interpretation

这类方法比较老了,参考文献都是18、19年的。具体做法是,先用核函数对预测样本x和多个训练样本l计算相似度K(x,l),之后把相似度矩阵投影成更高维的表示,再输入神经网络进行预测。之后再利用LRP(Layerwise Relevance Propagation)反向计算每层、每个神经元的相关性分数,传导回训练样本那一层就能知道每个样本对测试数据的影响了。

在训练时,Kernel和投影层都是一起训练的,所以这种方法既需要在训练时加入,又需要训练后的计算。

Test-based

Saliency-based Interpretation

这种方法的核心思想是利用一些metric计算测试样本中token、spen的重要程度。作者列出了很多种可以用的metirc:

Attention-based Interpretation

这个相信大家都熟悉了,就是通过观察attention矩阵来分析token的重要程度

但有意思的事,作者也在参考文献中发现了一些质疑的声音:Attention确实能给可解释性提供帮助吗?

在一篇19年的工作《Attention is not explanation》中,该作者提到,如果注意力权重真的能提供可解释性,那它应该具备两个性质

  1. 注意力权重应该和基于特征的Saliency-based方法有很高的相关性

  2. 改变注意力权重会影响预测结果

但是之后,该作者通过一系列的实验,证实attention不具备上述两个性质。所以直到现在(2021年11月),注意力机制是否能提供可解释性这个问题还处于争论之中。

不过该工作的实验是基于BiLSTM+Attention的,仍然有很多基于BERT的实验表明,注意力机制确实学到了不少的语言知识。

Explanation Generation

这个方法就有意思了,上述我们介绍的可解释性方法,对于人类来说可读性都比较弱。而这类方法就要求输出对人类更友好的「解释」。比如:

  1. Extractive/Abstractive Rationale:通过抽取或者生成的方式,把样本中对结果影响大的部分输出出来

  2. Concept-based:将预测样本联系到一些抽象概念上,比如在对餐厅的评价中,哪些词语是形容口味的、环境的等等,相当于给出了推理过程

  3. Hierarchical:自底向上分别给句子的每个token、span打分,哪个片段是正向、哪个是负向,也相当于给出了推理过程

总结

可解释性算是一个没那么热的方向,首先是深度模型确实太复杂了、太随机了,有时候自己想的一堆idea都没用,一个bug反而有提升。到了解释的时候全靠猜,可能是哪里分布不一致?或者是模型已经足够强了,我加的输入知识它不需要?其次是大部分人都是结果导向,有时间研究不确定的可解释性,不如花心思在指标提升上。

要说可解释性重不重要,那肯定是重要的。如果对模型的了解更深入,就可以避免一些高风险的badcase。比如风控领域,一个反动内容可能会灭了一家公司,再比如医疗领域,一个错误的预测可能影响患者的生命

论文的结尾,作者列出了很多的开放问题等待大家探索:

  1. 到底怎样才算可解释?

  2. 如何评估这些探究可解释性的方法?

  3. 是为算法工程师提供解释,还是为看到结果的用户提供解释?

  4. 目前的可解释性方法大多研究分类任务,而其他任务呢?

  5. 很多可解释性方法提供的结果不一致

  6. 是否要牺牲性能获取更高的可解释性?

  7. 可解释性方法如何应用?它的价值有多少?

那么最后,深度模型是否真的可解释?这个问题我也没有想清楚,世上无法解释的东西太多了


往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件

本站qq群554839127,加入微信群请扫码:

【NLP】探索NLP模型可解释性的7种姿势相关推荐

  1. Green Deep Learning:NLP在大模型之外的另一种思路!

    作者 | 许晶晶 前字节跳动 研究员 整理 | DataFunTalk 在过去的一两年内,关于预训练模型的信息会频繁的出现在各种各样的公共论坛及公众号上,从最开始的谷歌推出来的各种非常大的模型到现在每 ...

  2. 机器学习模型可解释性的6种Python工具包,总有一款适合你!

    开发一个机器学习模型是任何数据科学家都期待的事情.我遇到过许多数据科学研究,只关注建模方面和评估,而没有解释. 然而,许多人还没有意识到机器学习可解释性在业务过程中的重要性.以我的经验,商业人士希望知 ...

  3. 新手探索NLP(三)

    目录 NLP语言模型 词的表示方法类型 1.词的独热表示one-hot representation 简介 不足 2. 词的分布式表示distributed representation 简介 建模类 ...

  4. NLP诗词生成模型数据准备及实战

    NLP诗词生成模型数据准备及实战 目录 NLP诗词生成模型数据准备及实战 方案流程 示例代码 自然语言处理+数据准备 Machine readable vector format 自然语言处理NLP的 ...

  5. NLP文本生成模型数据准备及实战

    NLP文本生成模型数据准备及实战 自然语言处理+数据准备 Machine readable vector format 自然语言处理NLP的数据预处理有哪些共性,可以参考? 什么样的数据格式是深度学习 ...

  6. NLP语义标注模型数据准备及实战

    NLP语义标注模型数据准备及实战 目录 NLP语义标注模型数据准备及实战 流程示例 代码示例

  7. 新手探索NLP(六)——全文检索

    全文检索技术--Lucene的介绍 转载自https://blog.csdn.net/yerenyuan_pku/article/details/72582979 查看全文 http://www.ta ...

  8. 新手探索NLP(四)

    学习NLP需要一个比较系统的概要.所以理论上这个应该写在第一篇. [NLP的技术概貌] NLP里细分领域和技术实在太多,根据NLP的终极目标,大致可以分为自然语言理解(NLU)和自然语言生成(NLG) ...

  9. NLP:NLP领域没有最强,只有更强的模型——GPT-3的简介、安装、使用方法之详细攻略

    NLP:NLP领域没有最强,只有更强的模型--GPT-3的简介.安装.使用方法之详细攻略 导读:NLP领域的模型,没有最大,只有更大.博主这几天也仔仔细细看了这篇长达75页的论文,光署名作者都有二三十 ...

最新文章

  1. 不知道这些AI术语,还敢说你很了解AI吗?
  2. 从内存分配角度分析c和java里的static 关键字.
  3. python subprocess Popen
  4. Python tcp编程,TCP服务端和TCP客户端代码编写
  5. 幅度和幅值有区别吗_克拉克 (Clark) 变换中等幅值 (2/3) 和等功率 (sqrt(2/3)) 变换的公式推导...
  6. css布局:块级元素的居中
  7. C#多线程编程系列(二)- 线程基础
  8. 什么是oracle命名,ORACLE数据库命名规范
  9. 一篇弄懂 HTTP和HTTPS基本关系
  10. Java中Cookie常用操作类(Spring中操作Cookie)
  11. 程序员“小白”打野升级指南,值得收藏
  12. jeesite 去掉 /a
  13. (tensorflow2.1.0安装教程) 对应Anaconda3(对应python3.7)+cuda10.1+cudnn7.6.5+Pycharm 网盘 链接
  14. tomcat内存溢出全记录
  15. 【githubgirl】如何通过实现一个简单的编译器(TinyC),并借助实例来描述基本的编译原理及过程
  16. JavaWeb SSM酒店信息管理系统
  17. python ocr识别身份证_如何使用Tesseract训练基于Python的OCR以使用不同的国家身份证?...
  18. 基于单片机的出租车计价计费系统设计(#0508)
  19. 为什么会有 Ajax?
  20. 真正卓越的领导者,都有这6大共性

热门文章

  1. 树莓派-语音聊天机器人+语音控制引脚电平高低
  2. Gym-101466K Random Numbers(线段树,数学,唯一分解定理)
  3. 兼顾FPGA和单片机
  4. uirecorder 启动webdriver服务报错
  5. 在MyEclipse中添加 XML Catalog (xwork-validator dtd )
  6. Dom4J两种节点添加方法比较
  7. StringBuilder的实现与技巧
  8. mysql 数据库编程_MySQL数据库编程(C++语言)
  9. 毕业论文摘要的书写方法和技巧
  10. html自定义工具条,为Autodesk Viewer添加自定义工具条的更好方法