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

如何在SpaCy文本分类模型中使用SHAP?报AttributeError如何解决

问题原因

  • 你没有给shap.Explainer指定文本类型的掩膜器(masker),SHAP默认会将输入当成数值型张量处理,才会对输入的字符串索要shape属性,触发报错。
  • 你自定义的预测函数返回嵌套字典列表的格式仅适用于SHAP内置的流水线适配场景,自定义预测函数需要直接返回形状为(样本数, 类别数)的numpy数组,不需要封装成字典结构。

修正代码

首先调整预测函数输出格式:

import numpy as np
import spacy
import shap

# 加载你训练好的spacy模型
nlp = spacy.load("my_model")

def nlp_predict(texts):
    result = []
    for text in texts:
        prediction = nlp_fn(text) # 原有调用模型获取概率的逻辑保持不变
        # 按顺序返回两个类别的概率即可
        result.append([prediction["label1"], prediction["label2"]])
    # 转换为numpy数组返回
    return np.array(result)

然后初始化解释器时指定文本掩膜器,复用你训练时用的spacy分词器保证逻辑一致:

# 定义文本掩膜器,传入spacy原生分词器
masker = shap.maskers.Text(tokenizer=nlp.tokenizer)
# 初始化解释器,指定output_names后续可视化会自动显示类别名
explainer = shap.Explainer(nlp_predict, masker=masker, output_names=["label1", "label2"])
# 运行解释不会再报错
shap_values = explainer(["This is an example"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 17:39:03