close menu

מדריך: כך תשלטו במודלי שפה

למה כשאני מנסה ליצור טקסט עם המודל שלי הוא סתם מתפזר לכל מיני נושאים ואז נתקע בלולאה?

אבל איכשהו ChatGPT תמיד עונה לעניין?

.

חוץ מכשהוא מחרטט:

כולנו כבר ראינו את ChatGPT מחרטט בבטחון.

אבל.. למה? למה הוא עושה לנו את זה?

ממש פשוט: המשימה היחידה שהוא יודע לעשות היא לנחש מה תהיה המילה הבאה.

כמו ההשלמה האוטומטית בפלאפון. רק יותר טוב.

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

ובכל זאת, למה לחרטט?

כשאנחנו מבקשים ממנו להשלים טקסט שמעולם לא ראה (רחוק מאד מהטקסט עליו הוא התאמן בעבר) בדרך כלל הוא "ינסה" לסיים את המשפט כמה שיותר מהר – ימשיך בהוספת כמה מילים הגיוניות תחבירית ובדרך כלל לא יתאמץ להוסיף יותר מידי תוכן איכותי ומעניין.

הבעיה: זה משעמם.

לא לשם כך התכנסנו, טקסט ללא ערך מוסף או מידע מעניין פשוט משעמם מידי.

הפתרון: להכריח אותו "להמציא" – משמעות הפרמטר: "טמפרטורה"

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

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

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

מה זה "לחרטט"?

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

כך נגרם ה"חרטוט" – בחירה רנדומלית של מילים "לא סבירות" והשלמת המשך המשפט על ידי המודל.

מדריך: כך תשלטו במודלי שפה.

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

ביישומים רבים נדרש לשליטה טובה בפלט המודל, כיצד נגרום מודל לאמר "מה שאנחנו רוצים" שיאמר?

שיטות דגימה ממודלים

אסטרטגיות פענוח טקסט ממודלי שפה

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

טמפרטורה:

כמו שנכתב למעלה, עבור כל מילה במשפט, המודל מנסה "לנחש" מה תהיה המילה הבאה בכל שעבור כל אחת מכל המילים האפשריות, המודל מחזיר "מה ההסתברות שמילה זו היא הבאה".

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

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

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

כך או כך פענוח מבוסס מקסום המודל אינו מבטיח טקסט באיכות גבוהה.

דגימת Top-k: בכל שלב דגימה, נבחרות רק K המילים בסבירות הגבוהה ביותר ומסת ההסתברות מחולקת בניהן מחדש. מחברי המאמר [1] מציעים לבחור את המילה הבאה בין K המועמדות הסבירות ביותר והם טענו שגישה זו יוצרת תוכן חדשני יותר שפחות חוזר על עצמו מאשר בשימוש Beam Search פשוט.

דגימת Nucleus sampling [2]: (ידוע גם בתור "Top-p sampling") החסרון העיקרי של דגימת top-k הוא שהמספר המוגדר מראש אינו לוקח בחשבון עד כמה התפלגות ההסתברות עצמה עשויה להיות מוטה. דגימת Nucleus sampling בוחרת את הקבוצה הקטנה ביותר של מועמדים מובילים כך שההסתברות המצטברת של כולם יחד עוברת סף כלשהו (למשל 0.95) ולאחר מכן מנרמלת ההתפלגות בין המועמדים שנבחרו.

דגימה עם Penalty [3]: כדי להימנע מהבעיה הנפוצה של יצירת מחרוזות החוזרות על עצמן במאמר ה-CTRL המחברים הציעו שיטת דגימה חדשה המענישה חזרות על ידי מתן ניקוד על מילים שחזרו על עצמן בעבר בטקסט.

דגימה מודרכת

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

ניתן להכניס גם את ההעדפות שלנו לנושא או לסנטימנט בפונקציית דירוג המועמדים להיות המילה הבאה כדי להנחות את הטקסט לכיוון אותו אנו מעדיפים. ניתן להגדיר ציון מילים אלו על ידי שילוב בין המודל הגדול למאפיינים נוספים, מאפיינים אלו נועדו לכמת את העדפותינו על ידי היוריסטיקה [4] מודל נפרד [5] או למידה מחיזוקים [6].

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

שימוש במסווג חיצוני או GAN

במאמרים אחרים [9] ניסו גם להשתמש במודל מסווג כלשהו שתפקידו לסווג את הטקסט על פי תכונות שונות אותן אנו מעוניינים למקסם כגון רלוונטיות או גיוון מילים.

כל הסיפור הזה ממש מזכיר GANים ולי אישית עדיין לא ברור למה אף אחד לא מנסה GANים בטקסט – להשתמש במודל נפרד על מנת ללמוד "להיות הלוס" של מודל מסויים ביחס למשימה מסויימת. במאמרים מסויימים [10] למשל ניסו לאמן את המאבחן להבדיל בין טקסט שנוצר על ידי אדם לבין טקסט שנוצר ממודל.

הבעיה בBeam Search

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

אימון מודלים ניתנים לשליטה

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

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

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

אימון Prefix-Tuning

אין ספק שאימון מודל לפתירת המשימה במיוחד משפר את המודל אך האם הוא משפר את המודל עד כדי כך? תלוי בכמות הדאטה. במצב בו מספר הדוגמאות המתוייגות קטן יחסית (עד 3000 למשל) נראה שPrefix-Tuning מגיע לתוצאות טובות יותר.

בכמה עבודות המשך [13][14] נבדקו כמה אסטרטגיות שילוב קידומת הטקסט ונמצא ששילוב הקידומת רק בוקטור המקורי (ולא ביצוג הנסתר בכל השכבות במודל) מוביל לתוצאות הטובות ביותר.

אימון P-Tuning

במאמר [15] עם השם המפוצץ GPT Understands, Too מודגמת שיטת המשך לPrefix Tuning הנקראת P-Tuning (נו באמת), בשיטה זו מוסיפים טוקנים מיוחדים לתחילת וסוף הקלט ומוסיפים שכבת LSTM בין יצוג הפרומפט והמודל עצמו, תפקיד LSTM זה הוא ללמוד את יצוגי הטוקנים המיוחדים כך שיהיה מותאם כמה שיותר למשימה אותה אנו מאמנים את המודל לבצע. באמצעות שיטה זו הצליחו הכותבים לשפר את ביצועי GPT-2 ביותר מ20% בSuperGlue.

אימון Prompt Tuning

במאמר זה [16] הכותבים מפשטים במידה רבה את הרעיון אימון "קידומת" לטקסט על ידי כך שהם מאפשרים להוסיף רק מס' טוקנים קטן הניתן לאימון לכל משימה ורק לתחילת המודל.

תוצאות מאמר זה מדיהמות:

אימון זריז כזה תחרותי לFine Tuning מלא של המודל עבור מודלים גדולים (מיליארדים) ותוצאה זו מעניינת במיוחד כי מודלים גדולים יקרים מאוד לאימון ואינפרנס.

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

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

אימון Fine-Tuning מלא:

שיטת האימון הפשוטה ביותר היא כמובן: "לאמן את המודל".

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

אימון עם משתני בקרה:

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

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

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

המאמר המפורסם: CTRL

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

לגישה זו יש שתי בעיות עיקריות:

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

היוטיובר – דוד שפירו

למי שמתעניין, ביוטיוב יש בחור בשם דוד שפירו (David Shapiro) שמתעסק בשימושים מתקדמים במודלי שפה גדולים. בסרטונים שלו הוא בונה פרומפטים מתוחכמים לGPT-3 וגם מריץ כמה אימוני Fine-Tuning לGPT-3 לכל מיני משימות קשות (כתיבת סיפורים ארוכים וכדומה).

הוא מגיע מרקע של כתיבה ואני יכול לאמר על עצמי שלמדתי הרבה מאוד ממנו בנושא הPrompt Engineering והגישה הכללית לכתיבה בהירה למודלי שפה. הוא אמנם לא ילמד אתכם על גרדיאנטים ואפטימייזרים אבל הוא מביא אל הסרטונים הרבה מאוד ידע שונה במיוחד ביחס לאנשים המגיעים מרקע יותר טכני. מומלץ.

אימוני RL

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

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

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

בונוס: בנוסף! ניתן להשתמש בRL על מנת לעשות אוברפיטינג למטריקות לפיהן נמדד המאמר ובכך להתקבל לכנסים! [19][20][21][22]

אימון RL ממשוב אנושי

מטריקות פשוטות למדידת ביצועי מודלי השפה די גרועות. ברובן (למשל BLEU או ROUGE) אנחנו מודדים את כמות המילים (או רצפי המילים) החופפת הנמצאות בטקסט אותו יצר המודל ובין הטקסט הרצוי. קל להבין אינטואיטיבית למה מטריקות אילו אינן מודדות "כמה הטקסט מהמודל נכון". למידה ממשוב אנושי ישירות היא דרך מצוינת לאמן מודלי שפה להתנהג כמו שבאמת אנו רוצים.

אין מה להרחיב על המוטיבציה, ככה אימנו את ChatGPT וכולנו כבר מכירים אותו.

למרות שהרחבתי על כך רבות, ארחיב שוב:

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

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

לא חובה לקרוא את ההמשך אם לא מעניין אתכם המימוש הספציפי

עבור PPO:

3.1. למשל עבור PPO (המפורסם במאמרי OpenAI): אמן "ראש value" נוסף למודל המקבל את היצוג הנסתר מבלוק האטנשן האחרון במודל (לא ההסתברויות עצמן, זה לא עובד טוב. ניסיתי.). אמן ראש זה באמצעות MSE.

3.2. השתמש בראש זה על מנת לחזות את הValue של בחירת כל אחת מהמילים להיות המילה הבאה בכל אחד מהאינדקסים האפשריים (אנו מאמנים על רצף, כל רצף מלמד את המודל לחזות N "מילים הבאות" ב"N סיטואציות שונות" כן?)

3.3. חשב את היתרון (Advantage) היחסי בבחירת כל אחת המהמילים הבאות להיות המילה הבאה עבור כל אחד מהמצבים האפשריים לבחירת מילה הבאה הקיימים.

3.4. חשב את ההסתברויות "להיות במצב הנוכחי" ו"לבחור את המילה הספציפית" במצב זה.

3.5. חשב באמצעות כל אלו את כלל העדכון של PPO שלא ארחיב עליו כאן כי זה לא הנושא ועדכן את המודל.

ואל תשכח את 37 הטריקים שלא הוזכרו במאמר המקורי של PPO שבלעדיהם הוא לא עובד.

שימוש בשכבה מיוחדת להכוונת המודל

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

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

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

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

ישנן כל מיני עבודות [23] שעושות את זה, בדקתי את זה גם בעצמי – זה עובד טוב.

הכוונת מודל מאומן מראש על ידי מודל צד

במאמר [24] מAI21 הכותבים לוקחים רעיון זה שלב אחד קדימה ומוסיפים כמה שכבות חדשות למודל ענק קפוא ומאומן מראש. שכבות אלו ממשיכות את עיבוד הטקסט המבוצע על ידי המודל הגדול והסתברויות כל המילים "להיות המילה הבאה" מהן מתווספת אל הסתברויות המילים מהמודל הגדול (כך שהתוצאה אחרי נרמול נשארת הסתברות)

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

אימון אנסמבל

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

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

אימוני Unlikelihood

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

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

שיטת אימון מיוחדת [25] המנסה לפתור בעיה זו נקראת Unlikelihood ובשיטה זו מציעים הכותבים להוסיף ביטוי ללוס שתפקידו "להחליש בכוח" הסתברות מילים מסויימות להיות המילה הבאה במשפט.

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

שימוש ביצוג המשפט מתוך המודל

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

בתמונה: טקסט הנוצר על ידי Beam Search הרבה פחות "מפתיע" מטקסט אנושי אמיתי – תוצאה מפורסמת מאוד.

רפרנסים:

[1] – דגימת Top-K כאן: https://arxiv.org/abs/1805.04833

[2] – דגימת Nucleus sampling כאן: https://arxiv.org/abs/1904.09751

[3] – דגימה עם Penalty, מאמר CTRL כאן: https://arxiv.org/abs/1909.05858

[4] – הכוונת טקסט עם היוריסטיקה: https://www.aclweb.org/anthology/P17-4008/

[5] – הכוונת טקסט עם מודל נפרד: https://arxiv.org/abs/1805.06087

[6] – הכוונת טקסט עם למידה מחיזוקים: https://arxiv.org/abs/1701.06549

[7] – דגימה מוטה על פי מאפיניים ידניים: https://www.aclweb.org/anthology/P17-4008/

[8] – דגימה מוטה על פי דמיון האמבדינגס: https://arxiv.org/abs/1805.06087

[9] – דגימה מוטה מסווג כלשהו: https://arxiv.org/abs/1805.06087

[10] – אימון דיסקרימינטור כמו בGAN כאן: https://arxiv.org/abs/2002.10375

[11] – הוספת רגולריזציה להסתברויות המילים כדי לייצר טקסט עם התפלגות מילים "מפתיעה": https://arxiv.org/abs/2010.02650

[12] – העבודה Prefix Tuning כאן: https://arxiv.org/abs/2101.00190

[13] – עבודות המשך על Prefix Tuning הבודות אסטרטגיות שונות: https://arxiv.org/abs/2101.00190

[14] – עבודות המשך על Prefix Tuning הבודות אסטרטגיות שונות: https://arxiv.org/abs/2103.10385

[15] – מאמר P-Tuning כאן: https://arxiv.org/pdf/2103.10385.pdf

[16] – מאמר Prompt-Tuning כאן: https://arxiv.org/pdf/2104.08691.pdf

[17] – אימון מודל לכתיבת סיפורים: https://arxiv.org/abs/1805.04833

[18] – המאמר CTRL בו מאמנים מודל עם טוקנים מיוחדים המכווינים אותו להתנהג בצורה מסויימת: https://arxiv.org/abs/1909.05858

[19] – אימון מודל עם RL להיות "ממש טוב" בBLEU כאן: https://arxiv.org/abs/1511.06732

[20] – אימון מודל עם RL להיות "ממש טוב" בBLEU כאן: https://arxiv.org/abs/1707.07402

[21] – אימון מודל עם RL להיות "ממש טוב" בROUGE כאן: https://arxiv.org/abs/1511.06732

[22] – אימון מודל עם RL להיות "ממש טוב" בROUGE כאן: https://arxiv.org/abs/1705.04304

[23] – שימוש במודל נוסף על מנת להכווין את מודל השפה ללמוד טקסטים עם מאפיינים מסויימים: https://arxiv.org/abs/1912.02164

[24] – מאמר מAI21 בו הכותבים משתמשים במודל צדדי על מנת "להיות הלוס" למודל מאומן מראש להשלמת טקסט: https://arxiv.org/abs/2006.16823

[25] – אימון Unlikelihood כאן: https://arxiv.org/abs/1908.04319

 

עוד בנושא: