我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。
Jesse Vig 的文章 A Multiscale Visualization of Attention in the Transformer Model, 2019 認可了 Transformer 模型的有效性,然而,Jesse Vig 解釋說,破解注意力機制具有挑戰性,論文描述了可視化工具 BertViz 的流程,BertViz 可以視覺化注意力頭活動並解釋 Transformer 模型的行為。
以下開始安裝 BertViz 的程式:
!pip install bertviz
from bertviz import head_view, model_view
from transformers import BertTokenizer, BertModel
接著載入預計要研究的模型:
model_version = 'bert-base-uncased'
do_lower_case = True
model = BertModel.from_pretrained(model_version, output_attentions = True)
tokenizer = BertTokenizer.from_pretrained(model_version, do_lower_case = do_lower_case)
再來輸入測試句子:
sentence_a = "A lot of people like animals so they adopt cats"
sentence_b = "A lot of people like animals so they adopt dogs"
inputs = tokenizer.encode_plus(sentence_a, sentence_b, return_tensors = 'pt', add_special_tokens = True)
token_type_ids = inputs['token_type_ids']
input_ids = inputs['input_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)
當中 Token_Type_IDs 就是 Token 對應的句子 ID,值為 0 或 1 (0 表示對應的 Token 屬於第一句,1 表示屬於第二句),形狀為 (Batch_Size, Sequence_Length)。