使用BERT分类的可解释性探索

最近尝试了使用BERT将告警信息当成一个文本去做分类,从分类的准召率上来看,还是取得了不错的效果(非结构化数据+强标签训练,BERT确实是一把大杀器)。但准召率并不是唯一追求的目标,在安全场景下,不仅仅需要模型告诉我们分类结果,还必须把这么分类的原因给输出出来,否则仍然无法给运营工作进行提效。

因此,对BERT分类的可解释性上,进行了一番研究探索。但是结果并不理想。。。

1、BERT是如何完成分类任务的

首先,我们需要对BERT的分类逻辑,做进一步深挖。

 BERT的整体架构如上:底层将文本转化为token并进行编码,中间层通过Attention机制进行信息的提炼,上层做最终输出。(其实和CNN的结构非常类似,不同的是使用Attention替换掉了卷积层,增加了序列信息的处理能力。)

在最终输出环节,首位的[CLS]实际上包含了整段文本的信息编码。因此,当需要用BERT完成一个分类任务时,只需要给予[CLS]的输出,拼接一个全连接层,就可以完成最终的分类。

那么[CLS]是如何获得整段文本的信息编码的呢?这里会涉及到Attention的实现细节,偏复杂,但我们可以仅从信息传递的角度来理解。Attention从设计思路上,是在计算其他token和当前token的相关性,强相关的token会获得更高的Attention权重。但[CLS]更加特殊,它的Attention计算方式通常是将所有token的向量表示进行加权平均,其中权重由Attention决定。这种方式可以看作是对整个输入序列的向量表示进行汇总,得到一个表示整个序列语义信息的向量。

总结来说就是,经过一层BERT网络之后,token携带的是当前位置和其他位置的关联信息,而[CLS]则是将所有token的信息进行汇总。经过多层的迭代,不断加工信息,得到最终的结果。

2、过程中可提取的信息

在了解了BERT分类的原理之后,我们来尝试挖掘一下其中的可解释性。最直观的,可以通过Attention的权重,来大致掌握BERT的信息传递过程。使用bertviz可以实现这个过程:

结合这张图,也可以再理解一下BERT的工作和信息传递机制。

其中每一个单元是一个Attention单元计算过程,称之为head。连线的粗细代表了token之间信息传递权重(也可以理解成相关性)。其中,首个Token即是[CLS]。上面这个图,可以看到几个明显的特征:

  • 0-3层中,有比较多的左侧所有token至首位[CLS]的连线,代表着[CLS]在通过多个维度和层级提取全量信息。
  • 4-7层中,[CLS]的信息提取开始出现针对性,不再是全局等权重提取。
  • 5-6层中,出现了多个token往某一位特定token汇集的现象,而那个token是当前文本分类的关键因素。
  • 0-4层中,有比较多的平行线,代表着在提取序列信息,即token之间的前后相关性。
  • 7-8层往后,连线已经比较均匀,代表前面的层级已经完成了信息处理,后置的部分不再需要额外计算。

通过分析BERT的信息传递过程,虽然能够大致理解分类的逻辑,但因为经过了多层多头的信息加工,实际逻辑很复杂,无法直接提取出了权重较大的因素。

尝试考虑了一下通过最后的分类层(即[CLS]之后的全连接层)来分析权重,但最后一层的[CLS]也是个多轮加工后的信息,并不直接对应某个token的贡献,看起来也不可行。

3、黑盒可解释性工具

通过对BERT工作原理的剖析,可以看到对一个深度非线形模型去做解释,基本上是不可行的。因此,行业内也尝试了用黑盒的办法去探究算法的分类原理。其中,比较知名的就是Lime和SHAP

Lime

Lime的思想是:深度模型在某个局部仍然是线形的。因此,可以通过在目标样本周围生成相似样本,然后用线形模型去拟合深度模型的效果,从而得到近似的分类逻辑。而线形模型就很好得出特征贡献的权重了。

具体细节网上比较多,就不过多赘述了。Github:GitHub - marcotcr/lime: Lime: Explaining the predictions of any machine learning classifier

做了一次简单尝试,结果并不如预期。

Shap

SHAP的思想是:控制变量法,如果某个特征出现或不出现,可以改变分类结果,那么这个特征一定是比较重要的。因此,可以通过尝试该特征出现或不出现的各种情况,来计算对分类结果的贡献。

官方文档:shap.Explainer — SHAP latest documentation

做了一次简单尝试,结果并不如预期。

ChatGPT

不论是Lime和SHAP,都会涉及到一个复杂的遍历运算过程,得到可解释结果需要花费较长的计算时间。不符合当前场景的原始目标,因此,没有做进一步调教工作。(理论上来说,优化内部特征选取的逻辑,应该能够比较好的贴合人类直觉。)

这个时候,想到了使用ChatGPT来进行解释。尝试构造了如下Prompt

角色:你是一个分析安全告警的专家,下面会给你一段告警,请做出精简的解读。
限制:请严格依照以下指令回答问题:
1.如果问题说明了该告警是误报还是非误报,请按照问题说明的研判结果进行分析。
2.问题中会包含多个关键字段,请挑选去其中最异常的部分,不要超过5个。
3.请对关键词进行必要的解读,不要直接复述出来。

已知如下告警是误报,请分析原因,并对其中的关键特征进行解读。

调教一番之后,效果并不理想。思考了一下原因,个人认为是BERT的分类和ChatGPT的分析并不一致。BERT分类依据主要来源于微调的过程,即仍然是基于历史数据进行的分析;而ChatGPT是基于公开样本进行的学习,得不到内部历史信息的支撑。

给到ChatGPT一些内部数据做微调,也许能够获得更好的效果。

结论

总体来说,对深度模型做解释仍然是一个很困难的工作,更别提需要在线上实时得出相应的分析结论了。

传统可解释性方法的场景偏向于零星的分析场景,主要用于帮助算法人员去理解和优化模型,和线上的使用场景存在一定的偏差。

从目前的试验来看,应当是需要两个模型分别来完成分类和可解释性任务,但必须共享同一份数据和知识。因此,喂给ChatGPT一些数据做微调(但是缺乏标签,需要走无监督的逻辑),大概是可探索的方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/52027.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python 自动化数据提取之正则表达式

>>>> 前 言 我们在做接口自动化的时候,处理接口依赖的相关数据时,通常会使用正则表达式来进行提取相关的数据,今天在这边和大家聊聊如何在python中使用正则表达式。 正则表达式,又称正规表示式、正规表示法、正规…

K8S:容器日志收集与管理

Kubernetes 里面对容器日志的处理方式,都叫作 cluster-level-logging,即:这个日志处理系统,与容器、Pod 以及 Node 的生命周期都是完全无关的。这种设计当然是为了保证,无论是容器挂了、Pod 被删除,甚至节点…

RabbitMQ部署指南

RabbitMQ部署指南 1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一:在线拉取 docker pull rabbitmq:3-management方式二:从本地加载 已经提供了镜像包: 上传到虚拟机中后,使用命令加载镜像即可&…

文档管理NAS储存安全吗?

关键词:私有化、知识管理系统、文档管理、群晖NAS、协同编辑 随着企业不断发展扩大,企业的知识文档也逐渐增多,很多企业方便管理及考虑数据安全问题会将文件数据储存至NAS。 但将企业文档数据放在NAS上就足够安全的吗? 天翎文档管…

集成学习概述

集成学习 1. 集成学习概念 集成学习是解决有监督机器学习任务的一类方法,它的思路是基于多个学习算法的集成来提升预测结果,它通过多个模型的组合形成一个精度更高的模型,参与组合的模型成为弱学习器(基学习器)。训练时,使用训练集依次训练出这些弱学习器,对未知的样本…

yolov8系列[五]-项目实战-yolov8模型无人机检测

yolov8系列[五]-项目实战-yolov8模型无人机检测 项目介绍项目展示功能简介代码结构如何启动 开发者模式1. 安装依赖环境2. 启动程序 源代码下载其他 项目介绍 无人机识别项目,无人机搭载nvidia jetson边缘计算板子,进行实时识别。使用yolov8算法,训练了识别无人机的…

用于永磁同步电机驱动器的自适应SDRE非线性无传感器速度控制(MatlabSimulink实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码&Simulink仿真实现 💥1 概述 本文方法基于状态依赖的里卡蒂方程(SDRE)控制技术及其梯度型神经网络的实时计算方法,允许…

c++里的基础类 is_empty_v<_Ty1>

&#xff08;1&#xff09;为什么要研究这个问题&#xff0c;因为包括智能指针等很多源代码里都会使用 _Compressed_pair 这个类&#xff0c;其是一对值。研究这个类&#xff0c;就牵涉另一个更基础的类 is_empty_v<_Ty1> &#xff08;2&#xff09; is_empty_v<_Ty1&…

APP自动化测试-Python+Appium+Pytest+Allure框架实战封装(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 pytest只是单独的…

西安电子科技大学

前言 本篇文章投稿与以下活动 【西安城市开发者社区】探索西安高校&#xff1a;展现历史与创新的魅力 资料参考与百度百科 学校简介 西安电子科技大学&#xff08;Xidian University&#xff09;&#xff0c;简称“西电”&#xff0c;位于陕西省西安市&#xff0c;是中央部…

二、SQL-5.DQL-8).案例练习

1、查询年龄为20,21,22,23岁的员工信息 select * from emp where age in(20, 21, 22, 23) and gender 女; 2、查询性别为男&#xff0c;并且年龄在20-40岁&#xff08;含&#xff09;以内的姓名为三个字的员工 select * from emp where gender 男 && age between 2…

ICLR 2023 | 用于分布外泛化的拓扑感知鲁棒优化

论文链接&#xff1a;https://openreview.net/pdf?idylMq8MBnAp 代码链接&#xff1a;GitHub - joffery/TRO: The Pytorch implementation for "Topology-aware Robust Optimization for Out-of-Distribution Generalization" (ICLR 2023) 01. 研究背景 近年来&…

Linux搭建Promtail + Loki + Grafana 轻量日志监控系统

一、简介 日志监控告警系统&#xff0c;较为主流的是ELK&#xff08;Elasticsearch 、 Logstash和Kibana核心套件构成&#xff09;&#xff0c;虽然优点是功能丰富&#xff0c;允许复杂的操作。但是&#xff0c;这些方案往往规模复杂&#xff0c;资源占用高&#xff0c;操作苦…

【Java基础教程】(四十四)IO篇 · 上:File类、字节流与字符流,分析字节输出流、字节输入流、字符输出流和字符输入流的区别~

Java基础教程之IO操作 上 &#x1f539;本节学习目标1️⃣ 文件操作类&#xff1a;File2️⃣ 字节流与字符流2.1 字节输出流&#xff1a;OutputStream2.2 字节输入流&#xff1a;InputStream2.3 字符输出流&#xff1a;Writer2.4 字符输入流&#xff1a;Reader2.5 字节流与字符…

S32K14x FlexNVM介绍(flexible Non-volatile memory)

S32K14x是一款NXP推出的32位汽车级微控制器&#xff0c;其存储结构相对复杂。下面是对其存储结构的中文介绍&#xff1a; S32K14x采用了分层存储结构&#xff0c;包括Flash存储器和SRAM存储器。Flash存储器用于存储程序代码和常量数据&#xff0c;而SRAM存储器用于存储变量数据…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(14)-Fiddler断点(breakpoints)实战,篡改或伪造数据

1.简介 上一篇主要就讲解和分享Fiddler断点的理论和操作&#xff0c;今天宏哥就用具体例子&#xff0c;将上一篇中的理论知识实践一下。而且在实际测试过程中&#xff0c;有时候需要修改请求或响应数据&#xff0c;或者直接模拟服务器响应&#xff0c;此时可以使用fiddler进行…

数据库—用户权限管理(三十三)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 二、用户权限类型 ​三、用户赋权 四、权限删除 五、用户删除 前言 数据库用户权限管理是指对数据库用户的权限进行控制和管理&#xff0c;确保用户只能执…

C++ 成员初始化列表和new运算符的应用

输出一个学生的学号&#xff0c;姓名&#xff0c;性别和出生年月日 class Date { public:Date(int y, int m, int d) :m_year(y), m_month(m), m_day(d) {}void Print(){cout << m_year << "/" << m_month << "/" << m_day…

春秋云境:CVE-2022-23880(taoCMS v3.0.2 任意文件上传漏洞)

目录 一、题目 二、进入题目&#xff1a; 2.1 文件写入一句话木马&#xff1a; 2.2 用SQL语句写入木马&#xff1a; 一、题目 靶标介绍&#xff1a; taoCMS v3.0.2 文件管理处存在任意文件上传漏洞&#xff0c;攻击者可执行任意代码 二、进入题目&#xff1a; 访问/admin …

ios私钥证书的创建方法

ios私钥证书是苹果公司为ios开发者打包app&#xff0c;推出的一种数字证书&#xff0c;只有同一个苹果开发者账号生成的ios私钥证书打的包&#xff0c;才能上架同一个开发者账号的app store。因此不要指望别人给你共享私钥证书和描述文件&#xff0c;因为别人的证书和描述文件打…