可解释的人工智能:解读 BERT 模型
扫描二维码
随时随地手机看文章
人工智能的未来在于使人类和机器能够共同解决复杂问题。组织正在尝试通过将人工智能/机器学习技术与人工审核相结合来提高流程效率和透明度。
近年来,随着人工智能的发展,专门针对人工智能的法规也应运而生,例如制药行业的良好机器学习实践 (GMLP) 和金融行业的模型风险管理 (MRM),以及其他涉及数据隐私的广泛法规,如欧盟的 GDPR 和加州的 CCPA。同样,内部合规团队在验证基于模型预测的决策时可能也希望解释模型的行为。例如,承保人希望了解为什么特定的贷款申请被 ML 模型标记为可疑。
概述
什么是可解释性?
在机器学习环境中,可解释性是指尝试追溯哪些因素对机器学习模型做出特定预测有影响。如下图所示,较简单的模型更易于解释,但与深度学习和基于 Transformer 的模型等复杂模型相比,其准确率通常较低,因为后者可以理解数据中的非线性关系,并且准确率通常较高。
宽泛地来说,有两种类型的解释:
· 全局解释: 在整体模型层面进行解释,以了解哪些特征对输出贡献最大?例如,在金融环境中,用例是构建 ML 模型来识别最有可能违约的客户,而做出该决定的一些最有影响力的特征是客户的信用评分、信用卡总数、循环余额等。
· 局部解释:这可以让你放大特定数据点并观察模型在该邻域中的行为。例如,对于电影评论用例的情绪分类,评论中的某些词可能对结果产生比其他词更大的影响。“我从来没有看过这么糟糕的电影。 ”
什么是变压器模型?
Transformer 模型是一种神经网络,它跟踪顺序输入中的关系(例如句子中的单词),以学习上下文和后续含义。Transformer 模型使用一组不断发展的数学方法(称为注意力或自我注意力)来查找一系列等距数据元素之间的细微关系。有关更多信息,请参阅Google 的出版物。
积分梯度
积分梯度 (IG) 是论文《深度网络的公理归因》中介绍的一种可解释 AI技术。本文尝试为每个输入特征分配一个归因值。这说明输入对最终预测的贡献有多大。
IG 是一种局部方法,由于其广泛适用于任何可微分模型(例如文本、图像、结构化数据)、易于实施、相对于替代方法的计算效率高以及理论依据,它是一种流行的可解释性技术。积分梯度表示沿从给定基线到输入的路径对输入的梯度的积分。积分可以用黎曼和或高斯勒让德求积规则来近似。形式上,它可以描述如下:
沿输入 X 的第 i 维积分梯度。Alpha 是缩放系数。这些方程式是从 原始论文中复制而来的。
该方法的基石是两个基本公理,即敏感性和实现不变性。更多信息可以在原始论文中找到。
用例
现在让我们实际看看如何使用Captum包应用积分梯度法。我们将使用HuggingFace的 transformers 库在SQUAD数据集上微调问答BERT(来自 Transformers 的双向编码器表示)模型,请查看笔记本以了解详细的演练。
脚步
· 加载标记器和预先训练的 BERT 模型,在本例中,bert-base-uncased
· 接下来是计算与BertEmbeddings层相关的属性。为此,定义基线/参考并将基线和输入数字化。
ython
1
def construct_whole_bert_embeddings(input_ids, ref_input_ids, \
2
token_type_ids=None, ref_token_type_ids=None, \
3
position_ids=None, ref_position_ids=None):
Python
1
input_embeddings = model.bert.embeddings(input_ids, token_type_ids=token_type_ids, position_ids=position_ids)
Python
1
ref_input_embeddings = model.bert.embeddings(ref_input_ids, token_type_ids=ref_token_type_ids, position_ids=ref_position_ids)
Python
1
return input_embeddings, ref_input_embeddings
· 现在,让我们将问答对定义为 BERT 模型的输入
问题 =“什么对我们来说是重要的?”
text = “对我们来说,包容、赋权和支持各种各样的人非常重要。”
· 为问答对生成相应的基线/参考
· 下一步是进行预测,一种选择是使用LayerIntegratedGradients和计算关于的属性BertEmbedding。LayerIntegratedGradients表示沿着从给定基线的层激活到输入的层激活的直线路径对层输入/输出的梯度的积分。
Python
1
start_scores, end_scores = predict(input_ids, \
2
token_type_ids=token_type_ids, \
3
position_ids=position_ids, \
4
attention_mask=attention_mask)
Python
1
print(‘Question: ‘, question)
2
print(‘Predicted Answer: ‘, ‘ ‘.join(all_tokens[torch.argmax(start_scores) : torch.argmax(end_scores)+1]))
Python
1
lig = LayerIntegratedGradients(squad_pos_forward_func, model.bert.embeddings)
· Output:
Question: What is important to us?
Predicted Answer: to include , em ##power and support humans of all kinds
· 使用辅助函数可视化输入序列中每个单词标记的属性
Python
# storing couple samples in an array for visualization purposes
Python
start_position_vis =
viz.VisualizationDataRecord(
attributions_start_sum,
torch.max(torch.softmax(start_scores[0], dim=0)),
torch.argmax(start_scores),
torch.argmax(start_scores),
str(ground_truth_start_ind),
attributions_start_sum.sum(),
all_tokens,
delta_start)
Python
print(‘\033[1m’, ‘Visualizations For Start Position’, ‘\033[0m’)
viz.visualize_text([start_position_vis])
Python
print(‘\033[1m’, ‘Visualizations For End Position’, ‘\033[0m’)
viz.visualize_text([end_position_vis])
从上面的结果可以看出,对于预测起始位置,我们的模型更侧重于问题方面。更具体地说,侧重于标记“什么”和“重要”。在文本方面,它也稍微侧重于标记序列“对我们来说”。
与此相反,对于预测结束位置,我们的模型更加侧重于文本方面,并且对最后的结束位置标记“种类”具有相对较高的归因。
结论
本文介绍了如何使用可解释的人工智能技术(如积分梯度)通过强调正面和负面的词语对模型结果的影响,使深度学习 NLP 模型变得可解释。