1. Pengantar
Produk AI generatif relatif baru dan perilaku aplikasi dapat bervariasi lebih banyak daripada bentuk software sebelumnya. Oleh karena itu, penting untuk menyelidiki model machine learning yang digunakan, memeriksa contoh perilaku model, dan menyelidiki kejutan.
Learning Interpretability Tool (LIT; situs, GitHub) adalah platform untuk men-debug dan menganalisis model ML guna memahami alasan dan cara model tersebut berperilaku.
Dalam codelab ini, Anda akan mempelajari cara menggunakan LIT untuk mendapatkan hasil maksimal dari model Gemma Google. Codelab ini menunjukkan cara menggunakan keterlihatan urutan, teknik interpretabilitas, untuk menganalisis berbagai pendekatan rekayasa perintah.
Tujuan pembelajaran:
- Memahami keterlihatan urutan dan penggunaannya dalam analisis model.
- Menyiapkan LIT untuk Gemma guna menghitung output perintah dan keterlihatan urutan.
- Menggunakan keterlihatan urutan melalui modul LM Salience untuk memahami dampak desain perintah pada output model.
- Menguji peningkatan perintah yang dihipotesiskan di LIT dan melihat dampaknya.
Catatan: codelab ini menggunakan implementasi KerasNLP Gemma, dan TensorFlow v2 untuk backend. Sebaiknya gunakan kernel GPU untuk mengikutinya.
2. Sequence Salience dan Penggunaannya dalam Analisis Model
Model generatif teks-ke-teks, seperti Gemma, menggunakan urutan input dalam bentuk teks yang ditokenisasi dan menghasilkan token baru yang merupakan kelanjutan atau penyelesaian umum untuk input tersebut. Pembuatan ini terjadi satu token pada satu waktu, dengan menambahkan (dalam loop) setiap token yang baru dibuat ke input ditambah generasi sebelumnya hingga model mencapai kondisi penghentian. Contohnya termasuk saat model menghasilkan token akhir urutan (EOS) atau mencapai panjang maksimum yang telah ditentukan.
Metode keterlihatan adalah class teknik Explainable AI (XAI) yang dapat memberi tahu Anda bagian input mana yang penting bagi model untuk berbagai bagian outputnya. LIT mendukung metode keterlihatan untuk berbagai tugas klasifikasi, yang menjelaskan dampak urutan token input pada label yang diprediksi. Keterlihatan urutan memgeneralisasi metode ini ke model generatif teks-ke-teks dan menjelaskan dampak token sebelumnya terhadap token yang dihasilkan.
Anda akan menggunakan metode Grad L2 Norm di sini untuk keterlihatan urutan, yang menganalisis gradien model dan memberikan besarnya pengaruh yang dimiliki setiap token sebelumnya terhadap output. Metode ini sederhana dan efisien, serta telah terbukti berperforma baik dalam klasifikasi dan setelan lainnya. Makin besar skor keterlihatan, makin tinggi pengaruhnya. Metode ini digunakan dalam LIT karena dipahami dengan baik dan digunakan secara luas di seluruh komunitas riset interpretabilitas.
Metode salience berbasis gradien yang lebih canggih mencakup Grad ⋅ Input dan integrated gradients. Ada juga metode berbasis ablasi yang tersedia, seperti LIME dan SHAP, yang dapat lebih andal, tetapi secara signifikan lebih mahal untuk dihitung. Baca artikel ini untuk mengetahui perbandingan mendetail tentang berbagai metode keterlihatan.
Anda dapat mempelajari lebih lanjut metode ilmu keterlihatan di pengantar interaktif yang dapat dijelajahi tentang keterlihatan.
3. Kode Impor, Lingkungan, dan Penyiapan Lainnya
Sebaiknya ikuti codelab ini di Colab baru. Sebaiknya gunakan runtime akselerator, karena Anda akan memuat model ke dalam memori, meskipun perlu diketahui bahwa opsi akselerator bervariasi dari waktu ke waktu dan tunduk pada batasan. Colab menawarkan langganan berbayar jika Anda ingin mengakses akselerator yang lebih canggih. Atau, Anda dapat menggunakan runtime lokal jika mesin Anda memiliki GPU yang sesuai.
Catatan: Anda mungkin melihat beberapa peringatan dalam bentuk
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. bigframes 0.21.0 requires scikit-learn>=1.2.2, but you have scikit-learn 1.0.2 which is incompatible. google-colab 1.0.0 requires ipython==7.34.0, but you have ipython 8.14.0 which is incompatible.
Pesan ini aman untuk diabaikan.
Menginstal LIT dan Keras NLP
Untuk codelab ini, Anda memerlukan versi terbaru keras
(3) keras-nlp
(0.14.) dan lit-nlp
(1.2), serta akun Kaggle untuk mendownload model dasar.
pip install -q -U 'keras >= 3.0' 'keras-nlp >= 0.14' 'lit-nlp >= 1.2'
Akses Kaggle
Untuk melakukan autentikasi dengan Kaggle, Anda dapat:
- Simpan kredensial Anda dalam file, seperti
~/.kaggle/kaggle.json
; - Gunakan variabel lingkungan
KAGGLE_USERNAME
danKAGGLE_KEY
; atau - Jalankan kode berikut di lingkungan Python interaktif, seperti Google Colab.
import kagglehub
kagglehub.login()
Lihat dokumentasi kagglehub
untuk mengetahui detail selengkapnya, dan pastikan untuk menyetujui perjanjian lisensi Gemma.
Mengonfigurasi Keras
Keras 3 mendukung beberapa backend deep learning, termasuk Tensorflow (default), PyTorch, dan JAX. Backend dikonfigurasi menggunakan variabel lingkungan KERAS_BACKEND
, yang harus ditetapkan sebelum mengimpor library Keras. Cuplikan kode berikut menunjukkan cara menetapkan variabel ini di lingkungan Python interaktif.
import os
os.environ["KERAS_BACKEND"] = "tensorflow" # or "jax" or "torch"
4. Menyiapkan LIT
LIT dapat digunakan di Notebook Python atau melalui server web. Codelab ini berfokus pada kasus penggunaan Notebook. Sebaiknya ikuti di Google Colab.
Dalam Codelab ini, Anda akan memuat Gemma v2 2B IT menggunakan preset KerasNLP. Cuplikan berikut menginisialisasi Gemma dan memuat contoh set data di widget LIT Notebook.
from lit_nlp.examples.prompt_debugging import notebook as lit_pdbnb
lit_widget = lit_pdbnb.make_notebook_widget(
['sample_prompts'],
["gemma2_2b_it:gemma2_instruct_2b_en"],
)
Anda dapat mengonfigurasi widget dengan mengubah dua nilai yang diteruskan ke dua argumen posisi yang diperlukan:
datasets_config
: Daftar string yang berisi nama set data dan jalur untuk dimuat, seperti "dataset:path", dengan jalur dapat berupa URL atau jalur file lokal. Contoh di bawah menggunakan nilai khusus,sample_prompts
, untuk memuat contoh perintah yang diberikan dalam distribusi LIT.models_config
: Daftar string yang berisi nama model dan jalur untuk dimuat, seperti "model:path", dengan jalur dapat berupa URL, jalur file lokal, atau nama preset untuk framework deep learning yang dikonfigurasi.
Setelah LIT dikonfigurasi untuk menggunakan model yang Anda minati, jalankan cuplikan kode berikut untuk merender widget di Notebook Anda.
lit_widget.render(open_in_new_tab=True)
Menggunakan Data Anda Sendiri
Sebagai model generatif teks-ke-teks, Gemma menggunakan input teks dan menghasilkan output teks. LIT menggunakan API yang memiliki pendapat untuk menyampaikan struktur set data yang dimuat ke model model. LLM di LIT dirancang untuk digunakan dengan set data yang menyediakan dua kolom:
prompt
: Input ke model tempat teks akan dibuat; dantarget
: Urutan target opsional, seperti respons "kebenaran dasar" dari penilai manusia atau respons yang dibuat sebelumnya dari model lain.
LIT menyertakan sekumpulan kecil sample_prompts
dengan contoh dari sumber berikut yang mendukung Codelab ini dan tutorial proses debug perintah LIT yang diperluas.
- GSM8K: Menyelesaikan soal matematika sekolah dasar dengan contoh few-shot.
- Gigaword Benchmark: Pembuatan judul untuk kumpulan artikel singkat.
- Perintah Konstitusional: Menghasilkan ide baru tentang cara menggunakan objek dengan panduan/batas.
Anda juga dapat dengan mudah memuat data Anda sendiri, baik sebagai file .jsonl
yang berisi data dengan kolom prompt
dan secara opsional target
(contoh), atau dari format apa pun menggunakan Dataset API LIT.
Jalankan sel di bawah untuk memuat contoh perintah.
5. Menganalisis Perintah Few Shot untuk Gemma di LIT
Saat ini, perintah adalah seni sekaligus ilmu, dan LIT dapat membantu Anda meningkatkan perintah secara empiris untuk model bahasa besar, seperti Gemma. Berikutnya, Anda akan melihat contoh cara LIT dapat digunakan untuk mempelajari perilaku Gemma, mengantisipasi potensi masalah, dan meningkatkan keamanannya.
Mengidentifikasi error dalam perintah yang kompleks
Dua teknik perintah yang paling penting untuk prototipe dan aplikasi berbasis LLM berkualitas tinggi adalah perintah singkat (termasuk contoh perilaku yang diinginkan dalam perintah) dan rantai pemikiran (termasuk bentuk penjelasan atau penalaran sebelum output akhir LLM). Namun, membuat perintah yang efektif sering kali masih menjadi tantangan.
Pertimbangkan contoh membantu seseorang menilai apakah mereka akan menyukai makanan berdasarkan selera mereka. Template perintah chain-of-thought prototipe awal mungkin terlihat seperti ini:
def analyze_menu_item_template(food_likes, food_dislikes, menu_item):
return f"""Analyze a menu item in a restaurant.
## For example:
Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: You have to try it.
Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Baguette maison au levain
Analysis: Home-made leaven bread in france is usually great
Recommendation: Likely good.
Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Macaron in france
Analysis: Sweet with many kinds of flavours
Recommendation: You have to try it.
## Now analyze one more example:
Taste-likes: {food_likes}
Taste-dislikes: {food_dislikes}
Suggestion: {menu_item}
Analysis:"""
Apakah Anda melihat masalah pada perintah ini? LIT akan membantu Anda memeriksa perintah dengan modul LM Salience.
6. Menggunakan keterlihatan urutan untuk proses debug
Keterlihatan dihitung pada tingkat sekecil mungkin (yaitu, untuk setiap token input), tetapi LIT dapat menggabungkan keterlihatan token ke dalam rentang yang lebih besar dan lebih mudah ditafsirkan, seperti baris, kalimat, atau kata. Pelajari lebih lanjut keterlihatan dan cara menggunakannya untuk mengidentifikasi bias yang tidak disengaja di Saliency Explorable kami.
Mari kita mulai dengan memberikan contoh input baru untuk variabel template perintah:
food_likes = """Cheese"""
food_dislikes = """Can't eat eggs"""
menu_item = """Quiche Lorraine"""
prompt = analyze_menu_item_template(food_likes, food_dislikes, menu_item)
print(prompt)
fewshot_mistake_example = {'prompt': prompt} # you'll use this below
Analyze a menu item in a restaurant. ## For example: Taste-likes: I've a sweet-tooth Taste-dislikes: Don't like onions or garlic Suggestion: Onion soup Analysis: it has cooked onions in it, which you don't like. Recommendation: You have to try it. Taste-likes: I've a sweet-tooth Taste-dislikes: Don't like onions or garlic Suggestion: Baguette maison au levain Analysis: Home-made leaven bread in france is usually great Recommendation: Likely good. Taste-likes: I've a sweet-tooth Taste-dislikes: Don't like onions or garlic Suggestion: Macaron in france Analysis: Sweet with many kinds of flavours Recommendation: You have to try it. ## Now analyze one more example: Taste-likes: Cheese Taste-dislikes: Can't eat eggs Suggestion: Quiche Lorraine Analysis:
Jika UI LIT dibuka di sel di atas atau di tab terpisah, Anda dapat menggunakan Datapoint Editor LIT untuk menambahkan perintah ini:
Cara lainnya adalah merender ulang widget secara langsung dengan perintah yang diinginkan:
lit_widget.render(data=[fewshot_mistake_example])
Perhatikan penyelesaian model yang mengejutkan:
Taste-likes: Cheese Taste-dislikes: Can't eat eggs Suggestion: Quiche Lorraine Analysis: A savoury tart with cheese and eggs Recommendation: You might not like it, but it's worth trying.
Mengapa model menyarankan Anda untuk makan sesuatu yang jelas-jelas Anda katakan tidak dapat dimakan?
Kejelasan urutan dapat membantu menyoroti akar masalah, yang ada dalam contoh few-shot kita. Pada contoh pertama, alasan rantai pemikiran di bagian analisis it has cooked onions in it, which you don't like
tidak cocok dengan rekomendasi akhir You have to try it
.
Di modul LM Salience, pilih "Sentences", lalu pilih baris rekomendasi. UI sekarang akan terlihat seperti berikut:
Hal ini menunjukkan kesalahan manusia: penyalinan dan penempelan bagian rekomendasi secara tidak sengaja dan kegagalan untuk memperbaruinya.
Sekarang, mari kita perbaiki "Rekomendasi" dalam contoh pertama menjadi Avoid
, lalu coba lagi. LIT telah memuat contoh ini di perintah contoh, sehingga Anda dapat menggunakan fungsi utilitas kecil ini untuk mengambilnya:
def get_fewshot_example(source: str) -> str:
for example in datasets['sample_prompts'].examples:
if example['source'] == source:
return example['prompt']
raise ValueError(f'Source "{source}" not found in the dataset.')
lit_widget.render(data=[{'prompt': get_fewshot_example('fewshot-fixed')}])
Sekarang penyelesaian model menjadi:
Taste-likes: Cheese Taste-dislikes: Can't eat eggs Suggestion: Quiche Lorraine Analysis: This dish contains eggs and cheese, which you don't like. Recommendation: Avoid.
Pelajaran penting yang dapat diambil dari hal ini adalah: membuat prototipe awal membantu mengungkapkan risiko yang mungkin tidak Anda pertimbangkan sebelumnya, dan sifat model bahasa yang rentan terhadap error berarti seseorang harus mendesain secara proaktif untuk mengatasi error. Pembahasan lebih lanjut tentang hal ini dapat ditemukan dalam Buku Panduan People + AI untuk mendesain dengan AI.
Meskipun perintah beberapa gambar yang dikoreksi lebih baik, perintah tersebut masih belum benar: perintah tersebut dengan benar memberi tahu pengguna untuk menghindari telur, tetapi alasannya tidak benar, perintah tersebut mengatakan bahwa pengguna tidak menyukai telur, padahal sebenarnya pengguna telah menyatakan bahwa mereka tidak dapat makan telur. Di bagian berikut, Anda akan melihat cara meningkatkan kualitas.
7. Menguji hipotesis untuk meningkatkan perilaku model
LIT memungkinkan Anda menguji perubahan pada perintah dalam antarmuka yang sama. Dalam hal ini, Anda akan menguji penambahan konstitusi untuk meningkatkan perilaku model. Konstitusi mengacu pada perintah desain dengan prinsip-prinsip untuk membantu memandu pembuatan model. Metode terbaru bahkan memungkinkan derivatif interaktif dari prinsip konstitusional.
Mari kita gunakan ide ini untuk membantu meningkatkan kualitas perintah lebih lanjut. Tambahkan bagian dengan prinsip-prinsip untuk pembuatan di bagian atas perintah kita, yang sekarang dimulai sebagai berikut:
Analyze a menu item in a restaurant. * The analysis should be brief and to the point. * The analysis and recommendation should both be clear about the suitability for someone with a specified dietary restriction. ## For example: Taste-likes: I've a sweet-tooth Taste-dislikes: Don't like onions or garlic Suggestion: Onion soup Analysis: it has cooked onions in it, which you don't like. Recommendation: Avoid. ...
lit_widget.render(data=[{'prompt': get_fewshot_example('fewshot-constitution')}])
Dengan update ini, contoh dapat dijalankan ulang dan mengamati output yang sangat berbeda:
Taste-likes: Cheese Taste-dislikes: Can't eat eggs Suggestion: Quiche Lorraine Analysis: This dish contains eggs, which you can't eat. Recommendation: Not suitable for you.
Kemudian, keterlihatan perintah dapat diperiksa kembali untuk membantu memahami alasan perubahan ini terjadi:
Perhatikan bahwa rekomendasi ini jauh lebih aman. Selain itu, "Tidak cocok untuk Anda" dipengaruhi oleh prinsip menyatakan kesesuaian dengan jelas sesuai dengan batasan diet, bersama dengan analisis (yang disebut rantai pemikiran). Hal ini membantu memberikan keyakinan tambahan bahwa output terjadi karena alasan yang tepat.
8. Menyertakan tim non-teknis dalam eksplorasi dan pemeriksaan model
Interpretabilitas dimaksudkan sebagai upaya tim, yang mencakup keahlian di seluruh XAI, kebijakan, hukum, dan lainnya.
Berinteraksi dengan model pada tahap pengembangan awal biasanya memerlukan keahlian teknis yang signifikan, sehingga mempersulit beberapa kolaborator untuk mengakses dan memeriksanya. Alat-alat yang diperlukan untuk memungkinkan tim ini berpartisipasi dalam fase pembuatan prototipe awal belum tersedia.
Melalui LIT, harapannya adalah paradigma ini dapat berubah. Seperti yang telah Anda lihat melalui codelab ini, media visual dan kemampuan interaktif LIT untuk memeriksa keterlihatan dan menjelajahi contoh dapat membantu berbagai pemangku kepentingan berbagi dan menyampaikan temuan. Hal ini dapat memungkinkan Anda menghadirkan keragaman rekan tim yang lebih luas untuk eksplorasi, pemeriksaan, dan proses debug model. Memperkenalkan mereka pada metode teknis ini dapat meningkatkan pemahaman mereka tentang cara kerja model. Selain itu, serangkaian keahlian yang lebih beragam dalam pengujian model awal juga dapat membantu menemukan hasil yang tidak diinginkan yang dapat ditingkatkan.
9. Rekap
Ringkasnya:
- UI LIT menyediakan antarmuka untuk eksekusi model interaktif, yang memungkinkan pengguna menghasilkan output secara langsung dan menguji skenario "bagaimana jika". Hal ini sangat berguna untuk menguji berbagai variasi perintah.
- Modul Saliensi LM memberikan representasi visual tentang keterlihatan, dan memberikan perincian data yang dapat dikontrol sehingga Anda dapat berkomunikasi tentang konstruksi yang berfokus pada manusia (misalnya, kalimat dan kata) dan bukan konstruksi yang berfokus pada model (misalnya, token).
Saat Anda menemukan contoh yang bermasalah dalam evaluasi model, masukkan contoh tersebut ke LIT untuk proses debug. Mulailah dengan menganalisis unit konten yang paling masuk akal yang dapat Anda pikirkan yang secara logis terkait dengan tugas pemodelan, gunakan visualisasi untuk melihat di mana model menangani konten perintah dengan benar atau salah, lalu perinci unit konten yang lebih kecil untuk lebih menjelaskan perilaku salah yang Anda lihat guna mengidentifikasi kemungkinan perbaikan.
Terakhir: Lit terus ditingkatkan. Pelajari lebih lanjut fitur kami dan sampaikan saran Anda di sini.