解释人工智能解释伯特模型
扫描二维码
随时随地手机看文章
动机和背景
为什么构建可解释的人工智能模型很重要?
人工智能的未来在于使人类和机器能够共同解决复杂的问题。各组织正试图通过将AI/ML技术与人力审查相结合来提高流程效率和透明度。
近年来,随着人工智能的发展,出现了专门针对人工智能的法规,例如,在制药业和金融业的模型风险管理中出现了良好的机器学习做法,其他涉及数据隐私的广谱法规,欧盟的《电子商务规则》和加利福尼亚的《计算机风险管理法》。同样,内部合规团队在根据模型预测验证决策时也可能希望解释模型的行为。例如,承销商想知道为什么一个特定的贷款申请被一个ML模型标记为可疑。
概述
什么是可解释性?
在ML上下文中,可解释性是指试图追溯哪些因素有助于使用ML模型进行某种预测。作为 展示 在下图中,较简单的模型较容易解释,但与能够理解数据中的非线性关系并往往具有高精度的深入学习和转换器模型等复杂模型相比,其准确性往往较低。
定义松散,有两种解释:
· 全球解释: 是在整体模型层面上解释哪些功能对产出贡献最大?例如,在一个财务环境中,用例是建立一个ML模型来识别最有可能违约的客户,做出这一决定的一些最有影响力的功能是客户的信用评分,总数为否。信用卡、循环余额等。
· 本地解释: 这可以使您放大特定的数据点,并观察模型在该附近的行为。例如,对于电影评论用例的情感分类,评论中的某些词对结果的影响可能高于其他词。""我已经 决不 看了一些东西 很糟糕。 ”
什么是变压器模型?
变压器模型是一个神经网络,它追踪连续输入的关系,如句子中的单词,以学习上下文和随后的意义。变压器模型使用一套不断演变的数学方法,即被称为注意力或自我注意的方法,在一个系列中找到即使是距离数据元素之间的微小关系。指 谷歌的出版物 获取更多信息。
综合梯度
集成梯度是一种 可解释的人工智能 本文介绍的技术 深层网络的公理归属 .本文试图为每个输入特性分配一个属性值。这说明了输入对最终预测的贡献。
因其广泛适用于任何可微模型(例如:可微模型),因而是一种流行的可解释性方法。,文本,图像,结构化数据),容易实现,相对于其他方法的计算效率,理论上的合理性。集成梯度代表从给定基线到输入的路径上输入的梯度的积分。积分可以用黎曼和或高斯理论正交规则近似.其形式如下:
沿输入X的I-TH维度的综合梯度。阿尔法是比例系数。这些方程是从 原件 .
这种方法的基石是两个基本公理,即敏感性和实现不变性。更多信息可在原始文件中找到。
用例
现在让我们来看看如何使用综合梯度法 顶盖 包裹。我们将对答案进行微调 伯特 (由变压器发出的双向编码器表示法) 小队 使用变压器库的数据集 拥抱脸 ,回顾 笔记簿 为了详细的演练。
台阶
· 在这种情况下,装上标志和经过训练的伯特模型,bert-base-uncased
· 接下来是计算属性BertEmbeddings 一层。为此,定义基线/引用并对基线和输入进行数字化。
Python
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
· 现在,让我们把问答对定义为对伯特模型的输入
问题="什么对我们很重要?"
对我们来说,重要的是接纳、授权和支持各种人类。"
· 生成相应的答案对基线/引用
· 下一步是做预测,一个选择是使用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)
· 产出:
问题:什么对我们很重要?
预测答案:包括,em##力量和支持各种人类
· 使用帮助函数在输入序列中对每个单词标记的属性进行可视化
Python
1
# storing couple samples in an array for visualization purposes
Python
1
start_position_vis =
2
viz.VisualizationDataRecord(
3
attributions_start_sum,
4
torch.max(torch.softmax(start_scores[0], dim=0)),
5
torch.argmax(start_scores),
6
torch.argmax(start_scores),
7
str(ground_truth_start_ind),
8
attributions_start_sum.sum(),
9
all_tokens,
10
delta_start)
Python
1
print(‘\033[1m’, ‘Visualizations For Start Position’, ‘\033[0m’)
2
viz.visualize_text([start_position_vis])
Python
1
print(‘\033[1m’, ‘Visualizations For End Position’, ‘\033[0m’)
2
viz.visualize_text([end_position_vis])
从上面的结果可以看出,对于预测起点位置,我们的模型更多地侧重于问题方面。更具体地说,在"什么"和"重要"上。它还稍微侧重于文本方面"给我们"的标记序列。
与此相反,为了预测端点位置,我们的模型更侧重于文本方面,并且在最后端点标记"种类"上有相对较高的归属。
结论
这个文章描述了如何使用集成梯度等可解释的人工智能技术,通过突出正面和负面的词汇对模型结果的影响,使深入学习的NLP模型可以被解释。