完整教程:Transformer实战(31)——解释Transformer模型决策

news/2026/1/21 12:42:39/文章来源:https://www.cnblogs.com/gccbuaa/p/19511044

Transformer实战(31)——解释Transformer模型决策

    • 0. 前言
    • 1. 解释模型决策
    • 2. 使用 LIME 解释 Transformer 模型决策
    • 3. 使用 SHAP 解释 Transformer 模型决策
    • 小结
    • 系列链接

0. 前言

随着大语言模型 (Large Language Model, LLM) 的广泛应用,模型输出的准确性与可解释性之间的权衡问题变得尤为重要。可解释人工智能 (explainable artificial intelligence, XAI) 研究中的最大挑战是处理深度神经网络模型中大量的网络层和参数,旨在找到一种方法来理解深度模型如何做出决策。本节将从 Transformer 模型的角度来探讨可解释人工智能,我们已经学习了如何使用多种自注意力机制可视化工具,理解 Transformer 模型如何处理输入,并解释学习到的表示。在本节中,我们将通过两种重要方法,LIMESHapley Additive exPlanations (SHAP),解释 Transformer 模型如何做出决策。

1. 解释模型决策

即使我们无法完全理解大语言模型 (Large Language Model, LLM) 的决策或结果,我们仍然可以理解导致这一决策的某些方面。但首先,我们需要理解在本节中试图解释的内容。解释模型主要包括以下三个分类方式:

解释方法分类
首先,根据试图理解模型如何做出整体决策,还是它在特定输入下的行为,可以分为全局解释 (global explanation) 和局部解释 (local explanation)。局部解释器处理特定输入上的决策,而全局解释器则尝试解释模型的整体预测过程。
可解释人工智能 (explainable artificial intelligence, XAI) 模型的第二个区别在于它们是自解释模型 (self-explaining) 还是事后解释模型 (post-hoc models)。在自解释模型方法中(也称为自解释器),模型不仅做出预测,还提供解释,例如自注意力机制。需要注意的是,自注意力机制用于构建上下文相关的词和句子嵌入,而不是用于做决策。决策树等传统的机器学习模型以及其他基于规则的模型是全局自解释器的典型例子。事后解释模型则需要额外的过程来理解模型的决策行为,其中通过训练一个代理模型来解释主模型。这种事后过程可以是全局的,也可以是局部的。LIME 能够利用代理模型生成局部解释,而 SHAP (SHapley Additive exPlanations) 则可以在全局和局部两种方式下工作。
XAI 的另一个方面区别是模型特定和模型无关的解释工具。模型特定工具只能与特定的模型一起使用,而模型无关工具则能够解释任何黑盒模型。
随着机器学习的最新趋势集中于基于大规模神经网络的模型,如 LLM,这些模型通常被视为黑盒模型,因此代理模型 (surrogate models) 和模型无关的方法越来越受欢迎。这些代理模型可以帮助解释神经网络模型的决策行为。
流行的开源实现包括:

接下来,我们介绍 LIMESHAP 模型,以便理解 Transformers 模型的决策。

2. 使用 LIME 解释 Transformer 模型决策

LIME 是一个模型无关、局部和事后解释的方法。LIME 背后的主要思想是输入扰动,对输入(在本节中是一个句子)应用随机扰动,并测量它们对输出(情感或类别)的影响。这个过程使用一个简单的可训练机器学习模型作为主要的可解释人工智能 (explainable artificial intelligence, XAI) 代理模型。
LIME 过程中,解释定义为模型行为的局部线性近似。这是因为许多模型在全局上非常复杂,所以在特定实例的邻域内近似更容易。为了实现这一点,对待解释的实例进行扰动,并且在该实例的邻域内学习一个稀疏线性模型(也称代理模型)。
我们可以将 LIME 过程简化为以下步骤:

  1. 首先,选择一个待解释的预测
  2. 通过随机隐藏特征来扰动输入,并收集黑盒模型的结果,生成围绕原始单个样本的邻域数据
  3. 根据新样本与原始预测的相似度为邻域样本分配权重
  4. 在邻域样本上训练一个更简单、可解释的线性模型,获得一个代理模型
  5. 最后,使用代理模型预测此局部预测的解释

接下来,我们通过一个实际示例,使用 limetransformers 库来理解 LIME 过程。

(1) 首先,使用 pip 命令安装所需库:

$ pip install lime

(2) 使用一个微调的土耳其语文本分类模型:

import lime
from lime.lime_text import LimeTextExplainer
from transformers import (AutoTokenizer, AutoModelForSequenceClassification)
model_path = 'savasy/bert-turkish-text-classification'
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForSequenceClassification.from_pretrained(model_path)
class_names =model.config.id2label.values()

(3) 该模型有七个类别,具体如下:

class_names
# dict_values(['world', 'economy', 'culture', 'health', 'politics', 'sport', 'technology'])

接下来,我们将输入一段土耳其语文本并解释其分类结果。文本内容为 “Ünlü futbolcu Ahmet Yıldız sene sonunda yapılacak turnuva maçları hakkında konuştu”,意思是:“著名足球运动员 Ahmet Yıldız 谈到了将在年底举行的锦标赛比赛”。很明显,这段文本是关于体育 (sport) 的内容。

(4) 对输入进行分类,并绘制类别概率分布图:

import pandas as pd
import torch.nn.functional as Func
text = 'Ünlü futbolcu Ahmet Yıldız sene sonunda yapılacak turnuva maçları hakkında konuştu'
outputs = model(**tokenizer(text,
return_tensors="pt",
padding=True))
probabilities = Func.softmax(outputs[0]).detach().numpy()
q=dict(zip(class_names,probabilities[0]))
pd.Series(q).plot(kind="bar")

分布图如下,其中从七个类别标签中选择了 “sport” (体育)。

标签分布图

(5) 接下来,我们将为这个决策生成解释。为此,定义函数 pred_prob() 来计算类别概率分布。该函数将被 LIME XAI 模型用于生成邻域样本并训练线性 XAI 分类器:

def pred_prob(text):
outputs = model(**tokenizer(text,
return_tensors="pt",
padding=True))
ps = Func.softmax(outputs[0]).detach().numpy()
return ps

(6) 定义 LimeTextExplainer,并传入了类别名称。然后,传入文本和 pred_prob 类别概率函数,并选择第五个标签,即 “sport” (体育)类。num_features 参数指定 LIME 模型用于解释决策的特征数,在文本分类的例子中,它指的是 LIME 模型为解释决策而选择的单词数量。num_samples 参数指定生成多少个邻域样本,我们通常会保持这个数值较高,比如 10005000,以便有效地训练线性分类器:

explainer = LimeTextExplainer(class_names=class_names)
exp = explainer.explain_instance(text, pred_prob,
labels= [5],
num_features=7,
num_samples=1000)

执行后,输出结果如下所示,它解释了棕色的单词表示文本属于体育类别:

决策解释
浅蓝色代表非体育内容。如输出所示,文本分类模型在将该文本映射到体育类别时,关注与体育相关的术语。单词的颜色越深,决策越重要。

(7) 接下来,使用一个英语的示例。加载英文的情感分类模型,这是一个多标签文本分类模型,共有 28 个标签。我们将其用作单标签分类模型,并使用 softmax 函数:

from transformers import AutoTokenizer, AutoModelForSequenceClassification
tokenizer = AutoTokenizer.from_pretrained("SamLowe/roberta-base-go_emotions")
model = AutoModelForSequenceClassification.from_pretrained("SamLowe/roberta-base-go_emotions")
class_names =model.config.id2label.values()

(8) 对文本:“I have tried different models, but I have not yet made a decision.” 进行分类,模型会将其预测为 “confusion” (困惑,id=6):

text= "I have tried different models, but I have not yet made a decision."
explainer = LimeTextExplainer(class_names=class_names)
exp = explainer.explain_instance(text,
pred_prob,
labels= [6],
num_features=7,
num_samples=1000)

输出解释如下:

决策解释
与上一示例一样,每种颜色都有其含义。红色代 “confusion” 标签,而绿色表示非 “confusion” 标签。为了便于可视化,裁剪了 LIME 的输出。运行代码时,可以看到许多关于颜色编码的信息。
LIME 的一个缺点是它的代理模型是基于采样数据点构建的,这使得它对所使用的采样策略非常敏感。对相同局部数据使用不同的采样方法可能导致完全不同的解释结果。其次,LIME 方法基于局部实例可以线性解释的假设。
接下来,我们使用 SHAP 模型解释 Transformers 的决策。

3. 使用 SHAP 解释 Transformer 模型决策

SHAP (Shapley Additive Explanations) 是 XAI 领域最常见和广泛使用的技术之一。它基于博弈论中的 Shapley 值概念。与 LIME 不同,SHAP 并不仅是一个局部可解释模型,而是利用黑盒模型计算每个特征对预测的边际贡献。
通过这种方式,SHAP 提供了通过识别最重要的特征,来深入了解推动模型决策过程的因素,既可以是全局的,也可以是局部的。它通过计算每个局部预测中单词的 SHAP 值来评估特征的重要性,然后通过将每个单独预测的绝对 SHAP 值相加提供全局特征重要性。由于 SHAP 技术能够为复杂的深度学习模型提供准确且可解释的解释,在 XAI 领域越来越受欢迎。
LIME 假设局部模型是线性的,而 SHAP 并不做此类假设。但,SHAP 的一个缺点是,计算 SHAP 值可能计算量大且耗时。这是因为它检查所有可能的组合,并通过蒙特卡洛模拟而非暴力计算进行处理。
接下来,学习使用 SHAP 的过程,使用与 LIME 示例中相同的方法。

(1) 使用 pip 命令安装所需库:

$ pip install shap

(2) 加载具有 28 个标签的多标签文本分类模型:

from transformers import AutoTokenizer, AutoModelForSequenceClassification
tokenizer = AutoTokenizer.from_pretrained("SamLowe/roberta-base-go_emotions")
model = AutoModelForSequenceClassification.from_pretrained("SamLowe/roberta-base-go_emotions")
class_names =model.config.id2label.values()

(3) 封装在管道对象中:

from transformers import pipeline
classifier= pipeline("text-classification",
model=model,
tokenizer=tokenizer)

(4) 对文本进行分类:

text= "I have tried different models, but I have not yet made a decision."
classifier(text)
# [{'label': 'confusion', 'score': 0.5284215211868286}]

(8) 模型会输出 “confusion” (困惑,id=6) 标签。接下来,通过 SHAP 来解释这个决策:

import shap
explainer = shap.Explainer(classifier)
shap_values = explainer([text])

(9) 指定目标标签为 confusion,这样我们就能看到哪些特征将模型引导向这个决策。将选择条形图可视化方式,因为它比其他方式更易于阅读:

shap.plots.bar(shap_values[0,:,"confusion"])

输出结果如下所示:

输出结果

可以看到与 LIME 类似的解释。最后需要指出的是,SHAP 因其基于博弈论中 Shapley 值的理论论证及其简单性而被广泛使用。而在 LIME 中,必须定义如何考虑邻域,此外,还需要构建一个线性的局部模型,而在高度复杂的决策上,这种模型可能并不是线性的。在 SHAP 中,并不做出这样的假设。

小结

在本节中,我们讨论了人工智能面临的最重要问题之一:可解释人工智能 (explainable artificial intelligence, XAI)。随着语言模型的不断发展,可解释性成为一个严峻的问题。本节中,我们从 Transformer 的角度出发,解释了 Transformer 架构的决策过程,使用了两种模型无关的方法:LIMESHAP。通过这两种技术,我们尝试解释模型在简单的文本分类过程中如何赋予输入(单词)不同的权重。

系列链接

Transformer实战(1)——词嵌入技术详解
Transformer实战(2)——循环神经网络详解
Transformer实战(3)——从词袋模型到Transformer:NLP技术演进
Transformer实战(4)——从零开始构建Transformer
Transformer实战(5)——Hugging Face环境配置与应用详解
Transformer实战(6)——Transformer模型性能评估
Transformer实战(7)——datasets库核心功能解析
Transformer实战(8)——BERT模型详解与实现
Transformer实战(9)——Transformer分词算法详解
Transformer实战(10)——生成式语言模型 (Generative Language Model, GLM)
Transformer实战(11)——从零开始构建GPT模型
Transformer实战(12)——基于Transformer的文本到文本模型
Transformer实战(13)——从零开始训练GPT-2语言模型
Transformer实战(14)——微调Transformer语言模型用于文本分类
Transformer实战(15)——使用PyTorch微调Transformer语言模型
Transformer实战(16)——微调Transformer语言模型用于多类别文本分类
Transformer实战(17)——微调Transformer语言模型进行多标签文本分类
Transformer实战(18)——微调Transformer语言模型进行回归分析
Transformer实战(19)——微调Transformer语言模型进行词元分类
Transformer实战(20)——微调Transformer语言模型进行问答任务
Transformer实战(21)——文本表示(Text Representation)
Transformer实战(22)——使用FLAIR进行语义相似性评估
Transformer实战(23)——使用SBERT进行文本聚类与语义搜索
Transformer实战(24)——通过数据增强提升Transformer模型性能
Transformer实战(25)——自动超参数优化提升Transformer模型性能
Transformer实战(26)——通过领域适应提升Transformer模型性能
Transformer实战(27)——参数高效微调(Parameter Efficient Fine-Tuning,PEFT)
Transformer实战(28)——使用 LoRA 高效微调 FLAN-T5
Transformer实战(29)——大语言模型(Large Language Model,LLM)
Transformer实战(30)——Transformer注意力机制可视化

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CVE-2025-27591:利用Below日志符号链接漏洞实现权限提升

CVE-2025-27591 Exploit - Below Logger Symlink Attack 项目标题与描述 CVE-2025-27591 Below日志符号链接攻击利用工具 本项目是一个基于Bash的权限提升漏洞利用脚本,专门针对Facebook开发的系统性能监控工具below。该工具利用below在日志记录机制中存在的一个符号…

导师推荐!自考必备!9款一键生成论文工具TOP9测评

导师推荐!自考必备!9款一键生成论文工具TOP9测评 2026年自考论文工具测评:为何需要一份精准推荐? 随着自考人数逐年攀升,论文写作成为众多考生面临的“拦路虎”。从选题构思到文献检索,再到格式规范与查重…

政策 + 市场双轮驱动!虚拟电厂迎来爆发期,安科瑞解决方案解锁能源新生态

当新能源发电的波动性遇上用电负荷的峰谷差难题,当分布式资源的分散性遭遇电网调节的刚需性,虚拟电厂 —— 这一能源数字化转型的核心载体,正从政策试点迈向市场化规模化的快车道,成为新型电力系统不可或缺的关键力量。作为智慧能…

告别无效Debug!飞算JavaAI一键修复器实测:精准排错,高效提效

在Java开发领域,Bug排查与修复始终占据着开发人员大量工作时间,即便经验丰富的开发者,也难免在冗长的报错日志中耗费精力,而新手更是容易陷入“看不懂日志、找不到错误、改不对代码”的困境。为帮助开发者摆脱无效Debug的内耗&…

从头构建一个简易HashMap,深入理解其底层实现机制与设计思想

第一章:HashMap底层实现原理概述 HashMap 是 Java 集合框架中应用最广泛的数据结构之一,用于存储键值对(key-value pairs),其核心目标是实现平均时间复杂度为 O(1) 的插入、查找和删除操作。它基于哈希表实现&#xff…

导师推荐10个AI论文工具,助你轻松搞定本科毕业论文!

导师推荐10个AI论文工具,助你轻松搞定本科毕业论文! AI 工具让论文写作不再难 随着人工智能技术的不断进步,越来越多的本科生开始借助 AI 工具来提升论文写作效率。尤其是在面对论文降重、内容生成和结构优化等难题时,AI 工具展现…

深聊六安恒汇3M铂金店技术实力如何,靠谱性大揭秘

2026年汽车后市场消费升级趋势显著,专业汽车贴膜服务已成为车主保护爱车、提升用车体验的核心需求。无论是隐形车衣的抗刮防护、改色膜的个性化定制,还是窗膜的隔热防晒,优质服务商的技术实力、价格透明性与售后保障…

零碳转型加速!能碳管理平台成为工厂 / 园区必备神器,政策 + 方案双加持

零碳转型加速!能碳管理平台成为工厂 / 园区必备神器,政策 方案双加持1 月 19 日,工信部联合五部门印发《关于开展零碳工厂建设工作的指导意见》;去年 6 月,国家发改委联合三部门推出《关于开展零碳园区建设的通知》。…

钟点家政保姆哪家性价比高,无忧家政优势突显

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆家政服务企业,为家庭用户精准匹配适配的家政服务伙伴,助力解决找保姆难、匹配不准、服务无保障等核心痛点。 TOP1 推荐:无忧家政 推荐指数:★★★★★…

聊聊太原求推荐的外贸独立站专业公司,哪家性价比高

2026年全球贸易数字化进程加速,外贸独立站已成为企业拓展海外市场的核心阵地,而AI技术的深度应用则是突破获客瓶颈、提升运营效率的关键。无论是独立站的快速搭建与本土化适配,还是AI驱动的内容运营与SEO优化,优质…

【高并发场景下的安全判空】:Java字符串空值处理的工业级方案

第一章:Java字符串空值处理的工业级方案 在企业级Java应用中,字符串空值(null)处理是保障系统稳定性的关键环节。未正确处理的null值极易引发 NullPointerException,导致服务中断或数据异常。工业级开发要求在设计层面…

Github 分析了 2500+ 个仓库后,发现大多数 agents.md 都写错了

Github 分析了 2500 个仓库后,发现大多数 agents.md 都写错了 目标读者:使用 AI 编码助手(GitHub Copilot、Claude Code、Cursor 等)的开发者 核心价值:掌握 agents.md 的六大核心领域和最佳实践,让 AI 真正…

Transformer 大模型架构深度解析(1)NLP 自然语言处理文本表示方法

目录 文章目录目录NLP 的发展阶段符号主义阶段联结主义和统计学习阶段DL(Deep Learning,深度学习)阶段PLM(Pretrain Language Model,预训练语言模型)阶段LLM(Large Language Model,大…

2026年经验丰富的家政保姆推荐,无忧家政保姆网靠谱公司大盘点

在现代快节奏的生活中,家政保姆服务已成为许多家庭平衡工作与生活的重要支撑。然而,面对市场上良莠不齐的家政保姆网与服务公司,如何找到经验丰富、安全可靠的家政保姆,成为不少家庭的难题。以下结合家庭需求与服务…

Java后端跨域问题一网打尽(含预检请求、凭证传递、多域名配置秘籍)

第一章:Java后端跨域问题概述 在现代Web开发中,前端与后端通常部署在不同的域名或端口下,这种分离架构虽然提升了系统的可维护性和扩展性,但也带来了浏览器的同源策略限制。当一个请求的协议、域名或端口与当前页面不一致时&#…

2026年微栖太空舱口碑排名揭晓,看看研发和充电表现怎样

在文旅度假、康养旅居的赛道上,一座能睡在风景里的移动空间,是连接自然与理想生活的关键纽带。但传统住宿载体要么受限于土地性质,要么破坏生态,要么体验感不足——而微栖太空舱的出现,正以生态友好+科技舒适的双…

基于AI多模态分析的日本黄金储备60%跃升研究:外汇结构重构与资产价格联动机制解构

摘要:本文通过构建基于深度学习的多因子储备资产动态分析模型,结合时间序列预测与因果推理框架,重点剖析日本黄金储备同比激增60%至1200亿美元的驱动机制,揭示其外汇储备结构重构的AI决策路径,并量化评估对黄金/美元指…

于51/STM32单片机锂电池电压电流电量太阳能充电保护云平台设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于51/STM32单片机锂电池电压电流电量太阳能充电保护云平台设计(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码STM32-S328-锂电池电压电流电量功率欠压过载(过流)保护充电保护负载USB灯阈值OLED屏声光提醒(无线方式选择) 产品…

7.2 版本流转:从 Docker Image Tag 视角看制品晋升策略

7.2 版本流转:从 Docker Image Tag 视角看制品晋升策略 1. 引言:Tag 是制品的“身份证” 在云原生时代,Docker 镜像 Tag 不仅仅是版本号,更是制品的“身份证”。它承载着: 来源信息:哪个分支、哪个提交构建的? 环境信息:这个镜像在哪个环境验证过? 质量信息:这个镜…

【高并发系统设计必修课】:彻底搞懂ThreadPoolExecutor的corePoolSize与maximumPoolSize区别

第一章:ThreadPoolExecutor核心参数概述 Java中的ThreadPoolExecutor是并发编程的核心组件之一,它允许开发者通过配置多个关键参数来精细控制线程池的行为。合理设置这些参数能够有效提升系统性能并避免资源耗尽问题。 核心构造参数 ThreadPoolExecutor…