打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
BERT模型可视化分析总结:BertVi注意力分布与dodrio句法语义分析使用实录

BERT可解释分析是一项十分有趣的工作,而借助可视化工具进行辅助分析更是一条有效路径。

本文主要介绍目前以注意力为核心的可解释可视化工具,包括 BertViz交互式可视化工具以及dodrio注意力可视化分析工具两种,前者聚焦于词之间的注意力分布,包括词间,句子间,后者则引入依存句法和语义显著性进行分析,具有较高的参考价值。

本文通过对实际的使用进行总结,供大家参考。

一、BertViz交互式可视化工具

BertViz 是一种交互式工具,用于在Transformer语言模型(如 BERT、GPT2 或 T5)中可视化注意力网络。它可以通过支持大多数Huggingface 模型,可以简单地通过 Python API 在 Jupyter 或 Colab 笔记本中运行。

BertViz 扩展了 Llion Jones的Tensor2Tensor 可视化工具,添加了多个视图,每个视图都为注意力机制提供了独特的视角。

bertviz可视化页面分别包括bertviz_detail.ipynb、bertviz_map.ipynb 、bertviz_summary.ipynb页面。

1、安装

pip install bertviz

2、运行方式


from bertviz import head_view, model_view
from transformers import BertTokenizer, BertModel

model_version = 'bert-base-uncased'
model = BertModel.from_pretrained(model_version, output_attentions=True)
tokenizer = BertTokenizer.from_pretrained(model_version)
sentence_a = 'nlp is not a good task'
sentence_b = 'tell me the reason you left me'
inputs = tokenizer.encode_plus(sentence_a, sentence_b, return_tensors='pt')
input_ids = inputs['input_ids']
token_type_ids = inputs['token_type_ids']
attention = model(input_ids, token_type_ids=token_type_ids)[-1]
sentence_b_start = token_type_ids[0].tolist().index(1)
input_id_list = input_ids[0].tolist() # Batch index 0
tokens = tokenizer.convert_ids_to_tokens(input_id_list) 

3、展示头注意力分布

头部视图从单个变形金刚层可视化一个或多个头部的注意力。每行显示从一个令牌(左)到另一个令牌(右)的注意力。线条重量反映了注意力值(范围从0到1),而线条颜色标识注意力头

head_view(attention, tokens, sentence_b_start)

4、分层展示注意力分布

模型视图在整个模型中提供了鸟瞰图。每个单元格显示特定头部的注意力权重,按图层(行)和头部(列)索引。每个单元格中的行代表从一个令牌(左)到另一个令牌(右)的注意力,行重与注意值成正比(范围从0到1)。

model_view(attention, tokens, sentence_b_start)

5、神经元视图注意力分布

神经元视图可视化用于计算注意力的中间表示(例如查询和键向量)。在折叠视图(初始状态)中,线条显示从每个令牌(左)到其他令牌(右)的注意力。在扩展视图中,该工具跟踪产生这些注意力权重的计算链。

from bertviz.transformers_neuron_view import BertModel, BertTokenizer
from bertviz.neuron_view import show

model_type = 'bert'
model_version = 'bert-base-uncased'
model = BertModel.from_pretrained(model_version, output_attentions=True)
tokenizer = BertTokenizer.from_pretrained(model_version, do_lower_case=True)
show(model, model_type, tokenizer, sentence_a, sentence_b, layer=4, head=3)

地址:https://github.com/jessevig/bertviz

二、DODRIO句法语义可视化分析工具

DODRIO是乔治亚理工提出的一种可交互的Attention可视化工具,从句法和寓意层面总结了不同注意力头的信息。

基于该工具,可以验证一些之前BERT可解释性文章的结论,BERT的中间层更关注句法信息,以及BERT最后1-2层是分类的关键等。

1、安装

git clone git@github.com:poloclub/dodrio.git

degit poloclub/dodrio

2、可视化分析

给定一个句子:

it is depressing , ruthlessly pained and depraved , the movie equivalent of staring into an open wound .

经过BERT分词后,可以得到token序列以及对应的依存句法分析结果。

1)句法分析Semantic Attention Graph

注意力权重可以被看作是模型对词之间依赖关系的预测。切换到句法依赖的可视化之后,鼠标移动到每个token都会高亮跟这个词有关的注意力连接。在展开的依赖关系图上还可以看到指定的关系在不同层的权重会如何变化。

通过对比模型捕捉到的句法依存重要性排序,与依存句法分析结果,可以发现BERT模型对句法和语义的刻画,如图中的movie和depressing两词。

2)语义分析显著性得分

点击每个概览中的注意力头即可展开在这个位置的注意力表示。颜色依然表示的是每个token的显著性得分。

在图中,我们可以看到不同层的不同注意力头都化身成了大小,深浅不一的圆点,包括三种:

1)语义得分:它是从注意力向量和显著性得分的cosine相似度得到,圆点颜色越红,表示这个注意力头对语义的贡献越大。

2)是句法得分n: 我们使用最被关注的源token作为依赖关系预测的目标,对于每个依赖关系,我们计算每个注意力头在所有样例上的平均准确性。最后,将每个头所有依赖关系中的最大值作为他的句法得分。圆点颜色越蓝,表示这个注意力头对句法的贡献越大。

3)重要性得分c,直接计算当前头的最大注意力权重在所有样例上的平均,圆点颜色越大表示注意力头对最终预测的贡献越高。

地址:https://poloclub.github.io/dodrio/

参考文献

1、https://www.yanxishe.com/blogDetail/26915

2、https://poloclub.github.io/dodrio/

3、https://github.com/jessevig/bertviz

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
可交互的 Attention 可视化工具!我的Transformer可解释性有救了?
Multi-Head-Attention的作用
【NLP】 深入浅出解析BERT原理及其表征的内容
论文解读:Bert原理深入浅出
BERT的通俗理解 预训练模型 微调
BEIT:基于图像重建进行预训练!微软提出BEIT,Top-1准确率达86.3%!代码已开源!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服