Bertviz adalah alat interaktif untuk memvisualisasikan perhatian dalam model bahasa transformator seperti Bert, GPT2, atau T5. Ini dapat dijalankan di dalam notebook Jupyter atau Colab melalui API Python sederhana yang mendukung sebagian besar model Huggingface. Bertviz memperluas alat visualisasi Tensor2Tensor oleh Llion Jones, memberikan banyak pandangan yang masing -masing menawarkan lensa unik ke dalam mekanisme perhatian.
Dapatkan pembaruan untuk ini dan proyek terkait di Twitter.
Tampilan kepala memvisualisasikan perhatian untuk satu atau lebih perhatian kepala di lapisan yang sama. Ini didasarkan pada alat visualisasi Tensor2Tensor yang sangat baik oleh Llion Jones.
? Cobalah tampilan kepala dalam tutorial Colab interaktif (semua visualisasi yang sudah dimuat sebelumnya).
Tampilan model menunjukkan pandangan mata burung tentang semua lapisan dan kepala.
? Cobalah tampilan model dalam tutorial Colab interaktif (semua visualisasi pra-muatan).

Tampilan neuron memvisualisasikan neuron individu dalam kueri dan vektor kunci dan menunjukkan bagaimana mereka digunakan untuk menghitung perhatian.
? Cobalah tampilan neuron dalam tutorial Colab interaktif (semua visualisasi pra-muatan).

Dari baris perintah:
pip install bertvizAnda juga harus menginstal Jupyter Notebook dan Ipywidgets:
pip install jupyterlab
pip install ipywidgets(Jika Anda mengalami masalah apa pun yang menginstal Jupyter atau Ipywidgets, konsultasikan dengan dokumentasi di sini dan di sini.)
Untuk membuat buku catatan Jupyter baru, cukup jalankan:
jupyter notebook Kemudian klik New dan pilih Python 3 (ipykernel) jika diminta.
Untuk berjalan di Colab, cukup tambahkan sel berikut di awal buku catatan Colab Anda:
!pip install bertviz
Jalankan kode berikut untuk memuat model xtremedistil-l12-h384-uncased dan tampilkan dalam tampilan model:
from transformers import AutoTokenizer , AutoModel , utils
from bertviz import model_view
utils . logging . set_verbosity_error () # Suppress standard warnings
model_name = "microsoft/xtremedistil-l12-h384-uncased" # Find popular HuggingFace models here: https://huggingface.co/models
input_text = "The cat sat on the mat"
model = AutoModel . from_pretrained ( model_name , output_attentions = True ) # Configure model to return attention values
tokenizer = AutoTokenizer . from_pretrained ( model_name )
inputs = tokenizer . encode ( input_text , return_tensors = 'pt' ) # Tokenize input text
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
model_view ( attention , tokens ) # Display model viewVisualisasi mungkin membutuhkan beberapa detik untuk dimuat. Jangan ragu untuk bereksperimen dengan teks dan model input yang berbeda. Lihat dokumentasi untuk kasus dan contoh penggunaan tambahan, misalnya, model encoder-decoder.
Anda juga dapat menjalankan salah satu buku catatan sampel yang disertakan dengan Bertviz:
git clone --depth 1 [email protected]:jessevig/bertviz.git
cd bertviz/notebooks
jupyter notebookLihatlah tutorial Colab interaktif untuk mempelajari lebih lanjut tentang Bertviz dan coba alatnya. Catatan : Semua visualisasi sudah dimuat sebelumnya, jadi tidak perlu menjalankan sel apa pun.

Muat pertama model huggingface, baik model pra-terlatih seperti yang ditunjukkan di bawah ini, atau model fine-tuned Anda sendiri. Pastikan untuk mengatur output_attentions=True .
from transformers import AutoTokenizer , AutoModel , utils
utils . logging . set_verbosity_error () # Suppress standard warnings
tokenizer = AutoTokenizer . from_pretrained ( "bert-base-uncased" )
model = AutoModel . from_pretrained ( "bert-base-uncased" , output_attentions = True )Kemudian siapkan input dan hitung perhatian:
inputs = tokenizer . encode ( "The cat sat on the mat" , return_tensors = 'pt' )
outputs = model ( inputs )
attention = outputs [ - 1 ] # Output includes attention weights when output_attentions=True
tokens = tokenizer . convert_ids_to_tokens ( inputs [ 0 ]) Akhirnya, tampilkan bobot perhatian menggunakan fungsi head_view atau model_view :
from bertviz import head_view
head_view ( attention , tokens )Contoh : Distilbert (Model View Notebook, Head View Notebook)
Untuk API lengkap, silakan merujuk ke kode sumber untuk tampilan kepala atau tampilan model.
Tampilan neuron dipanggil secara berbeda dari tampilan kepala atau tampilan model, karena membutuhkan akses ke vektor kueri/kunci model, yang tidak dikembalikan melalui API huggingface. Saat ini terbatas pada versi khusus Bert, GPT-2, dan Roberta termasuk dengan Bertviz.
# Import specialized versions of models (that return query/key vectors)
from bertviz . transformers_neuron_view import BertModel , BertTokenizer
from bertviz . neuron_view import show
model_type = 'bert'
model_version = 'bert-base-uncased'
do_lower_case = True
sentence_a = "The cat sat on the mat"
sentence_b = "The cat lay on the rug"
model = BertModel . from_pretrained ( model_version , output_attentions = True )
tokenizer = BertTokenizer . from_pretrained ( model_version , do_lower_case = do_lower_case )
show ( model , model_type , tokenizer , sentence_a , sentence_b , layer = 2 , head = 0 )Contoh : Bert (notebook, colab) • GPT-2 (notebook, colab) • Roberta (notebook)
Untuk API lengkap, silakan merujuk ke sumbernya.
Tampilan kepala dan model tampilan kedua model dukungan encoder-decoder.
Pertama, muat model encoder-decoder:
from transformers import AutoTokenizer , AutoModel
tokenizer = AutoTokenizer . from_pretrained ( "Helsinki-NLP/opus-mt-en-de" )
model = AutoModel . from_pretrained ( "Helsinki-NLP/opus-mt-en-de" , output_attentions = True )Kemudian siapkan input dan hitung perhatian:
encoder_input_ids = tokenizer ( "She sees the small elephant." , return_tensors = "pt" , add_special_tokens = True ). input_ids
with tokenizer . as_target_tokenizer ():
decoder_input_ids = tokenizer ( "Sie sieht den kleinen Elefanten." , return_tensors = "pt" , add_special_tokens = True ). input_ids
outputs = model ( input_ids = encoder_input_ids , decoder_input_ids = decoder_input_ids )
encoder_text = tokenizer . convert_ids_to_tokens ( encoder_input_ids [ 0 ])
decoder_text = tokenizer . convert_ids_to_tokens ( decoder_input_ids [ 0 ]) Akhirnya, tampilkan visualisasi menggunakan head_view atau model_view .
from bertviz import model_view
model_view (
encoder_attention = outputs . encoder_attentions ,
decoder_attention = outputs . decoder_attentions ,
cross_attention = outputs . cross_attentions ,
encoder_tokens = encoder_text ,
decoder_tokens = decoder_text
) Anda dapat memilih Encoder , Decoder , atau perhatian Cross dari drop-down di sudut kiri atas visualisasi.
Contoh : Marianmt (notebook) • BART (notebook)
Untuk API lengkap, silakan merujuk ke kode sumber untuk tampilan kepala atau tampilan model.
git clone https://github.com/jessevig/bertviz.git
cd bertviz
python setup.py develop Tampilan model dan penampilan neuron mendukung mode gelap (default) dan cahaya. Anda dapat mengatur mode menggunakan parameter display_mode :
model_view ( attention , tokens , display_mode = "light" ) Untuk meningkatkan respons alat saat memvisualisasikan model atau input yang lebih besar, Anda dapat mengatur parameter include_layers untuk membatasi visualisasi ke subset lapisan (nol-indeks). Opsi ini tersedia di tampilan kepala dan model.
Contoh: Tampilan model render dengan hanya lapisan 5 dan 6 ditampilkan
model_view ( attention , tokens , include_layers = [ 5 , 6 ]) Untuk tampilan model, Anda juga dapat membatasi visualisasi ke subset kepala perhatian (nol-indeks) dengan mengatur parameter include_heads .
Dalam tampilan kepala, Anda dapat memilih layer dan kumpulan heads tertentu sebagai pilihan default ketika visualisasi pertama kali diterjemahkan. CATATAN: Ini berbeda dari parameter include_heads / include_layers (di atas), yang menghilangkan lapisan dan kepala dari visualisasi sepenuhnya.
Contoh: Render tampilan kepala dengan lapisan 2 dan kepala 3 dan 5 dipilih sebelumnya
head_view ( attention , tokens , layer = 2 , heads = [ 3 , 5 ]) Anda juga dapat memilih layer tertentu dan head tunggal untuk tampilan neuron.
Beberapa model, misalnya Bert, menerima sepasang kalimat sebagai input. Bertviz secara opsional mendukung menu drop-down yang memungkinkan pengguna untuk memfilter perhatian berdasarkan pada kalimat mana token masuk, misalnya hanya menunjukkan perhatian antara token dalam kalimat pertama dan token dalam kalimat kedua.
Untuk mengaktifkan fitur ini saat memohon fungsi head_view atau model_view , atur parameter sentence_b_start ke indeks start dari kalimat kedua. Perhatikan bahwa metode untuk menghitung indeks ini akan tergantung pada model.
Contoh (Bert):
from bertviz import head_view
from transformers import AutoTokenizer , AutoModel , utils
utils . logging . set_verbosity_error () # Suppress standard warnings
# NOTE: This code is model-specific
model_version = 'bert-base-uncased'
model = AutoModel . from_pretrained ( model_version , output_attentions = True )
tokenizer = AutoTokenizer . from_pretrained ( model_version )
sentence_a = "the rabbit quickly hopped"
sentence_b = "The turtle slowly crawled"
inputs = tokenizer . encode_plus ( sentence_a , sentence_b , return_tensors = 'pt' )
input_ids = inputs [ 'input_ids' ]
token_type_ids = inputs [ 'token_type_ids' ] # token type id is 0 for Sentence A and 1 for Sentence B
attention = model ( input_ids , token_type_ids = token_type_ids )[ - 1 ]
sentence_b_start = token_type_ids [ 0 ]. tolist (). index ( 1 ) # Sentence B starts at first index of token type id 1
token_ids = input_ids [ 0 ]. tolist () # Batch index 0
tokens = tokenizer . convert_ids_to_tokens ( token_ids )
head_view ( attention , tokens , sentence_b_start ) Untuk mengaktifkan opsi ini dalam tampilan neuron, cukup atur parameter sentence_a dan sentence_b di neuron_view.show() .
Dukungan untuk mengambil representasi HTML yang dihasilkan telah ditambahkan ke head_view, model_view dan neuron_view.
Mengatur parameter 'html_action' ke 'return' akan membuat panggilan fungsi mengembalikan objek python html tunggal yang dapat diproses lebih lanjut. Ingat Anda dapat mengakses sumber HTML menggunakan atribut data dari objek HTML Python.
Perilaku default untuk 'html_action' adalah 'view', yang akan menampilkan visualisasi tetapi tidak akan mengembalikan objek HTML.
Fungsionalitas ini berguna jika Anda perlu:
Contoh (Tampilan Kepala dan Model):
from transformers import AutoTokenizer , AutoModel , utils
from bertviz import head_view
utils . logging . set_verbosity_error () # Suppress standard warnings
tokenizer = AutoTokenizer . from_pretrained ( "bert-base-uncased" )
model = AutoModel . from_pretrained ( "bert-base-uncased" , output_attentions = True )
inputs = tokenizer . encode ( "The cat sat on the mat" , return_tensors = 'pt' )
outputs = model ( inputs )
attention = outputs [ - 1 ] # Output includes attention weights when output_attentions=True
tokens = tokenizer . convert_ids_to_tokens ( inputs [ 0 ])
html_head_view = head_view ( attention , tokens , html_action = 'return' )
with open ( "PATH_TO_YOUR_FILE/head_view.html" , 'w' ) as file :
file . write ( html_head_view . data )Contoh (Tampilan Neuron):
# Import specialized versions of models (that return query/key vectors)
from bertviz . transformers_neuron_view import BertModel , BertTokenizer
from bertviz . neuron_view import show
model_type = 'bert'
model_version = 'bert-base-uncased'
do_lower_case = True
sentence_a = "The cat sat on the mat"
sentence_b = "The cat lay on the rug"
model = BertModel . from_pretrained ( model_version , output_attentions = True )
tokenizer = BertTokenizer . from_pretrained ( model_version , do_lower_case = do_lower_case )
html_neuron_view = show ( model , model_type , tokenizer , sentence_a , sentence_b , layer = 2 , head = 0 , html_action = 'return' )
with open ( "PATH_TO_YOUR_FILE/neuron_view.html" , 'w' ) as file :
file . write ( html_neuron_view . data ) Tampilan kepala dan tampilan model dapat digunakan untuk memvisualisasikan perhatian diri untuk model transformator standar apa pun, selama bobot perhatian tersedia dan mengikuti format yang ditentukan dalam head_view dan model_view (yang merupakan format yang dikembalikan dari model huggingface). Dalam beberapa kasus, pos pemeriksaan TensorFlow dapat dimuat sebagai model Huggingface seperti yang dijelaskan dalam dokumen Huggingface.
include_layers , seperti dijelaskan di atas.include_layers , seperti dijelaskan di atas.transformers_neuron_view ), yang hanya dilakukan untuk ketiga model ini. Visualisasi perhatian multiskala dalam model transformator (Demonstrasi Sistem ACL 2019).
@inproceedings { vig-2019-multiscale ,
title = " A Multiscale Visualization of Attention in the Transformer Model " ,
author = " Vig, Jesse " ,
booktitle = " Proceedings of the 57th Annual Meeting of the Association for Computational Linguistics: System Demonstrations " ,
month = jul,
year = " 2019 " ,
address = " Florence, Italy " ,
publisher = " Association for Computational Linguistics " ,
url = " https://www.aclweb.org/anthology/P19-3007 " ,
doi = " 10.18653/v1/P19-3007 " ,
pages = " 37--42 " ,
}Jesse Vig
Kami berterima kasih kepada penulis dari proyek -proyek berikut, yang dimasukkan ke dalam repo ini:
Proyek ini dilisensikan di bawah lisensi Apache 2.0 - lihat file lisensi untuk detailnya