Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在SpaCy模型中使用SHAP?

如何在SpaCy模型中使用SHAP?
EN

Stack Overflow用户
提问于 2021-07-27 04:47:34
回答 1查看 277关注 0票数 2

我试图通过使用SpaCy解释预测来提高SHAP二进制文本分类模型的可解释性。下面是我到目前为止尝试过的(下面是教程):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nlp = spacy.load("my_model") # load my model
explainer = shap.Explainer(nlp_predict)
shap_values = explainer(["This is an example"])

但我得到了AttributeError: 'str' object has no attribute 'shape'nlp_predict是我编写的一种方法,它以教程中使用的格式为每个文本获取文本和输出预测概率的列表。我在这里错过了什么?

这是我的格式化函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def nlp_predict(texts):
    result = []
    for text in texts:
        prediction = nlp_fn(text) # This returns label probability but in the wrong format
        sub_result = []
        sub_result.append({'label': 'label1', 'score': prediction["label1"]})
        sub_result.append({'label': 'label2', 'score': prediction["label2"]})
        result.append(sub_result)
    return(result)

下面是他们在本教程中使用的预测格式(对于2个数据点):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[{'label': 'label1', 'score': 2.850986311386805e-05},
  {'label': 'label2', 'score': 0.9999715089797974}],
 [{'label': 'label1', 'score': 0.00010622951958794147},
  {'label': 'label2', 'score': 0.9998937845230103}]]

我的函数的输出与此匹配,但我仍然得到了AttributeError。下面是我得到的全部错误信息:

EN

回答 1

Stack Overflow用户

发布于 2022-02-18 02:18:48

问题在于shap只为转换器库的令牌器和模型实现了方法。

SpaCy令牌程序的工作方式非常不同,特别是不返回令牌化结果的令牌ids。

因此,要完成这项工作,需要编写一个函数来包装spacy令牌器,以返回与转换器令牌器相同的数据(例如,[{'input_ids': [101, 7592, ...], 'offset_mapping': [(0, 5), (6, 9), ...], ...}]),或者在shap中添加对spacy令牌器/模型的支持。

这里有一个例子,我为前者黑出了一个解决方案。

  • 用于预测/标记化的spacy模型的包装器:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import spacy
textcat_spacy = spacy.load("my-model")
tokenizer_spacy = spacy.tokenizer.Tokenizer(textcat_spacy.vocab)

# Run the spacy pipeline on some random text just to retrieve the classes
doc = textcat_spacy("hi")
classes = list(doc.cats.keys())

# Define a function to predict
def predict(texts):
    # convert texts to bare strings
    texts = [str(text) for text in texts]
    results = []
    for doc in textcat_spacy.pipe(texts):
        # results.append([{'label': cat, 'score': doc.cats[cat]} for cat in doc.cats])
        results.append([doc.cats[cat] for cat in classes])
    return results

# Create a function to create a transformers-like tokenizer to match shap's expectations
def tok_adapter(text, return_offsets_mapping=False):
    doc = tokenizer_spacy(text)
    out = {"input_ids": [tok.norm for tok in doc]}
    if return_offsets_mapping:
        out["offset_mapping"] = [(tok.idx, tok.idx + len(tok)) for tok in doc]
    return out
  • Shap更简单的配置:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import shap
# Create the Shap Explainer
# - predict is the "model" function, adapted to a transformers-like model
# - masker is the masker used by shap, which relies on a transformers-like tokenizer
# - algorithm is set to permuation, which is the one used for transformers models
# - output_names are the classes (altough it is not propagated to the permutation explainer currently, which is why plots do not have the labels)
# - max_evals is set to a high number to reduce the probability of cases where the explainer fails because there are too many tokens
explainer = shap.Explainer(predict, masker=shap.maskers.Text(tok_adapter), algorithm="permutation", output_names=classes, max_evals=1500)
  • 用法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sample = "Some text to classify"
# Process the text using SpaCy
doc = textcat_spacy(sample)
# Get the shap values
shap_values = explainer([sample])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68545128

复制
相关文章
使用SpaCy构建自定义 NER 模型
命名实体识别(NER)是一种自然语言处理技术,用于在给定的文本内容中提取适当的实体,并将提取的实体分类到预定义的类别下。简单来说,NER 是一种用于从给定文本中提取诸如人名、地名、公司名称等实体的技术。在信息检索方面,NER 有其自身的重要性。
deephub
2021/11/23
3.5K0
spaCy 2.1 中文模型下载
spaCy是最流行的开源NLP开发包之一,它有极快的处理速度,并且预置了词性标注、句法依存分析、命名实体识别等多个自然语言处理的必备模型,因此受到社区的热烈欢迎。中文版预训练模型包括词性标注、依存分析和命名实体识别,由汇智网提供
用户1408045
2019/07/28
4.2K0
手把手教你使用SHAP(机器学习模型解释工具)
SHAP(SHapley Additive exPlanation)是解决模型可解释性的一种方法。SHAP基于Shapley值,该值是经济学家Lloyd Shapley提出的博弈论概念。“博弈”是指有多个个体,每个个体都想将自己的结果最大化的情况。该方法为通过计算在合作中个体的贡献来确定该个体的重要程度。
润森
2022/08/18
23K0
手把手教你使用SHAP(机器学习模型解释工具)
人工智能和数据科学的七大 Python 库
本文作者Favio Vázquez从2018年开始发布《数据科学和人工智能每周文摘:Python & R》系列文章,为数据科学家介绍最好的库、repos、packages以及工具。
加米谷大数据
2019/04/19
1.1K0
人工智能和数据科学的七大 Python 库
必备!人工智能和数据科学的七大 Python 库
本文作者Favio Vázquez从2018年开始发布《数据科学和人工智能每周文摘:Python & R》系列文章,为数据科学家介绍最好的库、repos、packages以及工具。
新智元
2019/01/09
1.3K0
SHAP 机器学习模型解释可视化工具
SHAP 是机器学习模型解释可视化工具。在此示例中,使用 SHAP 计算使用 Python 和 scikit-learn 的神经网络的特征影响 。对于这个例子,使用 scikit-learn 的 糖尿病数据集,它是一个回归数据集。首先安装shap库。
润森
2022/09/22
2.8K0
SHAP 机器学习模型解释可视化工具
【说站】Python如何使用Spacy进行分词
2、导入spacy相关模块后,需要加载中文处理包。然后读小说数据,nlp处理天龙八部小说,包括分词、定量、词性标注、语法分析、命名实体识别,用符号/分隔小说。最后,通过is_stop函数判断单词中的单词是否为无效单词,删除无效单词后,将结果写入txt文件。
很酷的站长
2022/11/24
1.2K0
【说站】Python如何使用Spacy进行分词
用 SHAP 可视化解释机器学习模型实用指南(下)
SHAP(Shapley Additive exPlanations) 使用来自博弈论及其相关扩展的经典 Shapley value将最佳信用分配与局部解释联系起来,是一种基于游戏理论上最优的 Shapley value来解释个体预测的方法。
数据STUDIO
2021/10/14
12.7K0
用 SHAP 可视化解释机器学习模型实用指南(下)
风控建模中SHAP值原理与Python实现
公众号有个小伙伴问我,Python或R是否可以对spss训练好的pmml模型进行解释分析,做shap值或依赖图。
阿黎逸阳
2023/10/25
1.2K0
风控建模中SHAP值原理与Python实现
使用 spacy 进行自然语言处理(一)
自然语言处理(NLP) 是人工智能方向一个非常重要的研究领域。 自然语言处理在很多智能应用中扮演着非常重要的角色,例如:
ke1th
2019/05/26
1.6K0
如何在面试中解释机器学习模型
为了帮助大家准备面试,这里分享一个资源,它提供了每个机器学习模型的简明解释。它们并不详尽,而是恰恰相反。希望阅读这篇文章后,你会了解如何以简洁的方式解释复杂的模型。
McGL
2020/11/10
1K0
如何在面试中解释机器学习模型
如何在 Django 中创建抽象模型类?
Django 中的抽象模型类是一个模型,它用作其他模型继承的模板,而不是一个旨在创建或保存到数据库的模型。在应用程序中,可以使用抽象模型定义多个模型共享的相似字段和行为。使用 Django,您可以定义一个派生自 Django.db.models 的模型类,以建立一个抽象模型类。
很酷的站长
2023/08/11
2350
如何在 Django 中创建抽象模型类?
将SHAP用于特征选择和超参数调优
特征选择和超参数调整是每个机器学习任务中的两个重要步骤。大多数情况下,它们有助于提高性能,但缺点是时间成本高。参数组合越多,或者选择过程越准确,持续时间越长。这是我们实际上无法克服的物理限制。我们能做的是充分利用我们的管道。我们面临着不同的可能性,最方便的两个是:
deephub
2021/07/01
2.5K0
使用Python中的NLTK和spaCy删除停用词与文本标准化
【磐创AI 导读】:本文介绍了如何使用Python中的NLTK和spaCy删除停用词与文本标准化,欢迎大家转发、留言。想要更多电子杂志的机器学习,深度学习资源,大家欢迎点击上方蓝字关注我们的公众号:磐创AI。
磐创AI
2019/09/09
4.2K0
使用Python中的NLTK和spaCy删除停用词与文本标准化
使用CatBoost和SHAP进行多分类完整代码示例
CatBoost是顶尖的机器学习模型之一。凭借其梯度增强技术以及内置函数,可以在不做太多工作的情况下生成一些非常好的模型。SHAP (SHapley Additive exPlanation)是旨在解释具有独特视觉效果和性能价值的机器学习模型的输出。CatBoost和SHAP结合在一起构成了一个强大的组合,可以产生一些非常准确并且可以进行解释的结果。
deephub
2023/08/30
8411
使用CatBoost和SHAP进行多分类完整代码示例
【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?
可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。
AiDBA宝典
2019/09/30
28.8K0
【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?
SHAP值:用博弈论的概念解释一个模型
在越来越多的领域中机器学习模型已开始需要更高的标准, 例如模型预测中公司需要对模型产生的任何虚假预测负责。有了这种转变,可以说模型的可解释性已经比预测能力具有更高的优先级。 诸如准确率和R2分数之类的指标已经排在了后面,而能够解释模型预测变得越来越重要。 我们研究了几种方法来解释的模型,并更好地了解它们的工作方式。 在这里,我们将研究SHAP值,这是一种解释来自机器学习模型的预测的有效方法。
deephub
2021/03/10
2.8K0
SHAP值:用博弈论的概念解释一个模型
模型的可解释性:部分依赖图PDP和个体条件期望图ICE
来源:Deephub Imba本文约1800字,建议阅读5分钟本文我们通过一个简单据集的回归示例了解了部分依赖图 (PDP) 和个体条件期望 (ICE) 图是什么,以及如何在 Python 中制作它们。 部分依赖图 (PDP) 和个体条件期望 (ICE) 图可用于可视化和分析训练目标与一组输入特征之间的交互关系。 部分依赖图(Partial Dependence Plot) 部分依赖图显示了目标函数(即我们的机器学习模型)和一组特征之间的依赖关系,并边缘化其他特征的值(也就是补充特征)。它们是通过将模型
数据派THU
2022/04/01
2.5K0
模型的可解释性:部分依赖图PDP和个体条件期望图ICE
机器学习模型可解释性进行到底 —— SHAP值理论(一)
最近在系统性的学习AUTOML一些细节,本篇单纯从实现与解读的角度入手, 因为最近SHAP版本与之前的调用方式有蛮多差异,就从新版本出发,进行解读。
悟乙己
2021/12/07
9.7K0
机器学习模型可解释性进行到底 —— SHAP值理论(一)
点击加载更多

相似问题

在spaCy 3.0中使用spaCy优化NER模型

153

SpaCy加载模型

10

Spacy训练模型

113

使用SHAP解释多标签目标Tensorflow模型

1135

SpaCy:如何获得spacy模型的名称?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文