1. מבוא
מוצרי AI גנרטיבי הם חדשים יחסית, וההתנהגות של אפליקציה יכולה להשתנות יותר מאשר בתוכנות קודמות. לכן חשוב לבדוק את המודלים של למידת המכונה שבהם אתם משתמשים, לבחון דוגמאות להתנהגות של המודל ולחקור תוצאות מפתיעות.
כלי הפרשנות של למידת המכונה (LIT, אתר, GitHub) הוא פלטפורמה לניפוי באגים ולניתוח של מודלים של למידת מכונה, כדי להבין למה הם מתנהגים כפי שהם מתנהגים ואיך הם עושים זאת.
בקודלאב הזה תלמדו איך להשתמש ב-LIT כדי להפיק יותר ממודל Gemma של Google. בקודלאב הזה תלמדו איך להשתמש ב-sequence salience, טכניקה של פרשנות, כדי לנתח שיטות שונות של תכנון הנחיות.
יעדי למידה:
- הסבר על המשמעות של 'הדגשת רצף' והשימושים שלה בניתוח מודלים.
- הגדרת LIT ל-Gemma כדי לחשב את הפלט של ההנחיות ואת הבולטוּת של הרצף.
- שימוש במודול LM Salience כדי להבין את ההשפעה של עיצובי ההנחיות על הפלט של המודלים.
- בדיקת השיפורים המשוערים בהנחיות ב-LIT ובדיקה של ההשפעה שלהם.
הערה: בקודלאב הזה נעשה שימוש בהטמעת KerasNLP של Gemma, וב-TensorFlow v2 לקצה העורפי. מומלץ מאוד להשתמש בליבה של GPU כדי לעקוב אחרי ההוראות.
2. הדגשת רצף והשימושים שלה בניתוח מודלים
מודלים גנרטיביים מסוג טקסט לטקסט, כמו Gemma, מקבלים רצף קלט בצורת טקסט מפולח ויוצרים אסימונים חדשים שהם המשכים או השלמות אופייניים לקלט הזה. היצירה מתבצעת טוקן אחד בכל פעם, והטוקן החדש מצורף (בלולאה) לקלט יחד עם כל הדורות הקודמים, עד שהמודל מגיע לתנאי עצירה. לדוגמה, כשהמודל יוצר אסימון של סוף רצף (EOS) או מגיע לאורך המקסימלי שהוגדר מראש.
שיטות של מודגשות הן סוג של שיטות של AI שניתן להסביר (XAI) שיכולות לומר לכם אילו חלקים של קלט חשובים למודל בחלקים שונים של הפלט שלו. ב-LIT יש תמיכה בשיטות של מודגשות למגוון משימות סיווג, שמסבירות את ההשפעה של רצף של אסימוני קלט על התווית החזויה. השיטה Sequence salience מאפשרת להכליל את השיטות האלה למודלים גנרטיביים מסוג טקסט לטקסט, ומסבירה את ההשפעה של האסימונים הקודמים על האסימונים שנוצרו.
כאן נשתמש בשיטה Grad L2 Norm כדי לבדוק את הבולטוּת של רצף, שנותנת ניתוח של שיפועי המודל ומספקת את עוצמת ההשפעה של כל אסימון קודם על הפלט. השיטה הזו פשוטה ויעילה, והוכח שהיא מניבה ביצועים טובים בסיווג ובהגדרות אחרות. ככל שציון הבולטוּת גבוה יותר, כך ההשפעה גדולה יותר. אנחנו משתמשים בשיטה הזו ב-LIT כי היא מובנת היטב ומשמשת קהילות רבות של חוקרים בתחום הניתנות לפריסה.
שיטות מתקדמות יותר לזיהוי מודגשים מבוססות-שיפוע כוללות את Grad ⋅ Input ואת שיפועים משולבים. יש גם שיטות מבוססות-אבלציה, כמו LIME ו-SHAP, שיכולות להיות עמידות יותר אבל החישוב שלהן יקר יותר באופן משמעותי. במאמר הזה מופיעה השוואה מפורטת בין שיטות שונות לזיהוי מודעות בולטות.
במדריך האינטראקטיבי הזה תוכלו לקבל מידע נוסף על שיטות לזיהוי מודעות בולטות.
3. קודים של ייבוא, סביבה והגדרות אחרות
מומלץ לבצע את הקודלאב הזה ב-Colab החדש. מומלץ להשתמש בזמן ריצה של מאיץ, כי תצטרכו לטעון מודל לזיכרון. עם זאת, חשוב לדעת שאפשרויות המאיץ משתנות עם הזמן וכפופות למגבלות. אם אתם רוצים לקבל גישה למאיצי ביצועים חזקים יותר, אתם יכולים להירשם למינויים בתשלום ב-Colab. לחלופין, אפשר להשתמש בסביבת זמן ריצה מקומית אם במחשב יש GPU מתאים.
הערה: יכול להיות שיופיעו כמה אזהרות מהסוג הזה
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.
אפשר להתעלם מהן.
התקנה של LIT ו-Keras NLP
כדי להשתמש בקודלאב הזה, תצטרכו גרסה עדכנית של keras
(3), keras-nlp
(0.14) ו-lit-nlp
(1.2), וחשבון Kaggle כדי להוריד את מודל הבסיס.
pip install -q -U 'keras >= 3.0' 'keras-nlp >= 0.14' 'lit-nlp >= 1.2'
גישה ל-Kaggle
כדי לבצע אימות באמצעות Kaggle, אפשר:
- שומרים את פרטי הכניסה בקובץ, למשל
~/.kaggle/kaggle.json
. - להשתמש במשתני הסביבה
KAGGLE_USERNAME
ו-KAGGLE_KEY
. - מריצים את הקוד הבא בסביבת Python אינטראקטיבית, כמו Google Colab.
import kagglehub
kagglehub.login()
פרטים נוספים זמינים במסמכי העזרה של kagglehub
. חשוב לאשר את הסכם הרישיון של Gemma.
הגדרת Keras
Keras 3 תומך במספר ממשקי קצה לקצה (back-end) של למידת עומק, כולל Tensorflow (ברירת המחדל), PyTorch ו-JAX. הקצה העורפי מוגדר באמצעות משתנה הסביבה KERAS_BACKEND
, שצריך להגדיר לפני ייבוא ספריית Keras. בקטע הקוד הבא מוצג איך להגדיר את המשתנה הזה בסביבת Python אינטראקטיבית.
import os
os.environ["KERAS_BACKEND"] = "tensorflow" # or "jax" or "torch"
4. הגדרת LIT
אפשר להשתמש ב-LIT ב-Python Notebooks או דרך שרת אינטרנט. הקודלהב הזה מתמקד בתרחיש לדוגמה של Notebook. מומלץ להשתמש ב-Google Colab.
ב-Codelab הזה תלמדו לטעון את Gemma v2 2B IT באמצעות הגדרת ברירת המחדל של KerasNLP. קטע הקוד הבא מאתחלל את Gemma וטעון מערך נתונים לדוגמה בווידג'ט של 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"],
)
כדי להגדיר את הווידג'ט, משנים את הערכים המועברים לשני הארגומנטים המיקומיים הנדרשים:
datasets_config
: רשימה של מחרוזות שמכילות את השמות והנתיבים של מערכי הנתונים לטעינה, כ-'dataset:path', כאשר הנתיב יכול להיות כתובת URL או נתיב של קובץ מקומי. בדוגמה הבאה נעשה שימוש בערך המיוחדsample_prompts
כדי לטעון את ההנחיות לדוגמה שסופקו בהפצה של LIT.models_config
: רשימה של מחרוזות שמכילות את שמות המודלים והנתיבים לטעינה, כ-'model:path', כאשר הנתיב יכול להיות כתובת URL, נתיב קובץ מקומי או שם של הגדרה מוגדרת מראש של מסגרת הלמידה העמוקה שהוגדרה.
אחרי שמגדירים את LIT להשתמש במודל הרצוי, מריצים את קטע הקוד הבא כדי להציג את הווידג'ט ב-Notebook.
lit_widget.render(open_in_new_tab=True)
שימוש בנתונים שלכם
Gemma הוא מודל גנרטיבי של טקסט לטקסט, שמקבל קלט טקסט ויוצר פלט טקסט. ב-LIT נעשה שימוש ב-API בעל דעה מוגדרת כדי להעביר את המבנה של מערכי הנתונים שהועלו למודלים. מודלים גדולים של שפה (LLMs) ב-LIT מיועדים לעבודה עם מערכי נתונים שמספקים שני שדות:
prompt
: הקלט למודל שממנו ייווצר הטקסט.target
: רצף יעד אופציונלי, כמו תגובה של 'אמת בפועל' מבוחנים אנושיים או תגובה שנוצרה מראש על ידי מודל אחר.
LIT כולל קבוצה קטנה של sample_prompts
עם דוגמאות מהמקורות הבאים שתומכים ב-Codelab הזה ובמדריך המורחב של LIT לניפוי באגים באמצעות הנחיות.
- GSM8K: פתרון בעיות מתמטיות של בית ספר יסודי באמצעות דוגמאות של כמה תמונות.
- Gigaword Benchmark: יצירת כותרות לאוסף של מאמרים קצרים.
- הנחיות כלליות: יצירת רעיונות חדשים לשימוש באובייקטים עם הנחיות או גבולות.
אפשר גם לטעון בקלות נתונים משלכם, כקובץ .jsonl
שמכיל רשומות עם השדות prompt
ואפשרותית target
(דוגמה), או מכל פורמט באמצעות Dataset API של LIT.
מריצים את התא שלמטה כדי לטעון את ההנחיות לדוגמה.
5. ניתוח הנחיות של 'כמה שניות' עבור Gemma ב-LIT
כיום, הנחיות הן גם אמנות וגם מדע, ו-LIT יכול לעזור לכם לשפר באופן אמפירי הנחיות למודלים גדולים של שפה, כמו Gemma. בהמשך נספק דוגמה לאופן שבו אפשר להשתמש ב-LIT כדי לבחון את ההתנהגויות של Gemma, לחזות בעיות פוטנציאליות ולשפר את הבטיחות שלה.
זיהוי שגיאות בהנחיות מורכבות
שתי השיטות החשובות ביותר להנחיה של אב טיפוס ויישומים איכותיים שמבוססים על LLM הן הנחיה בכמה משפטים (כולל דוגמאות להתנהגות הרצויה בהנחיה) ושרשרת מחשבות (כולל סוג של הסבר או נימוק לפני הפלט הסופי של ה-LLM). עם זאת, לרוב עדיין קשה ליצור הנחיה יעילה.
דוגמה לכך היא עזרה לאדם להעריך אם הוא יאהב מאכל מסוים על סמך הטעם שלו. תבנית ראשונית של הנחיה בטכניקת שרשרת מחשבה בגרסת אב טיפוס עשויה להיראות כך:
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:"""
האם זיהית את הבעיות בהנחיה הזו? בעזרת LIT תוכלו לבחון את ההנחיה באמצעות מודול LM Salience.
6. שימוש ב-sequence salience לניפוי באגים
המשמעות הבולטת מחושבת ברמה הקטנה ביותר האפשרית (כלומר, לכל אסימון קלט), אבל LIT יכול לצבור את המשמעות הבולטת של אסימונים למקטעים גדולים יותר שקל יותר לפרש, כמו שורות, משפטים או מילים. בכלי הניתוחים של מודלים של מודעוּת תוכלו לקרוא מידע נוסף על מוּדעוּת ואיך משתמשים בה כדי לזהות הטיות לא מכוונות.
נתחיל בהוספת קלט לדוגמה חדש להנחיה עבור המשתנים של תבנית ההנחיה:
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:
אם ממשק המשתמש של LIT פתוח בתא שלמעלה או בכרטיסייה נפרדת, אפשר להשתמש בעורך הנקודות הנתונים של LIT כדי להוסיף את ההנחיה הבאה:
דרך נוספת היא לבצע עיבוד מחדש של הווידג'ט ישירות עם ההנחיה הרצויה:
lit_widget.render(data=[fewshot_mistake_example])
שימו לב להשלמתו המפתיעה של המודל:
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.
למה המודל מציע לכם לאכול משהו שאמרתם בבירור שאתם לא יכולים לאכול?
הכלי 'הדגשת רצף' יכול לעזור לכם להדגיש את שורש הבעיה, שמופיעה בדוגמאות שלנו ל-few-shot. בדוגמה הראשונה, שרשרת החשיבה בקטע הניתוח it has cooked onions in it, which you don't like
לא תואמת להמלצה הסופית You have to try it
.
במודול LM Salience, בוחרים באפשרות 'משפטים' ואז בוחרים את שורת ההמלצה. ממשק המשתמש אמור להיראות כך:
זה מצביע על שגיאה אנושית: העתקה בטעות והדבקה של חלק ההמלצה ואי עדכון שלו!
עכשיו נתקן את הערך של 'המלצה' בדוגמה הראשונה ל-Avoid
וננסה שוב. הדוגמה הזו נטענת מראש ב-LIT בהנחיות לדוגמה, כך שאפשר להשתמש בפונקציית השירות הקטנה הזו כדי לאחזר אותה:
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')}])
עכשיו השלמת המודל תהפוך ל:
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.
הלקח החשוב שאפשר להפיק מהמצב הזה הוא: יצירת אב טיפוס בשלב מוקדם עוזרת לחשוף סיכונים שאולי לא חשבתם עליהם מראש, והעובדה שמודלים של שפה נוטים לשגיאות מחייבת לתכנן מראש מצב של שגיאות. אפשר לקרוא על כך בהרחבה במדריך לאנשים ול-AI שלנו לעיצוב באמצעות AI.
ההנחיה המתוקנת עם כמה צילומי סטילס היא טובה יותר, אבל היא עדיין לא נכונה לגמרי: היא מבקשת מהמשתמש להימנע מאכילת ביצים, אבל הסיבה לא נכונה. ההנחיה אומרת שהמשתמש לא אוהב ביצים, אבל למעשה הוא ציין שהוא לא יכול לאכול ביצים. בקטע הבא נסביר איך אפשר לשפר את הביצועים.
7. בדיקת השערות לשיפור התנהגות המודל
בעזרת LIT אפשר לבדוק שינויים בהנחיות באותו ממשק. במקרה הזה, נבדוק הוספה של חוקה כדי לשפר את ההתנהגות של המודל. 'חוקות' הן הנחיות לעיצוב עם עקרונות שיעזרו לכם ליצור את המודל. שיטות חדשות מאפשרות אפילו הסקה אינטראקטיבית של עקרונות חוקתיים.
נשתמש ברעיון הזה כדי לשפר את ההנחיה עוד יותר. מוסיפים קטע עם העקרונות ליצירה בחלק העליון של ההנחיה, שמתחילה עכשיו כך:
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')}])
בעקבות העדכון הזה, אפשר להריץ מחדש את הדוגמה ולראות פלט שונה מאוד:
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.
לאחר מכן אפשר לבדוק מחדש את הבולטות של ההנחיה כדי להבין למה השינוי הזה מתרחש:
שימו לב שההמלצה הזו בטוחה הרבה יותר. בנוסף, ההודעה 'לא מתאים לך' מושפעת מהעיקרון של ציון בבירור את ההתאמה בהתאם להגבלות התזונתיות, יחד עם הניתוח (המכונה 'שרשרת המחשבה'). כך תוכלו לדעת בוודאות רבה יותר שהפלט מתקבל מהסיבה הנכונה.
8. כדאי לכלול צוותים לא טכניים בבדיקה ובניתוח של המודל
הפירוש הוא מאמץ קבוצתי, שכולל מומחיות בתחומים שונים כמו XAI, מדיניות, משפט ועוד.
בעבר, כדי לקיים אינטראקציה עם מודלים בשלבים המוקדמים של הפיתוח נדרשה מומחיות טכנית משמעותית, ולכן היה קשה יותר לחלק מהשותפים לגשת למודלים ולבדוק אותם. בעבר לא היו כלים שאפשרו לצוותים האלה להשתתף בשלבים המוקדמים של פיתוח האב-טיפוס.
אנחנו מקווים שתוכנית LIT תאפשר לשנות את התפיסה הזו. כפי שראיתם ב-codelab הזה, המדיום החזותי של LIT והיכולת האינטראקטיבית שלו לבדוק את החשיבות ולבחון דוגמאות יכולים לעזור לגורמים שונים בעלי עניין לשתף את הממצאים ולתקשר אותם. כך תוכלו לצרף לעבודה מגוון רחב יותר של חברי צוות לצורך ניתוח, בדיקה ופתרון באגים של המודלים. חשיפה לשיטות הטכניות האלה יכולה לשפר את ההבנה שלהם לגבי אופן הפעולה של המודלים. בנוסף, מגוון רחב יותר של מומחיות בבדיקת מודלים בשלב מוקדם יכול לעזור גם לגלות תוצאות לא רצויות שאפשר לשפר.
9. Recap
לסיכום:
- ממשק המשתמש של LIT מספק ממשק להפעלה אינטראקטיבית של מודלים, שמאפשר למשתמשים ליצור ישירות תוצאות ופלט ולבדוק תרחישים מסוג 'מה אם'. האפשרות הזו שימושית במיוחד לבדיקת וריאציות שונות של הנחיות.
- המודול LM Salience מספק ייצוג חזותי של הדומיננטיות, ומספק רמת פירוט של נתונים שניתן לשלוט בה, כדי שתוכלו לתקשר על מבנים שמתמקדים בבני אדם (למשל, משפטים ומילים) במקום על מבנים שמתמקדים במודל (למשל, אסימונים).
אם מצאתם דוגמאות בעייתיות בבדיקות המודל, תוכלו להעביר אותן ל-LIT לניפוי באגים. מתחילים בניתוח של יחידת התוכן הגדולה וההגיונית ביותר שאפשר לחשוב עליה, שקשורה באופן לוגי למשימה בניית המודל. משתמשים בתצוגות החזותיות כדי לראות איפה המודל מתייחס בצורה נכונה או שגויה לתוכן ההנחיה, ולאחר מכן עוברים לניתוח מעמיק של יחידות תוכן קטנות יותר כדי לתאר בצורה מדויקת יותר את ההתנהגות השגויה שמופיעה, וכך לזהות תיקונים אפשריים.
לסיום: אנחנו כל הזמן משפרים את Lit! כאן תוכלו לקבל מידע נוסף על התכונות שלנו ולשלוח הצעות.