Inseq 特征归因:可视化解释 LLM 的输出

Feature Attribution(特征归因):你可以将其当做对模型输出的解释,就像在图像分类中可视化模型关注的区域一样。

本文将介绍 Inseq,这是一个用于解释和可视化序列生成模型输出的工具。我们将通过翻译任务(关注整个序列)和文本生成任务(关注前面的词)来演示如何使用 Inseq 来了解输入文本的哪些部分对模型生成下一个单词的影响最大。

这篇文章也为生成式人工智能导论课程中 HW7: Understand what Generative AI is thinking 提供中文引导。

代码文件下载 | 作业PDF

在线链接:Kaggle | Colab

安装和导入一些必要的库

pip install inseq==0.5.0
pip install transformers==4.40.2
pip install bitsandbytes==0.43.1
pip install -U accelerate==0.28.0

可视化翻译任务

下载中译英模型

为了加快模型下载速度,我们可以使用多线程下载。如果直接运行以下命令报错,可以参考使用 HFD 加快 Hugging Face 模型和数据集的下载进行前置安装。

首先,下载 hfd.sh 脚本并赋予执行权限:

wget https://hf-mirror.com/hfd/hfd.sh
chmod a+x hfd.sh

然后,多线程下载模型:

export HF_ENDPOINT=https://hf-mirror.com
./hfd.sh 'Helsinki-NLP/opus-mt-zh-en' --tool aria2c -x 16

image-20240919190843315

进行特征归因

import inseq

# 定义要使用的归因方法列表
attribution_methods = ['saliency', 'attention']

for method in attribution_methods:
    print(f"======= 归因方法: {method} =======")
    # 加载中译英模型并设置归因方法
    # model = inseq.load_model("Helsinki-NLP/opus-mt-zh-en", method)
    model = inseq.load_model("opus-mt-zh-en", method)  # 导入之前下载到本地的模型

    # 使用指定的归因方法对输入文本进行归因
    attribution_result = model.attribute(
        input_texts="我喜歡機器學習和人工智慧。",
        step_scores=["probability"],
    )

    # 从tokenizer中去除 '▁' 前缀以避免混淆(可以忽略这段代码)
    for attr in attribution_result.sequence_attributions:
        for item in attr.source:
            item.token = item.token.replace('▁', '')
        for item in attr.target:
            item.token = item.token.replace('▁', '')

    # 显示归因结果
    attribution_result.show()

输出:

  1. Saliency 方法
    通过计算输入对输出的梯度,衡量输入 token 对生成输出的影响程度。你可以看到生成的每个输出 token 是如何受到输入 token 的影响的,比如: I like我喜欢 的影响最大。
    image-20240919191245260
  2. Attention 方法
    利用模型的注意力机制来进行解释,展示输入和输出 token 之间的注意力权重。 image-20240919191411509

可视化文本生成任务

下载 GPT-2 XL 模型

同样地,我们使用多线程方法下载 GPT-2 XL 模型,如果只是为了查看的话,可以换成 GPT-2 下载,因为 GPT-2 XL 下载完需要占用 30G:

export HF_ENDPOINT=https://hf-mirror.com
./hfd.sh 'gpt2-xl' --tool aria2c -x 16
#./hfd.sh 'gpt2' --tool aria2c -x 16

image-20240919194525394

加载模型

from transformers import AutoModelForCausalLM, BitsAndBytesConfig

# 创建一个 BitsAndBytesConfig 对象,用于配置量化选项
bnb_config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForCausalLM.from_pretrained(
    "gpt2-xl",  # gpt2
    quantization_config=bnb_config,
    device_map={"": 0}
)

进行特征归因

import inseq

# 定义要使用的归因方法列表
attribution_methods = ['saliency', 'attention']

for method in attribution_methods:
    print(f"======= 归因方法: {method} =======")
    # 使用指定的归因方法加载模型
    inseq_model = inseq.load_model(model, method)

    # 对输入文本进行归因分析
    attribution_result = inseq_model.attribute(
        input_texts="Hello world",
        step_scores=["probability"],
    )

    # 清理 tokenizer 中的特殊字符(可选)
    for attr in attribution_result.sequence_attributions:
        for item in attr.source:
            item.token = item.token.replace('Ġ', '')
        for item in attr.target:
            item.token = item.token.replace('Ġ', '')

    # 显示归因结果
    attribution_result.show()

输出:

  1. Saliency 方法
    image-20240919194633424
  2. Attention 方法
    image-20240919194730663

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hoper.J

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值