使用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
相关产品推荐
相关产品推荐

