首页 > 其他分享 >如何可视化bert的注意力权重

如何可视化bert的注意力权重

时间:2022-12-17 17:56:27浏览次数:49  
标签:bert attention tokens html 可视化 model 注意力 view

参考链接:

代码(保存成html)

from transformers import AutoTokenizer, AutoModel, utils
from bertviz import model_view, head_view
utils.logging.set_verbosity_error()  # Suppress standard warnings
model_name='/downloads/bert-base-chinese'
input_text = item['title']+item['key_word']
tokenizer = AutoTokenizer.from_pretrained('/downloads/bert-base-chinese')
tokenizer.add_special_tokens({ "additional_special_tokens": [ "[unused1]", "[unused2]", "[unused3]"] })
model = AutoModel.from_pretrained(model_name, output_attentions=True)  # Configure model to return attention values
inputs = tokenizer.encode(input_text, return_tensors='pt')  # Tokenize input text
print('inputs:', inputs)
outputs = model(inputs)  # Run model
attention = outputs[-1]  # Retrieve attention from model outputs
tokens = tokenizer.convert_ids_to_tokens(inputs[0])  # Convert input ids to token strings
print('tokens:', tokens)
# print('attention:',attention)
# model_view(attention, tokens)  # Display model view
html_head_view = head_view(attention, tokens, html_action='return')

with open("views/bert.html", 'w') as file:
    file.write(html_head_view.data)

基本用法:

红色是bert中的12层,绿色是每层的12个头,可以单击进行选择,双击进行过滤。 鼠标放到左边的某个词上,线条显示的意思是,在更新这个词emb的过程中,右边不同词的注意力权重,即重要程度。线越深越重要。 鼠标放到右边的某个词上,线条的表示的意思是,这个词都被左边哪些词关注到了,线越深代表被关注的越强。

标签:bert,attention,tokens,html,可视化,model,注意力,view
From: https://www.cnblogs.com/carolsun/p/16989265.html

相关文章