שימוש ב-LIT לניתוח מודלים של אבני חן ב-Keras

1. מבוא

מוצרי AI גנרטיבי הם חדשים יחסית, וההתנהגות של אפליקציה יכולה להשתנות יותר מאשר בתוכנות קודמות. לכן חשוב לבדוק את המודלים של למידת המכונה שבהם אתם משתמשים, לבחון דוגמאות להתנהגות של המודל ולחקור תוצאות מפתיעות.

כלי הפרשנות של למידת המכונה (LIT, אתר, GitHub) הוא פלטפורמה לניפוי באגים ולניתוח של מודלים של למידת מכונה, כדי להבין למה הם מתנהגים כפי שהם מתנהגים ואיך הם עושים זאת.

בקודלאב הזה תלמדו איך להשתמש ב-LIT כדי להפיק יותר ממודל Gemma של Google. בקודלאב הזה תלמדו איך להשתמש ב-sequence salience, טכניקה של פרשנות, כדי לנתח שיטות שונות של תכנון הנחיות.

יעדי למידה:

  1. הסבר על המשמעות של 'הדגשת רצף' והשימושים שלה בניתוח מודלים.
  2. הגדרת LIT ל-Gemma כדי לחשב את הפלט של ההנחיות ואת הבולטוּת של הרצף.
  3. שימוש במודול LM Salience כדי להבין את ההשפעה של עיצובי ההנחיות על הפלט של המודלים.
  4. בדיקת השיפורים המשוערים בהנחיות ב-LIT ובדיקה של ההשפעה שלהם.

הערה: בקודלאב הזה נעשה שימוש בהטמעת KerasNLP של Gemma, וב-TensorFlow v2 לקצה העורפי. מומלץ מאוד להשתמש בליבה של GPU כדי לעקוב אחרי ההוראות.

הדגמה של ממשק המשתמש של LIT

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 Datapoint

דרך נוספת היא לבצע עיבוד מחדש של הווידג'ט ישירות עם ההנחיה הרצויה:

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, בוחרים באפשרות 'משפטים' ואז בוחרים את שורת ההמלצה. ממשק המשתמש אמור להיראות כך:

LIT 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.

לאחר מכן אפשר לבדוק מחדש את הבולטות של ההנחיה כדי להבין למה השינוי הזה מתרחש:

LIT Salience

שימו לב שההמלצה הזו בטוחה הרבה יותר. בנוסף, ההודעה 'לא מתאים לך' מושפעת מהעיקרון של ציון בבירור את ההתאמה בהתאם להגבלות התזונתיות, יחד עם הניתוח (המכונה 'שרשרת המחשבה'). כך תוכלו לדעת בוודאות רבה יותר שהפלט מתקבל מהסיבה הנכונה.

8. כדאי לכלול צוותים לא טכניים בבדיקה ובניתוח של המודל

הפירוש הוא מאמץ קבוצתי, שכולל מומחיות בתחומים שונים כמו XAI, מדיניות, משפט ועוד.

בעבר, כדי לקיים אינטראקציה עם מודלים בשלבים המוקדמים של הפיתוח נדרשה מומחיות טכנית משמעותית, ולכן היה קשה יותר לחלק מהשותפים לגשת למודלים ולבדוק אותם. בעבר לא היו כלים שאפשרו לצוותים האלה להשתתף בשלבים המוקדמים של פיתוח האב-טיפוס.

אנחנו מקווים שתוכנית LIT תאפשר לשנות את התפיסה הזו. כפי שראיתם ב-codelab הזה, המדיום החזותי של LIT והיכולת האינטראקטיבית שלו לבדוק את החשיבות ולבחון דוגמאות יכולים לעזור לגורמים שונים בעלי עניין לשתף את הממצאים ולתקשר אותם. כך תוכלו לצרף לעבודה מגוון רחב יותר של חברי צוות לצורך ניתוח, בדיקה ופתרון באגים של המודלים. חשיפה לשיטות הטכניות האלה יכולה לשפר את ההבנה שלהם לגבי אופן הפעולה של המודלים. בנוסף, מגוון רחב יותר של מומחיות בבדיקת מודלים בשלב מוקדם יכול לעזור גם לגלות תוצאות לא רצויות שאפשר לשפר.

9. Recap

לסיכום:

  • ממשק המשתמש של LIT מספק ממשק להפעלה אינטראקטיבית של מודלים, שמאפשר למשתמשים ליצור ישירות תוצאות ופלט ולבדוק תרחישים מסוג 'מה אם'. האפשרות הזו שימושית במיוחד לבדיקת וריאציות שונות של הנחיות.
  • המודול LM Salience מספק ייצוג חזותי של הדומיננטיות, ומספק רמת פירוט של נתונים שניתן לשלוט בה, כדי שתוכלו לתקשר על מבנים שמתמקדים בבני אדם (למשל, משפטים ומילים) במקום על מבנים שמתמקדים במודל (למשל, אסימונים).

אם מצאתם דוגמאות בעייתיות בבדיקות המודל, תוכלו להעביר אותן ל-LIT לניפוי באגים. מתחילים בניתוח של יחידת התוכן הגדולה וההגיונית ביותר שאפשר לחשוב עליה, שקשורה באופן לוגי למשימה בניית המודל. משתמשים בתצוגות החזותיות כדי לראות איפה המודל מתייחס בצורה נכונה או שגויה לתוכן ההנחיה, ולאחר מכן עוברים לניתוח מעמיק של יחידות תוכן קטנות יותר כדי לתאר בצורה מדויקת יותר את ההתנהגות השגויה שמופיעה, וכך לזהות תיקונים אפשריים.

לסיום: אנחנו כל הזמן משפרים את Lit! כאן תוכלו לקבל מידע נוסף על התכונות שלנו ולשלוח הצעות.