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

使用Huggingface Transformer做SHAP解释时遇最大长度错误求助

解决SHAP解释长文本时的模型报错

问题拆解与修复方案

1. Token长度超限错误

sshleifer/distilbart-xsum-12-6模型的最大输入token数是1024,输入文本token数超过这个值就会触发索引错误。两种修复方式:

  • 自动截断:初始化tokenizer时开启truncation=True,让tokenizer自动把超过1024的部分切掉;
  • 滑动窗口拆分:把长文本分成多个1024token的片段,分别生成SHAP解释后再整合,适合需要保留完整上下文的场景。

示例修改(自动截断):

tokenizer = AutoTokenizer.from_pretrained("sshleifer/distilbart-xsum-12-6", truncation=True, max_length=1024)

2. 生成配置弃用警告

这个警告是因为SHAP的Explainer用了旧的模型配置修改逻辑,直接修改模型的generation_config就能解决:

# 初始化模型后设置生成参数,按需调整数值
model.generation_config.max_length = 150
model.generation_config.num_beams = 4

完整修复后的代码

!pip install transformers[sentencepiece] datasets sacrebleu rouge_score py7zr -q    
import numpy as np

import torch
from datasets import load_dataset
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer

import shap

# 开启自动截断,限制输入长度
tokenizer = AutoTokenizer.from_pretrained("sshleifer/distilbart-xsum-12-6", truncation=True, max_length=1024)
model = AutoModelForSeq2SeqLM.from_pretrained("sshleifer/distilbart-xsum-12-6").cuda()

# 更新生成配置,消除弃用警告
model.generation_config.max_length = 150
model.generation_config.num_beams = 4

dataset = load_dataset("xsum", split="train")
s = dataset["document"][2:3]

explainer = shap.Explainer(model, tokenizer)
shap_values = explainer(s)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:32:54