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

如何使用SHAP库进行文本分类?解决Pipeline模型调用报错问题

解决SHAP无法分析文本Pipeline模型的TypeError问题

问题原因

SHAP无法直接处理包含**文本向量化步骤(CountVectorizer+TfidfTransformer)**的Scikit-learn Pipeline,因为Pipeline的输入是原始文本,但SHAP默认的masker和调用逻辑不兼容这类多步骤文本模型,导致报错提示模型不可调用。


解决方案一:直接适配文本输入(推荐,可解释原始文本词)

通过包装Pipeline为可调用函数,搭配SHAP的文本专用masker,直接基于原始文本解释特征(词)对各类别的影响:

  1. 导入依赖
import shap
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
  1. 定义文本masker
    用于对原始文本进行掩码(随机替换/删除词),模拟特征缺失的场景:
masker = shap.maskers.Text(" ")  # 以空格为分隔符拆分文本词
  1. 包装Pipeline为可调用预测函数
    让SHAP可以直接传入文本并获取模型的类别概率输出:
def predict_proba_wrapper(texts):
    return your_pipeline.predict_proba(texts)

(将your_pipeline替换为你实际的Pipeline实例)

  1. 初始化SHAP解释器并计算SHAP值
# 初始化Explainer,传入包装后的预测函数和文本masker
explainer = shap.Explainer(predict_proba_wrapper, masker=masker)

# 选取部分样本计算SHAP值(全量样本计算慢,建议选10-50个)
sample_texts = your_text_data[:20]  # your_text_data是原始文本数据集
shap_values = explainer(sample_texts)
  1. 可视化特征影响
  • 查看单个样本对所有类别的词贡献:
shap.plots.waterfall(shap_values[0])  # 第1个样本的瀑布图
  • 查看所有样本的全局词贡献:
shap.plots.bar(shap_values)

解决方案二:基于预处理后的TF-IDF特征解释

如果需要解释TF-IDF数值特征的影响(而非原始词),可以拆分Pipeline单独处理模型部分:

  1. 提取预处理后的特征和模型
# 获取Pipeline中的各个步骤
vect = your_pipeline.named_steps['vect1']
tfidf = your_pipeline.named_steps['tfidf1']
model = your_pipeline.named_steps['clf1']

# 生成TF-IDF特征矩阵
X_tfidf = tfidf.transform(vect.transform(your_text_data))
  1. 使用KernelExplainer计算SHAP值
# 用部分样本作为背景数据集(减少计算量)
background = X_tfidf[:100]
explainer = shap.KernelExplainer(model.predict_proba, background)

# 计算样本的SHAP值
shap_values = explainer.shap_values(X_tfidf[:10])
  1. 映射特征到原始词并可视化
# 获取词列表
feature_names = vect.get_feature_names_out()

# 绘制summary plot,标注词名称
shap.summary_plot(shap_values, X_tfidf[:10], feature_names=feature_names)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:43:17