NLP(一百零四)BERT模型的可解释性

本文将会介绍如何使用shap模块来对BERT文本分类模型做出解释。

在文章NLP(四十一)使用HuggingFace翻译模型的一次尝试中,笔者介绍了如何使用HuggingFace中的翻译模型,并使用shap模块对翻译模型进行解释。

模型的可解释性是深度学习中一个很重要的研究方向。现阶段对机器学习模型、传统的深度学习模型和BERT模型有了一定程度的可解释性,比如使用LIME算法等。但对于大模型的可解释性,目前工作乏善可陈。

本文就BERT文本分类模型进行讨论,探寻其可解释性。

BERT分类模型的可解释性

笔者在文章NLP(六十六)使用HuggingFace中的Trainer进行BERT模型微调中已经介绍了如何使用HuggingFace中的Trainer进行BERT模型微调,并给出了一个微调的BERT中文文本分类模型,其训练数据集为搜狗小样本数据集,输出的类别标签为体育、健康、军事、教育、汽车。

该微调后的文本分类模型的文本最大长度为128,在训练了3个Epoch后,在测试集上的F1值为0.9737,模型的训练细节可参考Github项目PyTorch_Learning/huggingface_learning,网址为: https://github.com/percent4/PyTorch_Learning/tree/master/huggingface_learning .

我们以该文本分类模型为例,演示shap模块如何对BERT系列模型做出可解释性。

shap模块是使用Python开发的一个模型解释包,它使用博弈论中的Shapley值来解释机器学习模型的输出。其名称来源于SHapley Additive exPlanation,在合作博弈论的启发下SHAP构建一个加性的解释模型,所有的特征都视为“贡献者”。对于每个预测样本,模型都产生一个预测值,SHAP value就是该样本中每个特征所分配到的数值。

以下是使用shap模块对微调后的BERT中文文本分类模型做出可解释性的演示:

  • 导入Python模块
1
2
3
4
5
6
7
# import modules
import shap
import transformers

from transformers import (AutoTokenizer,
AutoModelForSequenceClassification,
TextClassificationPipeline)
  • 加载微调模型进行推理
1
2
3
4
5
6
7
# load model and use pipeline to infer
model_name = "/workspace/code/shap_demo/sougou_test_trainer_128/checkpoint-48"

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name).cpu()

pipe = TextClassificationPipeline(model=model, tokenizer=tokenizer, return_all_scores=True)
  • 使用shap模块构建可视化函数
1
2
3
4
5
6
7
8
9
10
# 可视化函数
def score_and_visualize(text):
prediction = pipe([text])
print(prediction[0])

explainer = shap.Explainer(pipe)
shap_values = explainer([text])
print(shap_values)

shap.plots.text(shap_values)
  • 对示例文本做出解释
1
2
text = "北京时间7月16日,美国男篮热身赛,美国男篮98-92险胜澳大利亚,凯文-杜兰特继续缺阵,勒布朗-詹姆斯贡献10分。..."
score_and_visualize(text)

对应的文本及其可视化的解释图如下:

文本1:

北京时间7月16日,美国男篮热身赛,美国男篮98-92险胜澳大利亚,凯文-杜兰特继续缺阵,勒布朗-詹姆斯贡献10分。开场之后,詹姆斯和爱德华兹连中三分率领美国男篮取得两位数的领先,第三节美国一度领先达到20分以上,末节美国男篮失误增加,米尔斯率领澳大利亚将分差追回到个位数,哈利伯顿连中三分稳住局势,布朗中投锁定胜局。全场比赛,詹姆斯出战21分钟,投篮8中3,三分4中2,罚球2中2,得到10分3篮板3助攻。浓眉替补登场18分钟,砍下全队最高的17分14篮板,外加1助攻1抢断1盖帽。库里首发出战21分钟,三分球7中1,得到3分1篮板1助攻。

文本1的可解释图

从上图中可知,模型判断该文本的类别为LABEL_0(对应: 体育),概率为0.990989,其中贡献最大的文本分别为篮板3助(SHAP value为0.025),替补登场(SHAP value为0.023)。

文本2:

据塔斯社7月17日报道,俄罗斯外交部独联体事务二司司长阿列克谢·波利修克告诉塔斯社,美国已授权乌克兰总统泽连斯基对俄领土发动新打击。波利修克指出:“华盛顿仍在给局势升级推波助澜。他们试图为自身罪行狡辩,同时袒护基辅。非但如此,泽连斯基政权还被授予全权,可利用美国武器对俄领土实施新的打击。”他强调,美国“仍沉溺于自身优越地位的幻梦当中”,寄望于让俄罗斯遭受“战略失败”,自己便能“安全地躲在大洋彼岸”。他警告说:“在美国精英阶层中,少有人意识到这种傲慢且低估对手的自欺欺人的风险所在。对美国和全世界来说,其后果或将不可预测。”波利修克强调,对塞瓦斯托波尔的导弹袭击背后,无疑有美国军事专家在提供各类保障服务,“他们利用五角大楼在该地区上空盘旋的无人机进行目标瞄准。(俄方)就此已向美国驻莫斯科大使和美国当局提出最严正的交涉,传递再明确不过的信号:恐怖袭击将招致不可避免的报复。至于克里米亚半岛及当地居民的安全,这属于绝对的优先事项,(俄方)正竭尽全力提供可靠的安全保障”。

文本2的可解释图

从上图中可知,模型判断该文本的类别为LABEL_2(对应: 军事),概率为0.982306,其中贡献最大的文本分别为军事(SHAP value为0.038),导弹(SHAP value为0.03)。

虽然,shap模块提供了文本中每个token对应的Shap Value,但似乎无法获取哪些文本片段贡献最大,这有待于笔者的进一步验证。

综上可知,shap模块可以提供文本分类模型的可解释性,并预测哪些文字对模型做出判断的贡献值最大,这在一定程度上可以为我们提供模型的可解释性,让我们知道哪些文本影响了文本的类别分布。

总结

本文介绍了如何使用shap模块,对微调后的BERT文本分类模型提供可解释性。

但对于大模型的可解释性,道路依然漫长,需要我们进行持续不断的探索。

参考文献

  1. NLP(四十一)使用HuggingFace翻译模型的一次尝试
  2. NLP(六十六)使用HuggingFace中的Trainer进行BERT模型微调
  3. SHAP document: https://shap.readthedocs.io/en/latest/
  4. text_classification_shap.ipynb: https://colab.research.google.com/github/ml6team/quick-tips/blob/main/nlp/2021_04_22_shap_for_huggingface_transformers/explainable_transformers_using_shap.ipynb

NLP(一百零四)BERT模型的可解释性
https://percent4.github.io/NLP(一百零四)BERT模型的可解释性/
作者
Jclian91
发布于
2024年8月1日
许可协议