close menu

מדריך: איך לאמן CHATGPT משלכם?

אז יש לכם קובץ טקסט.
במקום לקרוא אותו אתם רוצים צ'אט-בוט (כמו ChatGPT) שידבר אתכם עליו ויענה על שאלות על סמך המידע שיש בו.

מדריך: איך לאמן צ'טבוט על טקסט משלכם?

לפני הכל: תברחו!

אם יש לכם פתרון שלא כולל לעשות את זה בעצמם: לכו עליו.

הטכנולוגיה לא באמת נמצאת שם! אם לא תאמנו מודל ענק (20+ מיליארד), כנראה שתתאכזבו מהתוצאות ואני באמת באמת ממליץ לכם ללכת על פתרונות פשוטים אחרים כמו אימון GPT-3 או פתרונות מדף אחרים הקיימים היום בשוק במידה וזה אפשרי מבחינתכם.

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

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

דומיין פתוח: אני שואל מה שבא לי -> אני מצפה לתשובה נכונה.

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

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

האם למודל יש גישה למידע חיצוני בזמן שאנו שואלים אותו שאלות?
תלוי בבעיה, הבעיות מתחלקות לשניים: ספר סגור וספר פתוח.
בבעיות ספר סגור, האתגר הוא שלמודל אין גישה למידע נוסף הקשור לשאלה. עליו "לזכור" את העובדות והמידע.
רמות "הבנה" של מודלים
חשוב להבין שמודלים לא מתנהגים כמו בני אדם וישנן כמה רמות "הבנה" שונות למודלים מהסוג הזה.
  1. מודל המסוגל לשנן נכון ולהגיב עם תשובה לשאלה שנראתה בזמן האימון.
  2. מודל המסוגל לענות על שאלות חדשות בזמן המבחן ולבחור תשובה המורכבת מתוך התשובות שראה לשאלות אחרות בזמן האימון.
  3. מודל המסוגל לענות על שאלות חדשות שיש שלהן תשובות חדשות שאינן נכללו בנתוני האימון.

האינפורמציה יכולה למשל להגיע מאימון נוסף להשלמת קטעי טקסט המכילים מידע – כך נעשה בGPT

בעיות עם חומר פתוח – Open Book

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

המודל שבוחר את קובץ המידע – Retriever

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

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

האם כדאי לכם לאמן בעצמכם מודל?
אם אין לכם כוח: שימוש במודל שאומן "לשחזר" מילים שהוסתרו ממנו (MLM) כמו ברט או רוברטה ככל הנראה יעבו.. בעצם לא. אני מתנצל, יש רק מודל שפה אחד בעולם ושמו דיברטה. בו כדאי לכם להשתמש.
אם יש לכם כוח: אימון מודל מסוג זה בדרך כלל מבוצע על ידי למידת מטריקה (Metric Learning) שהיא שם יפה המתאר "מודלים שלומדים האם שני דברים שונים הם בעצם אותו הדבר" – מראים למודל זוגות "שאלות" ו "קבצי מידע" ומטרת המודל היא להחזיר האם התשובה לאותה השאלה נמצאת בתוך קובץ המידע.

אנחנו יודעים את זה כי זה סט האימון: יש לנו את התשובה וגם קובץ מידע בו התשובה נמצאת

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

מה זאת אומרת Longformer?! – הסיבה שהזכרתי מודל נוסף שאינו דיברטה למרות שכידוע אין מודלי שפה נוספים יותר בעולם: Longformer מאומן מראש על טקסטים ארוכים (דיברטה לא) אז במידה ואתם לא מעוניינים לאמן כלל – השתמשו בו על מנת לקבל יצוגים בחינם. אם יש לכם כוח לאמן בעצמכם: דיברטה. רק דיברטה.

הפתרון המוגזם – כל המשפטים, כל הקבצים:
בהקשר זה הועלתה הגישה קיצונית [1] בה ניסו לקודד את כל הטקסט במאגר המידע ברמת המשפטים עצמם ואז במקום ללמד מודל "למרקר" את החלק הרלוונטי בקובץ המידע. אין יותר קובץ מידע. המודל שבוחר את המידע המתאים לשאלה פשוט מחזיר לנו את המשפט מתוך קובץ הנתונים העונה על השאלה.
פתרון זה אמנם קצת מוגזם ולא הכי פשוט למימוש אבל בהנתן מספיק דאטה ומודל מספיק גדול – הוא יעבוד ממש טוב.

כך דרך אגב פועלת האפליקציה Replika – צ'אט בוט GPT-3 המתיימר(ת) להיות "חברה", "בת הזוג" או אפילו "הפסיכולוגית" של המשתמש. אתיקה בצד [ויש הרבה מה לדבר על אתיקה!], הם מריצים Retriever ענק על מיליוני הודעות אפשריות ועל כמה תוצאות החוזרות מGPT-3 (אומן במיוחד) ובכך בוחרים מה ההודעה שעליהם להחזיר אל המשתמש. החיפוש נעשה במהירות רבה כי כל היצוגים הנסתרים כבר חושבו מראש ומה שנשאר לעשות הוא רק להכפיל אותם ביצוג שיחת המשתמש כרגע.

מודל ה"ממרקר" את התשובה

המשימה: נכנסת שאלה וקובץ מידע המכיל את התשובה -> יוצאים שני אינדקסים המסמנים את תחילת וסוף התשובה לשאלה.
מטרת המודל היא לפתור משימת הבנת הנקרא – לחלץ את תשובה לשאלה מקובץ המידע המצורף, כלומר לחזות את ההסתברויות של כל המיקומים בקובץ המידע להיות ההתחלה או הסוף של התשובה.
מהניסיון שלי
היתה תחרות כזו בקאגל לפני כמה שנים אז יש לי ניסיון בנושא חיזוי אינדקס התחלה ואינדקס סוף. יש כמה טריקים שמשפרים ביצועים.
  • קודם כל לחזות את האינדקס הסופי ואז להכניס אותו אל הרשת בתור פיצ'ר ולחזות את האינדקס ההתחלתי
  • להשתמש בLabel smoothing ולכייל אותו עם אופטימייזר להיפרפרמטרים
  • אוגמנטציה: "לקרב" קצת בין שני האינדקסים באופן רנדומלי מכל צד.
  • אוגמנטציה: להתאמן עם Maskים רנדומלים
  • להוסיף Multi Sample Dropout (שזה אומר, להכניס את אותה הדוגמה אל המודל כמה פעמים עם ערכי dropout שונים ואז למצע)
  • להשתמש ביצוג נסתר המגיע מכל שכבות המודל
  • להשתמש בשכבות קונבולוציה חד מימדיות אחרי המודל המאומן מראש
  • באותה התחרות גם הלכתי רחוק והוספתי wavenet אחרי המודל המאומן מראש
  • להשתמש במודל בכמה רזולוציות: אחרי התחזית ברמת המילה, כמה שכבות ברמת האות הבודדת.
יש עוד הרבה טריקים בנושא הזה אבל אלה המעניינים ביותר.
לסיכום, אם יש לנו מודל הבוחר קובץ מידע ומודל הבוחר קטע טקסט בתוך אותו קובץ המידע, אפשר לאמן את שניהם end-2-end והתוצאות נחשבות לטובות יותר.

שיטות אימון מקצה לקצה – End-to-end

אימון מקצה לקצה: שליפת קובץ מידע ומציאת התשובה בו.

אימון ניגודיות – Contrastive Learning
על אימון ניגודיות אפשר לכתוב פוסט שלם נפרד, לכן לא נכנס לכל הפרטים השיטות והטריקים הקטנים בו.
לאלו שאינם מכירים, בנושא של שאלות ותשובות: שני מודלים האחד מקבל שאלה, השני מקבל תשובה: מטרת המודלים לאמר האם התשובה מתאימה לשאלה (כן \ לא). האימון מתבצע על שניהם יחד.
שתי שיטות:
  • האם השאלה מתאימה לקובץ?
  • האם הקובץ מתאים לשאלה?
מכיוון שהסט-אפ כולו סימטרי ישנן שתי אפשרויות למידה, אפשר ללמוד עבור שאלה מסוימת מה קובץ המידע המתאים המכיל את התשובה לאותה השאלה [3] או לחילופין ללמוד עבור קובץ מידע מסוים על אלו שאלות ניתן לענות לפיו.

שימו לב: אמנם במציאות אנחנו פועלים רק לכיוון אחד (מקבלים שאלה וצריכים למצוא קובץ מידע), את הלימוד אפשר לעשות לשני הכיוונים כי אנחנו משתמשים ביצוג הנלמד בתוך המודל ולא בתוצאת המודל במציאות.

הלוס בסט-אפ מקצה לקצה מורכב משני לוסים שונים: האחד מעודד את המודל להחזיר את קובץ המידע הנכון והשני מעודד את המודל לחלץ את התשובה מתוך אותו קובץ מידע.
בתחילת האימון, המודלים לא מוצלחים למדי ולכן קורים הרבה מצבים בהם הלוס לחילוץ התשובה מתוך קובץ המידע לא מחושב (כי המודל לא החזיר את קובץ המידע הנכון בין קבצי המידע שהחזיר) על מנת להתגבר על זה אפשר לבצע אימון אגרסיבי בו נלקחים בחשבון טופ-K קבצי המידע השונים שהחזיר המודל.
חישוב הלוס בשלבים: לוס למציאת קובץ המידע ולוס למציאת התשובה בו
הגישה הקודמת אלגנטית אבל יש בה חסרון בולט, היא צורכת המון זכרון (שליפת מספר מסמכים רב בכל פעם) גישה נוספת שהוצעה [4] במודל REALM היא חישוב לוס בשלבים: בכל איטרצית אימון ניתן למודל לשלוף קובץ מידע ואז על סמך אותו קובץ, נפעיל עוד שכבות במודל שתפקידן למצוא את התשובה בקובץ המידע ו"למרקר" אותה.
הלוס מחושב בשלבים כשחלק הראשון מלמד את המודל להביא את קובץ המידע הנכון והחלק השני מלמד את המודל לשלוף את התשובה לשאלה שנשאלה.
באותה העבודה דרך אגב גם הוצע אימון מקדים בו בכל שלב מסתירים מהמודל חלק מסויים במשפט ועל המודל להביא את קובץ המידע בו נמצא המידע החסר ו"להצביע" על החלק החסר מאותו המשפט.
למה זה מעניין? בחירת "מילים מעניינות" להסתרה
על פניו, לקחת מילים רנדומליות מטקסט כלשהו וללמד מודל למצוא את הטקסט ולהשלים אותן לא נשמע מעניין למידי.
על מנת להכריח את המודל ללמוד יצוג מעניין הם הסתירו בכוונה מילים מיוחדות המכילות תוכן חשוב (salient span masking), שיטה זו מתבייתת על תאריכים, שמות אנשים, מושגים מיוחדים או אופן כללי: "דברים מעניינים" בטקסט.
הם בנוסף נתנו למודל גם אפשרות לא להביא קובץ מידע כלל ולענות מזכרון (הוסיפו מחלקה "בלי קובץ מידע") וכדי להקשות על המודל במיוחד הם קבעו שהמודל לא יוכל להביא את קובץ המידע הנכון שבאמת עונה על השאלה (הדאטה הוא כל ויקיפדיה, ההנחה היא שאפשר למצוא "בעקיפין" את המידע במסמכים אחרים).
העניין החשוב לנו להמשך הדיון הוא הבחירה המיוחדת של "מילים מעניינות" במשפט.
עבודות המשך דרך אגב [5] מצאו שגישה זו סקיילאבילית ועל ידי אימון מאסיבי יותר על דאטה גדול יותר אפשר לשפר את הביצועים בצורה משמעותית. הם קראו למודל REALM++.
אימון ישיר – שאלה + תשובה
עובודת נוספות [6] (וגם אני) טוענות שאימון מקדים וכל מיני אימוני צד יקרים חישובית ומביאים למודל לא אופטימלי מכיוון שהמודל לא אומן על צמדי שאלות ותשובות ישירות.
החידוש בעבודות אלו הוא שהחיבור בין שני המודלים (מודל השאלות ומודל התשובות) מתבצע גם הוא על ידי שיטת למידת מרחק [או dot בין יצוגי המודלים, או חישוב מרחק כלשהו – למשל L2 או cosine], הלוס הוא לוס פשוט לסיווג.
בנוסף, במאמר יש טריק פשוט לשיפור התוצאות [שדרך אגב תמיד תמיד עובד בלי קשר!! בכל הבעיות!] והוא באצ'ים מאוזנים: לכל באצ' למידה נלקחות אותו מספר דוגמאות שליליות ודוגמאות חיוביות על מנת לעזור למודל ללמוד במדויק מה מפריד בניהן.
וטריק אחרון שהם ניסו: בחירת הדוגמאות השליליות נעשית כך שאותן הדוגמאות הן תשובות נכונות לשאלות אחרות בדאטה (ולא לשאלה בבאצ'). הכותבים מדווחים ששיטה זו הביאה לתוצאות הגבוהות ביותר [יותר מבחירת משפטים המכילים הרבה מילים המתאימות לשאלה]. כנראה ששיטה זו מלמדת את המודל להתעלם "מהמבנה" של משפט הנראה כמו תשובה לשאלה ולהתרכז רק בתוכן התשובה.

מעניין!

מודלי חומר פתוח גנרטיבים

כי רטריברים זה נחמד והכל אבל GPT

גישות משולבות – להביא קובץ מידע רלוונטי וגם לייצר תשובה
לפני שנגיע ל"רק מודל שפה", שווה לעצור ולדבר על גישות משולבות: גם להביא את קובץ המידע וגם לייצר על סמך אותו הקובץ את התשובה לשאלה.
הדרך הפשוטה ביותר [7] לספק למודל שפה ידע נוסף רלוונטי היא כמובן פשוט להדביק אותו בצמוד לשאלה. גישה זו מן הסתם עובדת מצוין.
ההפתעה היא שגישה זו עובדת כל כך טוב, שהיא עובדת טוב יותר [8][9] מסימון התשובה עצמה בקובץ המידע.

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

כן אבל GPT.

(בעיות חומר סגור – Closed Book)

מדריך: איך לאמן ChatGPT משלכם?
הגענו לחלק שחיכיתם לו – אימון מודלים "לזכור" מידע. בלי שטויות וקבצים חיצוניים.
כמו שכולנו כבר יודעים, בהינתן מספיק פרמטרים מודלי ענק מסוגלים לשנן ידע עובדתי בתוך המשקולות שלהם. ולכן אפשר להשתמש במודלים אלו על מנת לענות על שאלות ללא קבצים חיצוניים, כמו במבחן עם חומר סגור.
ישנם שני סוגי מודלים עיקריים המסוגלים לענות על שאלות:
  • מודלי השלמת טקסט (GPT), מאומנים על טקסט המכיל שאלה ומיד אחריה את התשובה לשאלה וכך לומדים "להלשים" תשובות לשאלות.
  • מודלי טקסט -> טקסט (T5), מאומנים על זוגות טקסטים נפרדים (שאלות ותשובות) כשטקסט השאלה נכנס אל המודל וטקסט השתשובה יוצא מן המודל

למי שלא מכיר: שימו לב, במודל הקודם יש טקסט אחד והמודל לומד להמשיך אותו ובמודל השני יש טקסים שונים: קלט ופלט

כמה ידע אפשר בכלל לקודד לתוך מודל?
כולנו יודעים שמודלים בגדלי מאות מיליארדי פרמטרים מסוגלים לשנן מידע מצוין. אבל מה עם מודלים בגדלים נורמלים יותר? בהכללה השאלה היא: בהנתן מודל בגודל מסוים, כמה מידע אפשר לקודד לתוכו? בעבודה מעניינת [10] נשאלה השאלה עד כמה באמת "מעשי" הרעיון הזה של קידוד ידע בתוך מודל? כמה ידע אפשר להכניס אל המודל ומאיזה גדלי מודלים נוכל להתחיל לסמוך על המודל? על מנת לענות על שאלה זו הם אימנו T5 בכמה גדלים שונים ומדדו מספר מדדים.
בשורה התחתונה: התוצאות הטובות ביותר הושגו על ידי המודל T5.1.1 (שהוא T5 עם שיפצורים) כשגם עבר אימון מקדים על השלמת "מילים מעניינות" לפני האימון העיקרי למענה על שאלות.
לפי המאמר: כשבוחנים ראש-בראש מודלי שפה גדולים מאד מול פתרונות ספר סגור. הם מפסידים!

זוכרים את ההתחלה? תברחו!

והמודלים שבדקו יקרים מאד לאימון: 11 מיליארד פרמטרים! עדיין מפסידים!

די להתבכיין. איך מתחילים?

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

בשלב הראשון עלינו לבחור מודל.

מודלי השלמת טקסט – GPT

על מנת לקבל את התוצאות "האנושיות" שכולנו ראינו שChatGPT מסוגל להן, רצוי לאמן מודל להשלמת טקסט (GPT) – הם "אנושיים" יותר, תשובותיהם ארוכות יותר והם מכלילים מצוין לשאלות שמעולם לא ראו.
הבעיה העיקרית איתם היא שהם משמעותית פחות יעילים ממודלי טקסט -> טקסט (יש שיגידו אפילו "פי 7" פחות יעילים [11]) ולכן על מנת להגיע לאותם הביצועים נדרש מודל משמעותית גדול, כבד ויקר יותר.
סביר להניח שתתאכזבו מהתוצאות היגיעו ממודל שקטן מ20 מיליארד פרמטרים. מודלים להשלמת טקסט די מוגבלים במשימות שקשורות בהפגנת ידע, הם די טובים אבל כשמדובר במשימות שאינן דורשות יותר מדי ידע חיצוני, לדוגמה: המרה בין פורמטים של טקסט.
מודלים קטנים "מרגישים" רובוטיים ובניגוד למודלי טקסט->טקסט כשהם טועים: הם טועים בגדול. טעויות דביליות לחלוטין שאדם מעולם לא היה עושה.

דוגמאות: גלקטיקה כתבה מאמר שלם על אכילת זכוכית לריפוי מחלות. קודקס החליט שכדורגל הוא הפתרון לשלום במזרח התיכון

אם בכל זאת תרצו לנסות את מזלכם עם מודלים להשלמת טקסט, יש כמה אופציות אפשריות: (הגיעו עם מאות אלפי דוגמאות)
  • אופציה 1. GPT-2 בגדלים (base: 117M, medium: 345M, large: 774M, XL: 1.5B): הייתי מנסה להשתמש ב-GPT-2 ולראות איך התוצאות שאתם מקבלים ממנו. אולי לא המודל הכי טוב אבל אם יש לכם מזל הוא יכול להספיק. https://huggingface.co/gpt2
  • אופציה 2. GPT-Neo (1.3B, 2.7B): אותן תוצאות כמו GPT-2 בגדלים זהים אבל הרבה יותר יעיל בצריכת הזיכרון אז אני ממליץ לאמן אותו במקום GPT-2 אם הגדלים האלה מתאימים למשימה שלך.
  • אופציה 3. GPT-J 6B: מודל בגודל 6 מיליארד פרמטרים – של ElutherAI – אופציה טובה לטקסט -> טקסט. הוא גדול (~6B פרמטרים) ובדרך כלל מבין מה אתם רוצה ממנו אבל לא יותר מידי, הוא דורש ומכונה חזקה והתוצאות בדרך כלל לא מספיקות. כאן: https://huggingface.co/EleutherAI/gpt-j-6B
  • אופציה 4. GPT-NEO-X 20B: גרסה גדולה יותר (20 מיליארד פרמטרים) והיא מסוגלת לבצע משימות מבוססות ידע לא רע בכלל. המודל גדול מאוד ודורש מחשב(ים) די חזק(ים) כדי לרוץ ועדיין בסוף אחרי הכל: ייתכן שהתוצאות לא יהיו מי יודע מה. כאן: https://huggingface.co/EleutherAI/gpt-neox-20b

מודלי טקסט -> טקסט – T5:

מודלי טקסט -> טקסט משמעותית קלים יותר לאימון ממודלי השלמת טקסט וככל הנראה גם עובדתית יעילים הרבה יותר. בנוסף: ישנם הרבה מודלים מסוג זה המאומנים למשימות שונות ומשונות ויכול להיות שתמצאו באינטרנט מודלים המאומנים על משימות הדומות לשלכם ויחסכו ממכם משאבים.
באופן כללי אני ממליץ על גרסאות הLarge ומעלה לכל גרסאות T5 בעדיפות לכמה שיותר גדול. את T5-Large אפשר לאמן על GPU עם 24GB זכרון בהנתן שהשאלות והתשובות לא ארוכים מידי [ואם הם כן, הציצו בפוסט הקטנת צריכת הזכרון לאימוני מודלים שכתבתי לא מזמן].
  • אופציה 1. T5-Large מודל הטקסט -> טקסט הקלאסי T5 בגרסה מספיק גדולה לחלק מהבעיות: https://huggingface.co/t5-large
  • אופציה 2. Flan-T5-Large המודל הקלאסי עבר לאורך השנים שיפורים ושיפוצים ואומן במיוחד לביצוע הוראות. נחשב "טוב יותר מT5 בהכל". נמצא כאן: https://huggingface.co/google/flan-t5-large
  • אופציה 3. LongT5-Large לטקסטים ארוכים: גרסה מיוחדת לT5 המכילה אטנשן גלובלי ומתמחה בטקסטים ארוכים: https://huggingface.co/google/long-t5-tglobal-large

שימו לב: המשקולות בHuggingface של המודל LongT5-Large לא נכונות. משום מה הם מוחקים את הissues ולא מתקנים. כדי לעקוף את הבעיה הוסיפו from_flax לטעינת המודל כדי לטעון את המשקולות המקוריות והנכונות של של גוגל.

  • אופציה 4. mT5-Large בשביל עברית: המודל T5 אומן בשפות רבות (כולל עברית), אם אתם מעוניינים לאמן בעברית, זה המודל בשבילכם: https://huggingface.co/google/mt5-large
איך מאמנים את המודל לענות על שאלות?
התשובה תלויה במודל אותו תבחרו.

מודלי GPT: אימון שאלות ותשובות

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

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

אם יש לכם כוח: במידה ואתם מאמנים מודל גדול (6 מיליארד פרמטרים ומעלה) תוכלו לנצל את הכוח האדיר המגיע מגודל המודל – אם תוסיפו כמה מאות דוגמאות מתויגות ידנית המודל יכליל מצוין לדאטה שלכם [גם 100 או 200 מספיק]. זכרו: אנו לא מעוניינים באמת ללמד את המודל לענות על כל השאלות האפשריות בנוגע לדאטה, נרצה שרק ילמד לשלב בין "לענות על שאלה" לבין "הדאטהסט" שלכם.

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

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

מודלי T5: אימון שאלות ותשובות

מודלים אלו משמעותית קלים יותר לשליטה ממודלי השלמת טקסט. תוצאות ראשוניות מתקבלות מהם מיד בתחילת האימון ויחסית מאד מהר תדעו האם האימון הולך לכיוון הנכון.
הבעיה העיקרית איתם היא בדיוק אותו הדבר: הם מדוייקים "מידי". תשובותיהם "רובוטיות" ולפעמים "משעממות" יותר מGPTים. אך עבור שאלות ותשובות בשפה חופשית כשלרשותינו עומד כוח מחשוב "נורמלי" בלבד – הם פתרון לא רע!

וגם: הם חמודים. הם ממש מנסים!

על מנת לפתור בעיה זו, עלינו לקחת צעד נוסף כדי לעזור להם: עלינו לנסח הרבה שאלות ותשובות על סמך הדאטה שלנו.
כדי לעשות זאת, נוכל להשתמש בשני מודלים מאומנים מתנת סיילספורס:
שימוש במודלים אלו פשוט במיוחד, בהנתן קלט: הם מייצרים שאלה שהקלט הוא התשובה אליה – התהליך ההפוך ממענה על שאלות. הרצה שלהם על הדאטה שלכם תנסח אותו מחדש כשאלות ותשובות ולאחר מכאן תוכלו להשתמש בו על מנת לאמן את T5.
בונוס! אוגמנטציה: מודל המנסח מחדש את הדאטה
מודלי שפה יכולים להכנס ממש בקלות לאוברפיטינג, זאת בשל הסיבה שלפעמים חלקים גדולים מהטקסטים חוזרים על עצמם בסט האימון בלי שנרגיש. מה שגורם למודלי שפה חזקים (T5 גדולים למשל) להתכנס לשחזור אותם הטקסטים במקום להכללה.
פתרון פשוט לבעיה זו היא אוגמנטצית ניסוח מחדש של הטקסט בזמן האימון. אותה תוכלו לבצע עם המודל Parrot Paraphraser T5 כאן https://huggingface.co/prithivida/parrot_paraphraser_on_T5

התעלמו מכל הכתוב למעלה ואל תכנסו לזה מראש.

הבהרה: כל הכתוב כאן כתוב מניסיון. הכל נוסה ונבדק מראש. לא אמליץ לכם להכנס להרפתקאות בסדר גודל כזה בלי לנסות בעצמי קודם.

דאטהסטים לשאלות ותשובות:
[1] – סטנפורד – SQuAD 2.0 שאלות ותשובות בנושאים רבים, נחשב למבחן הנפוץ ביותר: https://rajpurkar.github.io/SQuAD-explorer/
[2] – מבחני חטיבה ותיכון באנגלית – RACE כאן: http://www.qizhexie.com/data/RACE_leaderboard
[3] – סיווג סוג שאלות The Text REtrieval Conference (TREC) כאן: https://trec.nist.gov/data/qa.html
[4] – מיקרוסופט – כ100,000 שאלות אמיתיות ממנוע החיפוש בינג ותשובות אנושיות – MS MARCO כאן: https://microsoft.github.io/msmarco/
[5] – שאלות ותשובות CuratedTREC – הגרסה המסודרת של TREC נמצאת כאן: https://github.com/brmson/dataset-factoid-curated
[6] – גוגל – שאלות מחיפושי גוגל ותשובות ממתייגים אנושיים: https://ai.google.com/research/NaturalQuestions/dataset
[7] – הדאטהסט המפורסם WebQuestions לשאלות ותשובות בנושאים כללים (דוגמה: איפה למד אובמה?) https://github.com/brmson/dataset-factoid-webquestions
[8] – שאלות מבינג, תשובות מוידיפדיה: WikiQA כאן: https://www.microsoft.com/…/wikiqa-a-challenge-dataset…/
[9] – שאלות על סרטים: WikiMovies נאסף מOMDB ו MovieLense ונמצא כאן: https://research.fb.com/downloads/babi/
[10] – הבנת הנקרא: שאלות ותשובות על עמודי ויקיפדיה כשהתשובה נמצאת בתוך העמוד – WikiReading נמצא כאן: https://github.com/google-research-datasets/wiki-reading
[11] – שאלות טריויה כלליות וקבצי מידע התומכים בתשובה: TriviaQA נמצא כאן: https://nlp.cs.washington.edu/triviaqa/
[12] – כ200,000 שאלות ותשובות מתוך המשחק Jeopardy! נמצא כאן: https://www.kaggle.com/tunguz/200000-jeopardy-questions
[13] – דיפמיינד – שאלות ותשובות מתוך כתבות חדשות בCNN ובDailyMail נמצא כאן: https://cs.nyu.edu/~kcho/DMQA/
[14] – מטא – אוסף דאטהסטים להבנת טקסט מבית מטא: https://research.fb.com/downloads/babi/
[15] – דאטהסט לוידוא עובדות FEVER נמצא כאן: https://fever.ai/data.html
[16] – שאלות ותשובות ממנועי חיפוש SearchQA נמצא כאן: https://github.com/nyu-dl/dl4ir-searchQA
[17] – שאלות טריויה מכמה מקורות ותשובות ממנועי חיפוש Quasar-T נמצא כאן: https://github.com/bdhingra/quasar
[18] – שאלות מתוך המשחק Quiz Bowl נמצא כאן: https://people.cs.umass.edu/~miyyer/qblearn/index.html
[19] – שאלות ספציפיות שנבחרו מתוך הדאטהסט NQ-OPEN נקרא AmbigNQ ונמצא כאן: https://nlp.cs.washington.edu/ambigqa/
[20] – שאלות "טבעיות" שהופיעו באינטרנט והתשובות להן Natural Questions נמצא כאן: https://huggingface.co/datasets/natural_questions
[21] – שאלות תשובות ומידע נוסף רלוונטי מתוך טוויטר – TweetQA נמצא כאן: https://huggingface.co/datasets/tweet_qa
רפרנסים:
[1] – הפתרון המוגזם, קידוד כל מאגר המידע ברמת המשפט: https://arxiv.org/abs/1906.05807
[2] – אימון מודל שאלות ותשובות end-2-end כאן: https://arxiv.org/abs/1902.01718
[3] – עבור שאלה מסוימת – מה קובץ המידע הנכון המכיל את התשובה לאותה השאלה (מודל ORQA) כאן :https://arxiv.org/abs/1906.00300
[4] – לוס בשלבים: https://arxiv.org/abs/2002.08909
[5] – אימון קצה לקצה סקיילאבילי – https://arxiv.org/pdf/2104.08710.pdf
[6] – אימון ישירות על שאלות ותשובות – https://arxiv.org/abs/2004.04906
[7] – מודלים משולבים – להביא קובץ מידע רלוונטי וגם לייצר תשובה: https://arxiv.org/abs/2005.04611
[8] – מודלים גנרטיבים עובדים טוב יותר ממודלים המסמנים את התשובה: https://arxiv.org/abs/2005.11401
[9] – מודלים גנרטיבים מודרנים (T5) ליצירת תשובה לשאלה: https://arxiv.org/abs/2007.01282
[10] – כמה ידע אפשר לקודד לתוך מודל מאומן? https://arxiv.org/pdf/2002.08910.pdf
[11] – מודלי שפה גנרטיבים גרועים משמעותית ממודלי טקסט -> טקסט: https://www.facebook.com/photo/?fbid=10160162096429663…
הבלוג הבא, על חלקים גדולים ממנו התבססתי בפוסט: https://lilianweng.github.io/posts/2020-10-29-odqa/
עוד בנושא: