You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SHAP解释基于Transformer改造的文本回归模型?

使用SHAP解释基于Transformer的文本回归模型

核心思路

SHAP可以直接适配你的回归模型,核心是将模型包装为SHAP可调用的预测函数,再利用文本专用的解释器完成token级别的贡献分析。以下是具体实现步骤:


1. 安装依赖

首先确保安装SHAP库:

pip install shap

2. 包装模型预测函数

SHAP需要一个接受文本列表、输出预测结果的函数。针对你的HuggingFace回归模型,实现如下:

import torch
import shap

# 定义模型预测函数:输入文本列表,输出回归预测值(numpy格式)
def model_predict(texts):
    # 对输入文本进行tokenize
    inputs = tokenizer(
        texts,
        return_tensors="pt",
        padding=True,
        truncation=True,
        max_length=MAX_LENGTH
    )
    # 关闭梯度计算,提升速度
    with torch.no_grad():
        outputs = model(**inputs)
    # 回归模型的logits为(batch_size, 1),转为numpy数组返回
    return outputs.logits.detach().numpy()

3. 初始化SHAP解释器

推荐使用shap.Explainer(针对文本场景会自动调用TextExplainer),传入预测函数和tokenizer即可:

# 初始化解释器
explainer = shap.Explainer(model_predict, tokenizer)

# 对目标文本计算SHAP值
sample_text = "需要解释的测试文本"
shap_values = explainer([sample_text])

4. 可视化解释结果

SHAP提供直观的文本可视化方式,展示每个token对预测分数的贡献:

# 生成token级贡献可视化图
shap.plots.text(shap_values)
  • 红色token:提升预测分数的正向贡献
  • 蓝色token:降低预测分数的负向贡献
  • 图中会显示基准值(背景数据的平均预测分数),所有token的贡献总和加上基准值等于当前文本的预测分数。

优化提示

  • 如果模型较大,可指定背景数据集加速计算(取训练集中的部分样本作为参考):
    # 用100条训练样本作为背景数据
    background_texts = [item["text"] for item in train_dataset[:100]]
    explainer = shap.Explainer(model_predict, tokenizer, masker=background_texts)
    
  • 确保模型已完成训练,未训练的随机模型无法得到有意义的解释结果。

内容的提问来源于stack exchange,提问作者Gevin Hasmitha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 21:35:00