NLP

בחירה נכונה של מודל שפה

מיועד ל- מטיבי לכת (כתבה מאוד טכנית)

נכתב על ידי yuval schreiber

בכתבה זו סיכמתי את המאמר: “ Domain-Specific Language Model Pretraining for Biomedical Natural Language Processing” שפורסם ב 16.09.21 ב arxiv. זהו מאמר מומלץ למתעניינים במודלי שפה עבור דומיינים שונים, בעיקר למתמקדים בדומיין הרפואי. המאמר כתוב בצורה ברורה ודורש היכרות בסיסית עם מודלי שפה ו-BERT. למי שרוצה להכיר יותר את המושגים הבסיסים שמוזכרים מוזמן לקרוא עוד בקישורים למטה.

מבוא

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

אך מודל BERT המקורי אומן על טקסטים מהאינטרנט כמו ויקיפדיה וספרים, ולצורך התאמתו לדומיינים אחרים, כמו הדומיין הרפואי, בד”כ ממשיכים לאמן אותו על אותן משימות self-supervised עם טקסט מהדומיין המסוים.

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

BERT

אוצר מילים– כדי להימנע מהבעיה בה מילים לא מופיעות באוצר המילים, ביצירת אוצר המילים לטוקנזיציה משתמשים ביחידות תתי מילים. במאמר משתמשים באלגוריתם WordPiece שהוא וריאציה של Byte-Pair Encoding (BPE) (אלגוריתם שמנסה בצורה חמדנית למצוא תתי מילים שיכולות ליצור את כל המילים, ומגדיל את אוצר המילים ע״י שרשור תתי המילים עד להגעה למספר מילים שהוגדר מראש), רק שבבחירת תתי המילים לשרשר מתבסס על מודל unigram ולא על תדירות.

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

ארכיטקטורה– מבוססת transformer שהוא מנגנון self-attention מרובה ראשים ושכבות, ארכיטקטורה עדיפה על LSTM מכיוון שמקבילית ותופסת תלויות ארוכות טווח.
רצף טוקני הקלט מעובד תחילה ע”י מקודד לשוני שסוכם איבר איבר את ה-embedding-ים של הטוקן של המיקום ושל הקטע (לאיזה קטע בטקסט שייך הטוקן), וזה מועבר למספר שכבות transformer, בכל שכבת transformer נוצר ייצוג הקשרי לכל טוקן, ע”י סכימת טרנספורמציה לא לינארית של ייצוגי כל הטוקנים בשכבה הקודמת ממושקלים לפי ה-attention, שמחושב ע”י שימוש בייצוגי הטוקנים בשכבה הקודמת כשאילתה (query). השכבה האחרונה פולטת ייצוג הקשרי לכל הטוקנים שמשלב מידע מכל הטקסט. 

פיקוח עצמי (self-supervision)– החידוש ב-BERT הוא השימוש במודל שפה ממוסך, שמחליף תת קבוצה של טוקנים באופן אקראי בטוקן [mask] ומבקש ממודל השפה לחזות אותם, לעומת מודלים מסורתיים שמנבאים את הטוקן הבא על סמך הקודמים. פונקציית המטרה היא CE בין הטוקנים הנחזים למקוריים. ב-BERT ו-RoBERTa נבחרים 15% מהטוקנים, מתוכם 80% ממוסכים 10% לא משתנים ו-10% מוחלפים בטוקן אקראי מאוצר המילים. (גישה נוספת היא להגדיל את שיעור המיסוך בהדרגה לאורך האפוקים מ-5% ל-25% מה שהופך את האימון ליציב יותר).
ב-BERT המקורי קל לחזות את הטוקנים הממוסכים מכיוון שלרוב טוקן מייצג תתי מילה וידיעת שאר המילה מקלה, במאמר משתמשים במיסוך של מילים שלמות אשר מאלץ את המודל ללכוד יותר תלויות הקשריות. בנוסף ב-BERT משתמשים גם במשימת חיזוי האם משפט אחד עוקב לשני בהינתן זוג משפטים (התועלת של משימה זו מוטלת בספק).

מודל שפה ביו-רפואי מאומן מראש (ביו-רפואה משמש כדוגמה לדומיין מסוים)

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

אימון מראש מעורבב דומיינים– הגישה הסטנדרטית לאימון מראש של BERT ביו-רפואי אשר נקראת אימון מתמשך (כמו ב-BioBERT) אשר מבצעת אימון מראש עם דומיין כללי (BERT המקורי – לכן נוח), וממשיכה את האימון על שתי המשימות (פיקוח עצמי) עם שימוש בטקסט ביו-רפואי (במקרה של BioBERT על תקצירי PubMed וכתבות מלאות של PubMed, ובמקרה של BlueBERT על PubMed והערות קליניות לא מזוהות מ-MIMIC-III).
מודל נוסף הוא SciBERT אשר מתאמן מאפס על טקסט ביו-רפואי וטקסט מדעי המחשב (שהוא מחוץ לדומיין). 

אימון מראש מאפס לדומיין מסוים– הגישה המעורבת הגיונית אם לדומיין המסוים יש מעט טקסט, אך זה לא המקרה בביו-רפואה, ב-PubMed יש יותר מ-30 מיליון תקצירים ומתווספים יותר ממיליון כל שנה.
יתרון של אימון מראש לדומיין מסוים הוא שאוצר המילים בתוך הדומיין, כשהטוקנזיציה מבוססת על אוצר מילים כללי כמו ב-BERT הרבה מילים מהדומיין המסוים עשויות להתפצל באופן לא רלוונטי, למשל המחלה lymphoma תפוצל לטוקנים l-ym-ph-oma. יתרון נוסף הוא שהמודל לא מוותר על אופטימיזציה של דאטה מהדומיין על חשבון אופטימיזציות אחרות.

BLURB

בעבודות קודמות על אימון מראש ביו-רפואי השתמשו במשימות ודאטה סטים שונים כדי להעריך ביצועים, מה שהקשה להשוות ולהעריך את ההשפעה של מודלי שפה מאומנים מראש. לכן יצרו את BLURB שמתמקד ביישומי NLP ביו-רפואיים מבוססי PubMed, תוך תיעדוף בחירה של דאטה סטים ששימשו בעבודות קודמות על אימון מראש ביו-רפואי כדי שתהיה היכולת להשוות. ציון מסכם של מודל על BLURB יהיה ממוצע הציונים על סוגי המשימות הבאות: זיהוי ישות שם (NER), חילוץ מידע רפואי מבוסס ראיות (PICO), חילוץ קשרים, דמיון משפטים, סיווג מסמכים, מענה על שאלות (QA).

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

כוונון עדין ספציפי משימה

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

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

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

כדי להקל על ההשוואה במאמר מבצעים את אותו כוונון עדין לכל BERT וכל משימה, משתמשים ב-Loss CE למשימות סיווג וב-MSE למשימות לרגרסיה, מבצעים חיפוש הייפרפרמטרים ע”י שימוש בסט ה-dev עם מטריקות מתאימות למשימה, ובדומה לעבודות קודמות עושים כוונון עדין גם לראש וגם למודל הבסיסי. 

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

הגדרות ניסוייות

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

תוצאות

אימון לדומיין ספציפי מראש מול אימון מעורבב דומיינים מראש

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

השפעה של שיטות אימון מראש שונות

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

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

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

1) מאמרים מלאים מכילים יותר רעש מתקצירים, ומכיוון שרוב המשימות מבוססות על תקצירים טקסטים מלאים עשויים להיות מעט מחוץ לדומיין.

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

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

ניתן לראות שעבור משימות זיהוי ישות שם וחילוץ יחסים שכבה לינארית מספיק טובה (מכיוון ששימוש ב-BERT כבר לוכד תלויות לא לינאריות לאורך הטקסט) ושימוש ב-Bi-LSTM לא מוביל לשיפור.

השפעת סכמת התיוג במשימת NER:

עבור שיטות כמו CRF סכמת תיוג שמבדילה בין מיקום המילה בתוך הישות (BIO או BIOUL) עשויה להיות יתרון, אך עבור מודלי BERT, כפי שניתן גם לראות בטבלה מעלה, התועלת של סכמת תיוג מורכבת פוחתת וההבדל מינורי.

השפעת דמיפיקציה של ישויות וקידוד קשרים:

לסימון ישויות 3 אפשרויות-

1) דמפיקציה של ישויות- החלפת הישויות שבקשר בתוויות ישויות השם שלהן

2) טקסט מקורי

3) סימוני ישויות- הוספת טוקן התחלה וסוף לפני ואחרי כל ישות בקשר

לאופן קידוד היחסים 3 אפשרויות-

1) הייצוג ההקשרי של טוקן CLS בתחילת הטקסט

2) שרשור הייצוגים של הישויות בקשר

3) במקרה של הוספת טוקני התחלה וסוף- שרשור ייצוגי טוקני ההתחלה של הישויות

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

סיכום

המאמר קורא תיגר על ההנחה הרווחת באימון מראש של מודלי שפה, ומראה שאימון מראש מאפס ספציפי לדומיין יכול לשפר משמעותית אימון מראש מעורבב דומיינים (כמו אימון מראש מתמשך ממודל של שפת דומיין כללי), מה שמוביל לתוצאות SOTA חדשות עבור מגוון רחב של יישומי NLP ביו-רפואיים.
בנוסף יצרו את BLURB, בנצ’מרק מקיף ל-NLP ביו-רפואי הכולל מערך מגוון של משימות, שמאפשר השוואה בין מודלים.

קישורים

העמקה ב-BERT ו-transformer-ים

העמקה ב-WordPiece ו-Byte Pair Encoding 

 העמקה ב-LSTM

העמקה ב-CRF

Posted by yuval schreiber in deep

מה זה Attention Mechanism ואיך זה עובד?

מיועד ל- מטיבי לכת (כתבה מאוד טכנית)

נכתב על ידי bar madar

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

על מנת להבין טוב יותר מהו Attention, בכתבה זאת נענה על השאלות הבאות:

  • מהו Attention בעולם הביולוגי, ואיך הוא מיושם בעולם ה AI?
  • כיצד מוגדר מנגנון Attention כללי ומהם מרכיביו?
  • דוגמא פרקטית לAttention  במכונת תרגום
  • מנגנון הScaled Dot-Product Attention ב Transformers

בואו נתחיל!

Attention  בעולם הביולוגי

Attention, או בעברית – “קשב”, הוא תחום רחב מאוד, שבעולם הביולוגי נחקר לעיתים קרובות בשילוב עם “עוררות”, “עירנות” ו”מעורבות סביבתית”.

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

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

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

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

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

(עכשיו אחריי שהסתכלתם על התמונה וזיהיתם את הפרי, תוכלו בלי להסתכל שוב, להגיד כמה אנשים יש בחוף? 🙂

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

Attention בעולם ה AI

במודלים של רשתות נוירונים מלאכותיות, יישום מנגנון ה Attention מתבטא בהדגשה דינאמית של המידע הרלוונטי ביותר מתוך כלל המידע הנתון, ושימוש בחלקים הבולטים ממנו.

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

מאיפה זה התחיל?

מנגנון ה Attention בלמידת מכונה,הוצג לראשונה במאמר של Bahdanau et al.(2014) בו הכותבים מנסים לפתור את בעיית צוואר הבקבוק במודלים של seq2seq מבוססים Encoder-Decoder. במודלים אלו, המידע מכל סדרת הקלט, נאסף לווקטור בעל מימד קבוע במוצא ה Encoder(hidden vector). ככל שהסדרה יותר ארוכה או מורכבת, ככה היכולת של אותו ווקטור “לתפוס” את המידע הרלוונטי מכל הקלט פוחתת. כתוצאה מכך, כאשר הקלט הוא ארוך ומורכב, הביצועים של מודלים אלו פוחתים, מכיוון שמידע רלוונטי “נשכח” ולא מתבטא ב hidden vector שהופך להיות צוואר הבקבוק של המודל.

במאמר, הכותבים הציגו את מנגנון ה Attention עבור מודל Encoder-Decoder, אשר מומש ע”י ארכיטקטורת RNN לכל אחד מהצדדים.

כאן בכתבה, נציג תחילה את האלגוריתם הכללי למימוש מנגנון ה Attention, ולאחר מכן נראה כיצד הוא בא לידי ביטוי במודלי ה Transformers הנפוצים היום בעולם ה NLP וה VISION.

אז איך זה עובד?

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

במנגנון ה Attention הכללי, משתמשים ב3 מרכיבים עיקריים שמחושבים על בסיס הדאטה הקיים:

  • Q – queries
  • K – keys
  • V – values

לכל איבר i בסדרה (word embedding – במקרה שלנו), יחושבו 3 ייצוגים וקטוריים נלמדים (Qi, Ki, Vi). ייצוג הקלט (נניח של מילים) כווקטור מספרים זו בעיה מורכבת, ולכן נותנים לרשת כמה אפשריות בלתי תלויות ללמוד אותם.

(Q, K, V) מייצגים את הייצוגים של כלל האיברים בדאטה (אפשר להסתכל עליהם כאל מטריצות שמורכבות משרשור הווקטורים).

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

\( q_i=W^q \cdot x_i \)

עבור קלט של T מילים {wt}, מנגנון ה Attention מורכב מהשלבים הבאים:

  1. עבור כל מילה, מחשבים scores אל מול שאר המילים. ה scores מחושבים ע”י מכפלה סקלרית בין ווקטור q של המילה עם ווקטורי k של שאר המילים (כולל זה ששייך לאותה מילה).

לדוגמא ה score של מילה i אל מול מילה j 

\( e_{i,j}=q_i \cdot k_j \) חשוב לשים לב \( e_{i,j} \neq e_{j,i} \)

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

לדוגמא זהו ווקטור המשקלים של מילה i:

\( α_i = softmax({e_{i,t}})_{t=1..T} \)

3. עבור כל מילה, ה attention מחושב ע"י סכום משוקלל של כל ווקטורי ה value בדאטה vt=1..T יחד עם המשקלים היחסיים שחישבנו בשלב הקודם

לדוגמא:

\(attention(w_i)=\sum_{t=1}^{T} \alpha_{i,t}v_t \)

ווקטור ה attention שמייצג את מילה wi

כאשר vt הוא הווקטור התואם ל kt , שעל בסיסו חישבנו את המשקל αt.

דוגמא פרקטית – מכונת תרגום (Machine Translation)

נניח שיש לנו מודל מתרגם מבוסס Encoder-Decoder - הקלט ל Encoder זה טקסט בצרפתית, ומוצא ה Decoder - הטקסט באנגלית.

כל מילה בטקסט הנקלט מיוצגת ע"י 3 ווקטורים שנשמרים בזיכרון המודל (qi, ki, vi) ,אשר מחושבים ע"י מכפלה של ווקטור המוצא ב Encoder(xi) עם 3 המטריצות המשותפות לדאטה שנלמדות תוך כדיי האימון (Wq, Wk, Wv).

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

בשלב האחרון, סכום ווקטורי משוקלל של המשקלים עם ווקטורי ה value התואמים ייתן את ייצוג ה attention שמכיל מידע רלוונטי מכל היסטוריית המיליםשיהיה הקלט ל Decoder  (ככל שהמשקל עבור מילה מסוימת גדול יותר, ככה אנחנו נותנים לו יותר "קשב" בייצוג הסופי לפניי פעולת ה decoding)

ווקטור ה attention  שחישבנו ייכנס ל decoder ובמוצא תיפלט לנו המילה המתורגמת.

עבור המילה הבאה בתור (xt+1), נבצע את אותו תהליך, כאשר הפעם נשתמש רק בווקטור ה query שלה (qt+1), והמשקלים יחושבו בעזרת צמדי ווקטורי key, value של כל המילים שהמודל ראה עד נקודת הזמן הנוכחית - {vt , kt ; t=1..i+1}

*חשוב לציין - בשונה מהדוגמא הקלאסית, בהרבה מקרים ומודלים, מנגנון ה Attention ממומש באופן Bi-directional, כלומר ה attention של כל איבר ברצף (מילה לדוגמא) מחושב לפי המילים שהיו לפניה ואחריה במשפט. לצורת ה Bi-directional יש יתרון עצום בהבנת קונטקסט הרצף בצורה טובה יותר.

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

דוגמא למודל Bi-directional נפוץ שעושה שימוש ב Attention–BERT.

מנגנון ה Scaled Dot-Product Attention ב Transformers

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

ה Transformer, הוצג לראשונה במאמר Attention is all you need (2017),ובבסיסו, הוא מודל seq2seq, מבוסס ארכיטקטורות של encoder-decoder שהחידוש העיקרי בו, זה השימוש הייחודי במנגנון ה Attention, לטובת מיקוד ה"קשב" בין כל איבר בסדרה לשאר האיברים.

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

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

המרכיבים העיקריים של מנגנון ה Attention ב Transformers הם:

  • q, k - ווקטורים בגודל dk, מכילים את ה query,key  לכל איבר ברצף.
  • v - ווקטור בגודל dv , מכיל את ה value לכל איבר ברצף.
  • Q, K, V - מטריצות שמאחדות סט של ווקטוריqueries, keys, values בהתאמה.
  • Wq, Wk, Wv - מטריצות הטלהממרחב הדאטה הנקלט (word embedding  למשל) אל תתי המרחבים של ה queries, keys, values
  • Wo - מטריצת הטלה למוצא ה Multi-Head (נפרט בהמשך)

במאמר, הכותבים מציגים גרסה שונה מעט ממנגנון ה Attention הכללי, וקוראים לה Scaled Dot-Product Attention, ועליה בונים את קונספט ה Multi-head Attention.

כפי שתיארנו במנגנון ה Attention הכללי, גם כאן ווקטורי ה q, k, v  (הטלות שונות של האיברים ברצף) הם האינפוטים למנגנון ה Scaled Dot-Product Attention.

כשמו הוא, מנגנון ה Scaled Dot-Product Attention, מחשב תחילה מכפלה סקלרית לכל ווקטור q עם כל ווקטורי הk, לאחר מכן ה scale על התוצאה מתבטא בחילוק של המכפלה ב

\( \sqrt{d_k} \)

לקבלת הscore.

בהמשך, כמו במנגנון הAttention הכללי, הscores עוברים בפונקציית Softmax לקבלת המשקלים שמשמשים למשקול ווקטורי ה values.

מטרת הscaling היא למנוע מערכי תוצאות המכפלה הסקלרית להיות מאוד גדולים, ובכךלחלק מערכי הSoftmax להיות קטנים מאוד מה שגורם לתופעת הVanishing Gradient הבעייתית.

לפיכך, החילוק ב scaling factor שבמקרה שלנו הוא

\( \sqrt{d_k} \)

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

ובהמשך המשקלים שיוצאים מה softmax

בפועל, החישובים שמבצע מנגנון ה Scaled Dot-Product Attention יכולים להתבצע באופן יעיל בכך שנבצע אותם על סט של ווקטורים בבת אחת.

לכן, נגדיר את Q, K, V להיות המטריצות שמהוות את הקלט למנגנון (נבצע חישוב מקדים של ווקטורי הq, k, v  לכל איבר ברצף ע"י מטריצות ה (Wq,Wk,Wv), ולאחר מכן נשרשר אותם לקבלת מטריצות Q, K, V).

ונקבל את נוסחת ה Scaled Dot-Product Attention:

\( Attention(Q,K,V)=softmax( \dfrac{QK^t}{\sqrt{d_k}}) \)

כעת, נציג את תהליך חישוב ה Scaled Dot-Product Attention, שלב אחריי שלב:

  • m – כמות האיברים ברצף שנרצה לחשב עבורם את ייצוג הScaled Dot-Product Attention
  • n – כמות האיברים ברצף שנרצה להתחשב בהם כקונטקסט שעל בסיסו נחשב לכל ווקטור את ייצוג הScaled Dot-Product Attention
  1. חישוב ה scores, ע"י מכפלה סקלרית של סט ווקטורי הquery (שורות של מטריצה Q), עם סט ווקטורי ה keys (שורות של מטריצה K).

אם מטריצה Q בגודל nxdk,  ומטריצה K בגודל mxdk, תוצאת המכפלה תיהיה בגודל mxn

\( QK^T=\begin{pmatrix} e_{11} e_{12} ... e_{1n} \\ e_{21} e_{22} ... e_{2n} \\ ... ... ... ... \\ e_{m1} e_{m2} ... e_{mn} \\ \end{pmatrix} \)

2. נבצע scaling לכל score ע"י חילוק בפקטור

\( \sqrt{d_k} \)
\( \dfrac{QK^t}{\sqrt{d_k}}=\begin{pmatrix} \dfrac{e_{11}}{\sqrt{d_k}} \dfrac{e_{12}}{\sqrt{d_k}} ... \dfrac{e_{1n}}{\sqrt{d_k}} \\ \dfrac{e_{21}}{\sqrt{d_k}} \dfrac{e_{22}}{\sqrt{d_k}} ... \dfrac{e_{2n}}{\sqrt{d_k}} \\ ... ... ... ... \\ \dfrac{e_{m1}}{\sqrt{d_k}} \dfrac{e_{m2}}{\sqrt{d_k}} ... \dfrac{e_{mn}}{\sqrt{d_k}} \\ \end{pmatrix} \)

3. הפעלת Softmax על מנת לקבל סט משקלים עבור כל איבר

\( softmax(\dfrac{QK^t}{\sqrt{d_k}})=\begin{pmatrix} softmax(\dfrac{e_{11}}{\sqrt{d_k}}) softmax(\dfrac{e_{12}}{\sqrt{d_k}}) ... softmax( \dfrac{e_{1n}}{\sqrt{d_k})} \\ softmax(\dfrac{e_{21}}{\sqrt{d_k}}) softmax(\dfrac{e_{22}}{\sqrt{d_k}}) ... softmax(\dfrac{e_{2n}}{\sqrt{d_k}}) \\ ... ... ... ... \\ softmax(\dfrac{e_{m1}}{\sqrt{d_k}}) softmax(\dfrac{e_{m2}}{\sqrt{d_k}}) ... softmax(\dfrac{e_{mn}}{\sqrt{d_k}}) \\ \end{pmatrix} \)

4. חישוב סכום משוקלל של סט ווקטורי ה value (שורות של מטריצה V), לקבלת ייצוג ה Scaled Dot-Product Attention

מטריצת V בגודל nxdv, ולכן התוצאה תהיה מטריצה בגודל mxdv כשכל שורה היא ווקטור ייצוג ה Scaled Dot-Product Attention עבור האיבר התואם במטריצת Qdv ובגודל של

\( softmax(\dfrac{QK^t}{\sqrt{d_k}}) \cdot V=\begin{pmatrix} softmax(\dfrac{e_{11}}{\sqrt{d_k}}) softmax(\dfrac{e_{12}}{\sqrt{d_k}}) ... softmax( \dfrac{e_{1n}}{\sqrt{d_k})} \\ softmax(\dfrac{e_{21}}{\sqrt{d_k}}) softmax(\dfrac{e_{22}}{\sqrt{d_k}}) ... softmax(\dfrac{e_{2n}}{\sqrt{d_k}}) \\ ... ... ... ... \\ softmax(\dfrac{e_{m1}}{\sqrt{d_k}}) softmax(\dfrac{e_{m2}}{\sqrt{d_k}}) ... softmax(\dfrac{e_{mn}}{\sqrt{d_k}}) \\ \end{pmatrix} \cdot \begin{pmatrix} v_{11} v_{12} ... v_{1d_v} \\ v_{21} v_{22} ... v_{2d_v} \\ ... ... ... ... \\ v_{n1} v_{n2} ... v_{nd_v} \end{pmatrix}= \begin{pmatrix} \widetilde{x_1} \\ ... \\ \widetilde{x_m} \end{pmatrix} \)

Multi Head Attention

על בסיס המנגנון שהראינו, כותבי המאמר הציגו תוספת של Multi Head לתהליך.

ההבדל במימוש הוא שבמקום ליצור סט אחד של ווקטורי queries, keys, values לכל איבר ברצף ע"י סט יחיד ומשותף של מטריצות {Wk,Wq,WV}, מנגנון ה Multi Head Attention

מייצר h סטים כאלה ע"י h סטים משותפים של מטריצות.

\( \{W^q_i,W^k_i,W^v_i \}_{i=1}^h \)

לאחר מכן, מנגנון ה Scaled Dot-Product Attention מופעל במקביל על כל אחת מ h ההטלות(ללא תלות אחת בשנייה) ומקבלים במוצא h ווקטורי attention לכל אחד מ m האיברים ברצף.

לאחר מכן, מבצעים שרשור בין כל h הווקטורים ששייכים לכל איבר, לקבלת ווקטור בודד בגודל 1 xhdv . הווקטור המשורשר מוטל ע"י מטריצה Wo לקבלת ווקטור הייצוג הסופי.

הרעיון שעומד מאחורי ה Multi Head Attention הוא שכעת פונקציית ה attention יכולה לחלץ מידע מהאיברים ברצף שהם מיוצגים במספר תתי מרחב שונים וכך היכולת לחלץ מידע שתומך במשימה ולהדגיש אותו גדלה משמעותית.

פונקצייתה Multi Head Attention יכולה להיות מתוארת בצורה הבאה:

\( multihead(X)=concat(head_1,head_2,...head_h) \cdot W^o \\ s.t: head_i=attention(X \cdot W^i_q, X \cdot W^i_k, X \cdot W^i_v) \)

לסיכום

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

מי שמתעניין, ורוצה להעמיק עוד יותר, אני ממליץ בחום לקרוא את 2 המאמרים הבאים, שהם בהחלט נחשבים לפורצי דרך בתחום:

מאמר המציג את השימושים ב attention בעולם ה Computer Vision:

אם לאחר קריאת הכתבה צצות לכם שאלות או שתרצו הרחבה נוספת בנושאים קשורים, מוזמנים לכתוב לי למייל או ליצור קשר ב LinkedIn ואשמח לנסות לעזור 🙂

Barmadar13@gmail.com

https://www.linkedin.com/in/bar-madar-838b15160/

Posted by bar madar in deep

מבוא למערכת המלצות ומדדי דיוק מקובלים בתחום

מיועד ל- מתחילים (כתבה קצת טכנית)

נכתב על ידי David Kohav

איך מערכת המלצות עובדת ?

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

מאיפה הנתונים על המשתמש מגיעים ?

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

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

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

ארכיטקטורה נפוצה היא ה TOP-N – בו המערכת מצליחה לזהות את N פריטים (לדוגמה N=10) שהמשתמש הכי מתעניין בהם.

ארכיטקטורה כללית

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

 

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

בסיסי הנתונים בעולם האמיתי יהיו לדוגמא mongodb, קסנדרה או Memcached. בסיסי נתונים אלו מספקים כמות נתונים גדולה בשאילתות פשוטות, באופן אידיאלי הנתונים מנורמלים באמצעות טכניקות כמו mean centering או z-scores כדי להבטיח שהנתונים דומים בין המשתמשים אבל בעולם האמיתי לעיתים קרובות הנתונים שלנו דלילים מכדי לנרמל אותם ביעילות.

  1. candidate generation –  בתהליך אנו רוצים לייצר מועמדים להמלצה, פריטים שלדעתנו עשויים להיות מעניינים עבור המשתמש בהתבסס על התנהגותו בעבר, כך שבשלב ייצור המועמדים, לוקחים את כל הפריטים שהמשתמש ראה בהם עניין בעבר ואז עם מאגר נתונים אחר item similarities להתייעץ בהתבסס על התנהגות מצטברת.

דוגמה:

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

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

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

  1. בשלב הבא נעבור לדירוג מועמדים – candidate ranking.

ישנם מועמדים שיופיע יותר מפעם אחת והם יהיו צריכים להיות מאוחדים יחד בדרך כלשהיא, אולי ע”י שיפור הדירוג שלהם בתהליך, כדי שלא יעלו שוב ושוב.

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

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

  1. שלב הסינון – Filtering – יהיה צורך בסינון כלשהו לפני הצגת רשימת המועמדים הסופית המומלצת למשתמש.
  • שלב הסינון הוא המקום בו אנו עשויים לוותר על המלצות פריטים שהמשתמש כבר דירג, מכיוון שאיננו רוצים להמליץ על פריטים שהמשתמש כבר ראה.
  • אנו עשויים להחיל כאן רשימת עצירה (stop list) כדי להסיר פריטים שיכולים להעליב את המשתמש או להסיר פריטים שנמצאים מתחת לציון איכות או סף מינימלי מסויים.
  • זה המקום בו אנו מיישמים את מספר ההמלצות, N המלצות, הכי רלוונטיות למשתמש לדוגמה 10 ההמלצות הכי רלוונטיות.
  1. הפלט למשתמש (אזור תצוגת הסרטים למטה בתמונה) – הפלט משלב הסינון עובר לשלב תצוגת המשתמש, על ידי יישומון וכו’.

הדיאגרמה הזו היא גרסה מפוענחת של מה שמכנים סינון שיתופי מבוסס פריטים (item-based collaborative filtering). החלק הקשה הוא בניית הדמיון בין הפריטים.

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

 

הערכה – אימון \ מבחן בדיקה ואימות צולב

Evaluating – Train/Test and cross-validation

אימון ומבחן

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

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

 

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

תהליך עם נתוני אימון ומבחן

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

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

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

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

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

k-fold cross-validation -תהליך אימות צולב

ניתן לשפר את שיטת פיצול נתונים של אימון ומבחן ע”י שיטת  k-fold cross-validation.

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

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

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

מסקנה, מטרת מערכת המלצות

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

סקירת מדדי הדיוק של מערכת ממליצים

  1. mean absolute error – MAE – שגיאה ממוצעת בערך מוחלט

התמונה מ https://www.dataquest.io/blog/understanding-regression-error-metrics/

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

  1. שגיאה ממוצעת בשורש הריבועי, root mean square error- RMSE

התמונה מ https://medium.com/analytics-vidhya/calculating-accuracy-of-an-ml-model-8ae7894802e

מדד זה מעניש כאשר החיזוי רחוק מהתוצאה האמיתית ומעניש פחות כשאתה קרוב בחיזוי מהתוצאה האמיתית.

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

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

מדדי דיוק אלה לא באמת מודדים את מה שהמערכות הממליצות אמורות לעשות.

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

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

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

מדדי דיוק לרשימת המלצות עליונות

  1. hit rate , אחוזי הצלחה – מדידת דיוק של רשימות עליונות ( TOP N ) עבור משתמשים בודדים.

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

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

התמונה מ https://slideplayer.com/slide/9347453/

 

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

לעומת בדיקת דיוק כמו MSE ו RMSE שאיתם מדדנו את דיוק הדירוג האישי של המשתמשים, פה אנו מודדים את דיוק הרשימות הראשוניות top n עבור משתמשים בודדים.

בעזרת שיטת leave-one-out cross-validation אנו נבצע את המדידה, אז כמו שאמרתי במדידה זו מחשבים את ההמלצות העליונות עבור כל משתמש בנתוני האימון שלנו אבל אנחנו נסיר בכוונה אחד מאותם פריטים מנתוני האימון מכל משתמש למען מערך נתוני המבחן, שיטה זו נקראת leave-one-out.

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

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

  1. ARHR – average reciprocal hit rate – השפעה ממוצעת על אחוזי ההצלחה.

הוא מאוד דומה ל hit rate אך המדד ARHR מציג היכן נמצא המיקום של הפריט ברשימת הפריטים העליונים (top n) של המשתמש:

התמונה מ https://medium.com/@arthurlee_73761/recsys-16-local-item-item-models-for-top-n-recommendation-753555b5c1c

זה אומר שכאשר המערכת מצליחה להמליץ על פריטים עליונים יותר ברשימה זו נחשבת ל HIT מאשר

המלצה על מיקום פריטים נמוכים יותר מרשימת המומלצים.

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

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

Reciprocal rank Rank
1/3 3
1/2 2
1 1

וכך אנו “מענישים” יותר את מה שאנחנו פחות רוצים להמליץ.

  1. cumulative hit rank – cHR – הצטברות של אחוזי הצלחה

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

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

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

Predicted Rating Hit Rank
5.0 4
3.0 2
5.0 1
2.0 10
  1. Rating hit rate – rHR – שיעור צפיות בדירוג

כאן אנו מסתכלים על קצב ההתאמה (hit rate) אנו מחשבים את ציון הדירוג עבור כל דירוג כדי למצוא איזה סוג דירוג מקבל יותר צפיות. אנו מסכמים את מספר ההצלחות עבור כל סוג של דירוג ברשימת ה- Top-N שלנו ומחלקים את המספר הכולל של הסרטים מכל דירוג ברשימת ה- Top-N שלנו.

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

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

מדדים להערכת תפקוד מערכת המלצות

  1. Coverage – זהו מדד הכיסוי המודד את אחוז ההמלצות האפשריות שהמערכת מסוגלת לספק.

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

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

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

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

  1. Diversity – זהו מדד הגיוון המודד את אחוז הפריטים השונים זה מזה שיש ברשימת ההמלצות של המשתמש.

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

מערכות ממליצות רבות מתחילות בחישוב מדד דמיון כלשהו בין פריטים, כך שניתן להשתמש

בערכי הדמיון האלו כדי למדוד את הגיוון.

S = avg similarity between recommendation pairs

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

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

  1. Novelty – מדד ממוצע לפופולריות של פריטים ברשימת ההמלצות העליונות.

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

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

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

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

איך תיאוריית הזנב הארוך מתקשרת למערכת המלצות?

מטרת מערכת המלצות היא פריטי השירות מה שנקרא תאוריית הזנב הארוך.

לפי ויקיפדיה:

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

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

לפי הגרף, בזנב הארוך ציר ה Y הוא מספר המכירות או הפופולריות, וציר ה X מייצג את המוצרים.

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

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

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

  1. Churn rate – מדד קצב הנטישה

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

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

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

  1. Responsiveness – מדד היענות.

מודד באיזו מהירות משפיעה התנהגות המשתמש על רשימת ההמלצות.

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

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

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

  1. בדיקות A/B באופן מקוון, כדי לכוון את מערכת הממליצים.

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

בדיקות ה A/B הוא מדד מצויין כדי להבין מה קורה בעולם האמיתי ואפילו יכולת לתת מסקנות אשר יכולות להוריד את מידת המורכבות של המערכת.

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

 

By David Kohav

Linkedin: https://www.linkedin.com/in/davidkochav/

GitHub: https://github.com/DavidKohav/recommender-systems

Posted by David Kohav in deep

איך מחוללים טקסט ומי מפחד מפייק ניוז ?

מיועד ל- מתחילים (כתבה קצת טכנית)

נכתב על ידי Vered Shwartz

בתחילת השנה OpenAI הכריזה על GPT-2, מודל שפה שפיתחה שמסוגל לג׳נרט (לחולל) טקסט שנראה כאילו נכתב ע״י אנשים. בעוד שבדרך כלל הכרזות כאלה מלוות בשחרור של מודל מאומן, OpenAI בחרו שלא לפרסם את המודל שלהם בטענה שהמודל ״מסוכן מדי״ ועלול לשמש לייצור של פייק ניוז. המהלך גרר ביקורת בטענה שהמטרה הייתה יחצ״נות למודל (אכן, הרשת דיווחה על המודל בהגזמה, כפי שבדרך כלל קורה), אך גם עורר דיונים מעניינים באתיקה ובאחריות של המפתחים לשימוש לרעה במודל שפיתחו. המודל המלא שוחרר לבסוף רק לאחרונה, כחצי שנה לאחר הפרסום. ברשומה זו אדבר על ג׳נרוט אוטומטי (generation) של טקסטים באמצעות מודלי שפה – איך מודלים כאלה מאומנים, איך משתמשים בהם לג׳נרט טקסט, והאם הם באמת מסוכנים?

מה זה מודל שפה?

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

למה כולם מדברים פתאום על מודלי שפה?

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

איך מג׳נרטים טקסט?

בהנחה שיש ברשותנו מודל שפה מאומן, איך מג׳נרטים באמצעותו טקסט? נניח שנתון לנו טקסט התחלתי w1 … wn (הטקסט ההתחלתי לא הכרחי, לצורך העניין n יכול להיות אפס). תהליך הג׳נרוט מתבצע מילה-מילה: מייצרים את המילה ה-n+1 כתלות ב-n המילים הקודמות, ואז את המילה ה-n+2 כתלות ב-n+1 המילים הקודמות (הטקסט ההתחלתי והטקסט שהמודל ג׳נרט) וכן הלאה. איך ״מג׳נרטים״ מילה?

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

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

הפתרון הפשוט הוא שילוב של שתי הגישות: ראשית בוחרים את k המילים הכי סבירות (עבור קבוע כלשהו k) ואז דוגמים מביניהן. k גדול יהיה דומה יותר לדגימה מכל ההתפלגות בעוד ש-k קטן יהיה קרוב יותר לאלגוריתם החמדני. לחילופין, אפשר לקחת את המילים הכי סבירות שמסת ההסתברות שלהם מסתכמת בלכל היותר p (עבור קבוע p בין 0 ל-1) ולדגום מהן. גם כאן p קטן דומה לאלגוריתם חמדני ו-p גדול לדגימה מכל ההתפלגות. השיטה הזו נותנת יותר גמישות בכך שמס׳ המילים מהן דוגמים משתנה לפי ההקשר. יש הקשרים שבהן מעט מאוד מילים מתאימות (״אני עייפה, אני רוצה _״) לעומת הקשרים הרבה יותר כלליים (״אני _״).

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

איך מאמנים מודל שפה?

שימו לב שאנחנו מדברים ספציפית על מודל שפה מבוסס רשתות נוירונים. מודל שפה מאומן באופן עצמוני (״self-supervised״), והדאטה שהוא צריך עבור האימון הוא פשוט קורפוס טקסט (למשל, כל וויקיפדיה). בזמן האימון, עוברים על הקורפוס משפט-משפט. עבור משפט נתון w1 … wn, ועבור כל מילה במשפט wi, המודל מנסה לחזות את wi בהינתן ההקשר (במודל פשוט ההקשר יהיה התחילית w1 … wi-1) ומעדכנים את הפרמטרים של המודל בהתאם.[2]

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

ארכיטקטורות שונות

ישנן מודלי שפה שפונקציית העלות שלהם שונה. למשל, BERT של גוגל מאומן לחזות מילים רנדומליות מתוך המשפט שהוחלפו ב״מסכה״, והוא דו-כיווני, כלומר הוא מסתמך גם על מילים שהופיעו אחרי המסכה. עם זאת, בגלל הדרך שבה אומן, BERT לא מאפשר לג׳נרט טקסט אלא רק לייצג טקסט קיים. מאידך, קיימים מודלים אחרים לג׳נרוט טקסט שאינם מודלי שפה. דוגמה לכך היא מודלים מבוססי GAN, בהם ה-Generator מייצר טקסט ותפקידו של ה-Discriminator לזהות שמדובר בטקסט מיוצר ולא ״אמיתי״. על אף ההצלחה האדירה של GANים על תמונות ווידאו, ההצלחה שלו על טקסט נכון לעכשיו יחסית מוגבלת, כנראה בגלל שבניגוד לוידאו ותמונות, טקסט הוא בדיד. ספציפית, מודלים מבוססי GAN כרגע פחות מוצלחים בג׳נרוט טקסט מאשר מודלי שפה.

איך מודדים את האיכות של מודל לג׳נרוט טקסט?

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

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

אז… יש לנו ממה לחשוש?

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

למודלים אין אג׳נדה

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

טקסט מג׳ונרט שונה מטקסט אנושי

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

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

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

קריאה נוספת:

Text Generation (אותה הכתבה באנגלית, מהבלוג שלי)

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

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

Posted by Vered Shwartz in deep

סקירה על הנעשה בהבנת שפה טבעית

מיועד ל- כל אחד (כתבה לא טכנית)

נכתב על ידי guy.gbloch

הגדרה

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

המשימה העיקרית של “הבנת שפה טבעית” היא לייצר מערכות המסוגלות ל”קרוא” ול”הבין” טקסט של שפה מדוברת באיכות שאנשים מסוגלים. התחום כולל משימות מגוונות, למשל “מענה על שאלות (Question Answering)”,”סיכום מסמכים (Text Summarization)”, “תרגום מכונה (Machine Translation)”.התחום קשור באופן עמוק למספר רב של יישומים, למשל, בוטים ועוזרים חכמים (סירי, אלקסה וכו’).

https://labs.eleks.com/2018/02/how-to-build-nlp-engine-that-wont-screw-up.html

קצת היסטוריה

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

בשנות ה-60 נעשו ניסויים שהתבססו על מציאת תבניות (Pattern matching) באמצעות קבוצות קטנות של חוקים, למשל ELIZA.

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

תודה ל https://www.topbots.com/4-different-approaches-natural-language-processing-understanding/

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

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

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

מורכבות הבנת שפה טבעית

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

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

גישות מחקריות

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

ניתן לסווג את הגישות השונות להבנת שפה למספר קטגוריות:

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

סטטיסטיקה ולמידת מכונה

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

בשנים האחרונות, עם התפתחות טכניקות למידה עמוקה, פורסמו מספר מודלים מבוססי למידה עמוקה הנקראים “מודלי שפה מאומנים מראש (Pre-Trained Language Models)” שמספקים תוצאות איכות במגוון משימות של הבנת שפה. מודלים אלו מאומנים מראש באמצעות קורפוסים, דוגמת ויקיפדיה, ועושים שימוש ביכולות העברת למידה (Transfer learning) כדי לאפשר התאמה קלה ומהירה של המודל למשימות הבנת שפה ספציפיות. המודלים המובילים במשפחה זו הם  ULMFiT, ELMo ו BERT.

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

ייצוג ידע מובנה

גישה זו מסתמכת על הפקת משמעות של שפה באמצעות

  • ייצוג ידע על העולם באופן מובנה
  • מיפוי השפה אל מבני המידע
  • ביצוע חישובים והיסקים על בסיס המידע המובנה

ישנן שיטות רבות לייצוג יידע באופן מובנה,למשל, אונטולוגיות (Ontologies), מסגרות (Frames), גרפיים מושגיים (Conceptual Graphs) ופורמטים מגוונים של ייצוג עובדות וחוקים לוגיים.

הדרך המקובלת להגדרת יידע מובנה היא שימוש באונטולוגיות. אונטולוגיה היא מודל היררכי פורמלי המכיל הגדרות של מושגים (Concepts), תכונות של מושגים, וקשרים בין מושגים. לדוגמא, המושג “פיצה” הוא בעל קשר של ירושה (“Is a”) למושג “מזון/אוכל” וקשר ‘has Topping’ למושג “תוספת”.

https://www.researchgate.net/publication/236842047_Efficient_Regression_Testing_of_Ontology-Driven_Systems

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

  • אונטולוגיות עיליות ((Upper Level Ontologies – מכילות מושגים כלליים המשמשים תחומי ידע רבים, למשל SUMO
  • אונטולוגיות התמחות (Domain Ontologies) – מכילות הגדרות שלמושגים בתחום ידע ספציפי, למשל אונטולוגיות בתחום הפארמה.

 

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

מודל מידע נוסף בו נעשה שימוש החל משנות ה-70 הוא המסגרות (Frames). מסגרת היא מבנה נתונים לייצוג מצב או תהליך טיפוסי, למשל מסגרת של “אירוע קנייה” מכילה מידע מובנה של “מוכר”, “קונה”, “סחורה” ו “מחיר”.

תודה ל https://www.topbots.com/4-different-approaches-natural-language-processing-understanding/

 

החיסרון של הגישה הוא המאמץ האנושי הגבוה הנדרש ליצירת ואכלוס מבני המידע, שכן, בתהליך נדרשת עבודה ידנית רבה. בתחומים מסוימים, מומחה תוכן חייב ליצור את המידע, דבר אשר מגביל את מרחב כיסוי הידע והעלויות הנדרשות.

המרת שפה לתוכניות הרצה

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

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

תודה ל https://www.topbots.com/4-different-approaches-natural-language-processing-understanding/

הרכיב המרכזי בגישה זו הוא המנתח סמנטי (Semantic Parser) הממיר את השפה הטבעית לייצוג סמנטי, למשל,ביטויים לוגיים, ביטויים המייצגים משמעות בשפה פורמלית (meaning representations) או לתוכניות מחשב בשפות כמו SQL אוJAVA . לאחר שלב ההמרה,מתבצע שלב ההרצה במסגרת סביבה נתונה, למשל בסיס נתונים רלציוני, כדי להגיע אל התוצאה הרצויה, למשל מענה לשאלה.

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

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

לימוד אינטראקטיבי

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

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

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

לסיכום

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

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

קישורים

 

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

 

Posted by guy.gbloch in deep

הבינה המלאכותית שמנהלת את הפירסום באינטרנט – Amobee

המאוריין: אלון רוזנטל מנהל קבוצת ה DataSciense

רקע

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

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

לניתוח וקבלת ההחלטה המהירה הזו יש חלק ניכר לענקית אמובי.

באמובי יש צוות חזק שעוסק בעיקר ב NLP. לא מזמן זכינו במקום הראשון בתחרות Sentiment Detection ב WASA2018

כמה  אנשי  פיתוח  ? איך מחולקים  ?

קבוצת ה Datasciense של המרכז בארץ מונים 6 מפתחים.

כולם בעלי יכולות תיכנות גבוהות.

שלושה דאטאסיינס, שני מהנדסי Big Data, ואחד גם וגם.

מהם  המוצרים  בחברה ?

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

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

אילו חלקים במוצר מצריכים אלגוריתמיקה ?

כל השירותים שהזכרתי קודם מצריכים אלגוריתמיקה, בעיקר בתחום ה NLP ובייצוג משתמשים.

אחלק את עיקרי הפעילות שלנו לשתים:

תחום ה User Profiling עוסק בהיסטוריה של ארועים והגלישה שיש על המשתמש.

חשוב להבין שעל כל משתמש יש מגוון מקורות מידע: ההתנהגות שלו ברשת, במובייל, ובטלוויזיה.

המטרה לאפשר פילוח של המשתמשים לפי בקשה.

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

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

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

בעיות NLP קלאסיות כמו Sentiment Detection, Topic Detection בכדי להחליט איזו פרסומת תתאים

לאיזה משתמש ולאיזה עמוד.

מה עובד לכם טוב ?

הפתרונות לבעיות ה NLP שלנו השתדרגו משמעותית עם השימוש ב ,Language Modeling שזה קונספט די חדש (מהשנתיים האחרונות).

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

מה מאתגר אתכם ?

אנחנו מנסים לשפר את ה State of the art  של מודל השפה וזה מאוד מאתגר.

למשל לוקחים את הכי טוב של גוגל Bert ומשלבים עם Evolved Transformer.

בעיות שפתרתם בדרך יצירתית ?

לגבי ה Topic Classification יש דרישה מהתעשייה שהתוצאות יהיו היררכיות, ז”א במבנה של עץ. למשל:

ספורט – > פוטבול -> שחקן מפורסם

רכב – > אופנועים

        -> מכוניות מירוץ

       -> ג’יפים

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

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

כך שלמעשה מהקלט הגולמי חוזים את התת נושא.

ממש תפרנו את הרשת לבעיה וזה היה יפה!

ספר על משימת איסוף ה DB אצלכם ? (מי עושה ? מי בודק ? מי מתייג ? מי מנהל ?)

יש לנו כמות לא שגרתית של Data והשימוש בו מאוד תלוי משימה.

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

מהם אתגרי העתיד ?

  • השלמה ואחידות המידע על היוזרים שהמידעים שלהם מגיע ממקורות שונים מבוסס GAN.
  • שיפור מודל השפה כי הכל מבוסס עליו
Posted by תמיר נווה in companies

מודל DeViSE – משלב הבנת שפה עם הבנת תמונה

מיועד ל- מתחילים (כתבה קצת טכנית)

נכתב על ידי Nadavpo

כשהתחלתי להיכנס לעולם הלמידה העמוקה, טיפסתי באותם השלבים שאני מאמין שרובנו טיפסנו בהם (ואם לא, אני ממליץ בחום על הספר האלקטרוני החינמי של Michael Nielsen בתור התחלה): רשת עם שכבת FC נסתרת אחת, רשת עמוקה, היפר פרמטרים, שכבות קונבולוציה, AlexNet,  VGG, Inception וכו’.

גם אני נשבתי בקסם רשתות הנוירונים – היכולת להגיע לביצועים מרהיבים באמצעות מספר שורות קוד (ומספר גדול יותר של שעות אימון וקינפוג, אבל ניחא), היו מדע בדיוני בעיניי. עם זאת, יש דבר שמציק לי לאורך כל הדרך והוא ההבנה בכל פעם מחדש שרשתות לא באמת מבינות מה הן עושות. עכשיו תגידו “בוקר טוב, אלה בסך הכל תוכנות מחשב, למה שיבינו משהו?”. אני יודע אני יודע, אך עם זאת כולנו מכירים את התיאוריה והרעיון שבבסיס רשתות הנוירונים והוא שהן כביכול מחקות את פעולת המוח, ואם זה אכן כך אז איך הן יכולות לעשות לנו כאלה בושות? לעיתים נראה שאין כל קשר בין מה שאנו מצפים מהרשת (ה-ground truth) לבין מה שהרשת ביצעה בפועל. אז נכון, לפעמים אני גם לא מבין את הקשר של מעשים מסוימים של בני אדם לבין המציאות ומבחינה זאת הרשתות האלו דווקא בסדר גמור, אבל לא על זה אני  מדבר. 

תיאור מילולי של קטגורית התמונות

לצורך הסקופ הזה אני רוצה להתעניין בשאלה איך ניתן לגרום לרשת לסווג קטגוריות שאליהן היא לא נחשפה מעולם או נחשפה רק פעם אחת (zero\one shot detection למתעניינים) על ידי תיאור מילולי בלבד של הקטגוריות? או איך ניתן לגרום לרשת לכך שגם כאשר היא תטעה בסיווג של תמונה, התוצאה תהיה בעלת קשר סמנטי לאמת?

מענה הגון לשאלות אלה יקרב אותנו קצת יותר לחיקוי של דרך החשיבה האנושית.

בארכיטקטורות המוכרות, אלה הכוללות שכבות קונבולוציה, pooling layers ולבסוף שכבת softmax קשה לגרום לרשת להצליח במשימות האלו. בכל תהליך האימון הרשתות מקבלות פידבק של כמה הן רחוקות מהאמת האחת והיחידה (ה-one hot encoding), אין כל דרך להבין קשר בין קטגוריות שונות. במילים אחרות, המימד של תגיות התמונות (ה-labels) מורכב מוקטורים אורתוגונליים חסרי כל קשר אחד עם השני ולכן לא ניתן להעריך כמה חמור דומה לסוס למשל. דוגמה נוספת היא מקרה שבו המאגר שעליו התאמנה הרשת לא מכיל תמונות של זברות אך בזמן שימוש ברשת, לאחר גמר האימון, נרצה לנסות לסווג תמונות של זברות. ב-VGG למשל זה לא יהיה אפשרי.

רשתות המבוססות על embedding vectors פותרות בדיוק בעיות כאלו. לצורך העניין נתמקד במאמר המציג רשת בשם DeVise.

רשת זו בנויה משתי רשתות נפרדות. הרשת הראשונה מבצעת את תהליך ה-word2vec ומאומנת על מסד נתונים טקסטואלי גדול ככל האפשר (ויקיפדיה במקרה שלנו), ואילו החלק השני יהיה CNN להוצאת מידע חזותי מהתמונה כאשר שכבת ה-softmax הוסרה ממנו, מעין transfer learning, במקרה שלנו רשת ה-CNN הינה ה-AlexNet (בכל זאת מאמר מ-2013).

המחשת מבנה הרשת. בצד שמאל רשת CNN, בצד ימין מודל skip-gram ובאמצע שילוב של שניהם כפי שמתבצע בתהליך האימון. (לקוח מ DeViSE: A Deep Visual-Semantic Embedding Model)

מה הקשר בין word2vec לבין AlexNet אתם שואלים?

פה טמון הסוד. בשלב האימון תג (label) התמונה נכנס לתוך רשת ה-word2vec ומקודד לוקטור במימד 500 או 1000 שאותו ניתן למקם כנקודה במרחב רב ממדי, וכעת נקבל שתגים מאותה הקטגוריה ימוקמו סמוכים האחד לשני (בנוסף נקבל גם קשרים דומים בין תגים עם אותו הקשר – למשל וקטור המחבר בין כלב לכלבלב יהיה דומה מאד לזה המחבר בין חתול וחתלתול – אבל זה נושא לפוסט אחר). במקביל, התמונה עצמה נכנסת ל-CNN כאשר במוצא ה-CNN ישנו וקטור באותו המימד של ה-word2vec. את שני המוצאים האלו מכניסים לפונקציית המחיר (זכרו שכעת התג מיוצג על ידי 500, או 1000, מספרים ולא רק על ידי אחד והמון אפסים כמו ב-one hot encoding) המשלבת אבחנה בין כמה קרוב היה הוקטור במוצא ה-CNN לוקטור לוקטור המתאים לתג התמונה ובנוסף אבחנה כמה רחוק היה הוקטור במוצא ה-CNN משאר הוקטורים שנלמדו במודל ה-skip-gram. בשלב ה-test נכנסת תמונה לרשת והתיוג יהיה זה בעל ה-embedding vector (הוקטור מה-word2vec) הקרוב ביותר לזה שיצא מרשת ה-CNN. שיטה זאת מאפשרת לנו לנצל את המידע הסמנטי מהמרחב הטקסטואלי לשימוש במרחב החזותי על ידי כך שאנו מלמדים את רשת ה-CNN לספק וקטורים קרובים מבחינה מרחבית לתמונות בעלות תיוג עם קשר סמנטי. בכך גם כאשר הרשת שלנו תשגה בתיוג התמונה, ישנו סיכוי גבוה לכך שלטעות יהיה קשר סמנטי לאובייקט שבתמונה.

דוגמה למרחב טקסטואלי על פי קטגוריות שנוצר בארכיטקטורת skip-gram ובו ניתן לראות מקבצים של דוגמאות אימון על פי קטגוריה (לקוח מ DeViSE: A Deep Visual-Semantic Embedding Model)

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

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

Posted by Nadavpo in deep

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

מיועד ל- כל אחד (כתבה לא טכנית)

נכתב על ידי Vered Shwartz

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

בעיות בפונקצית המטרה ובחומר האימון

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

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

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

זליגה של הטיות אנושיות (bias) לתוך האלגוריתמים

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

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

כדי להמחיש, נטען וקטורי מילים מאומנים מראש (GloVe) ונתמקד במילים מתוך רשימת מקצועות. נטיל את הוקטורים למימד 2 ונראה שהכיוון של זוגות מילים כמו doctor/nurse דומה לכיוון של he/she.

מודלי “קופסה שחורה”

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

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

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

אז מה עושים? אפשר להשתמש בשיטה שנקראת Adversarial Training שבה מנסים באופן אקטיבי להסיר מהייצוג החבוי מאפיינים רגישים. הרעיון הוא לאמן את המסווג הראשי f (האם לאשר הלוואה או לא) על ייצוג X, ובמקביל לאמן מסווג שני g המנסה לחזות את המאפיין הרגיש (מה הגזע של מבקש ההלוואה) מאותו הייצוג X. ע”י גרדיאנט הפוך גורמים ל-f “לשכוח” את מה ש-g למד וכך הייצוג הופך להיות עיוור למאפיין הרגיש. אך לאחרונה יצא מאמר שהראה שגם השיטה הזו לא מסירה באופן מושלם את המאפיינים הרגישים.

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

קריאה נוספת:

אתיקה בלמידת מכונה, מהבלוג שלי (אנגלית)

פרק על הוגנות בפודקאסט “Unsupervised”

Posted by Vered Shwartz in deep

כיצד לייצג מילים כמספרים בעלי משמעות? על הבסיס לאלגוריתמי NLP

מיועד ל- כל אחד (כתבה לא טכנית)

נכתב על ידי Vered Shwartz

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

מספרים במקום מילים

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

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

ייצוג לפי אינדקס (One-hot Vector)

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

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

בייצוג one-hot-vector אנחנו מייצגים כל מילה באמצעות האינדקס שלה ב-V. מילה w באינדקס i מיוצגת ע”י וקטור שאורכו כגודל אוצר המילים – |V|, וכל ערכיו 0 פרט לאינדקס i שערכו 1. ככה ייראו וקטורים של כמה מילים לדוגמה:

nlp

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

בהקשר של משימת הקצה של סיווג טקסטים, מקובל לייצג מסמך ע”י קבוצת כל המילים שהופיעו בו (שאמורות להעיד על הנושא שלו). כלומר, מרחב הפיצ’רים הוא כל המילים הקיימות בשפה, וערך הפיצ’ר של מילה מסוימת w במסמך d יהיה פרופורציונלי למס’ ההופעות של המילה w במסמך d. ייצוג של מסמך ע”י סכימה של כל ווקטורי ה-one-hot של המילים המופיעות בו ייתן לנו בדיוק את זה. עכשיו נניח שבזמן האימון המסווג שלנו ראה הרבה מסמכים מתויגים לנושא “טכנולוגיה” שהכילו את המילה “מחשב”. הוא לומד שהמילה “מחשב” היא פיצ’ר חזק עבור הנושא “טכנולוגיה”. כעת נראה למסווג מסמך שמדבר על מחשבים ניידים והוא יכיל הופעות רבות של המילה “לפטופ”. אם המסווג לא נתקל בזמן האימון (מספיק פעמים) במילה “לפטופ” במסמכים בנושא טכנולוגיה, הוא לא ידע להשלים את המידע החסר הזה מהדמיון למילה “מחשב”. שתי המילים האלה הן פיצ’רים נפרדים לחלוטין עבור המסווג. זה לא מצב טוב.

ייצוג מבוסס שכנים (Distributional Vectors)

כל הפתרונות הבאים שנראה מבוססים על הנחה בלשנית (Distributional Hypothesis) שבבסיסה עומד ההיגיון הפשוט “תגיד לי מי השכנים שלך ואומר לך מי אתה”. מילים הנוטות להופיע באותן ההקשרים (לצד אותן מילים “שכנות”), הן בדר”כ דומות במשמעות שלהן. למשל, מילים נרדפות כמו “אווירון” ו”מטוס” יופיעו ליד מילים כמו “נחיתה”, “המראה”, “טיסה” וכו’. דמיון סמנטי לא מוגבל רק למילים בעלות אותה המשמעות. גם למילים הקשורות אחת לשנייה מבחינה תחבירית (חתול/חתולים), נושאית (מטוס/דיילת), בקשר של הכלה (לפטופ/מחשב) ואפילו בקשר של דבר והיפוכו (חם/קר) יהיו ווקטורים דומים.

הרעיון הוא שווקטור של מילה w יהיה כעת עדיין באורך |V|, אבל המשמעות של כל כניסה בווקטור תהיה שונה. הערך של כניסה u בווקטור של w יהיה פרופורציונלי למס’ הפעמים ש-w ו-u הופיעו ביחד בקורפוס האימון. ההגדרה של “הופיעו יחד” גמישה, אבל באופן הפשוט נניח הופעה של u בחלון של k מילים (למשל k=5) סביב w. הערך עצמו יכול להיות מספר ההופעות המשותפות, מספר מנורמל (הסתברות), או מדד כמו PMI, המפחית את ההשפעה של השכיחות של כל מילה בפני עצמה.

שיטות ספירה (Count-based Vectors)

הדבר הפשוט ביותר לעשות יהיה לעבור על קורפוס האימון, ולבנות את מטריצת ההופעות המשותפות (בגודל |V|x|V|) של כל מילה w עם מילה u בחלון בגודל k. השורות של המטריצה משמשות בתור ווקטורי מילים, ואותן אפשר לנרמל (למשל באמצעות PMI). ככה יראו עכשיו הווקטורים של המילים לדוגמה. נראה יותר טוב, לא?

nlp

היתרון של השיטה הזו על פני one-hot הוא בכך שלמילים בעלות משמעות דומה (למשל “מחשב” ו”לפטופ”) יהיו ווקטורים דומים מכיוון שהן מופיעות לצד אותן מילים שכנות (“עכבר”, “חומרה”, “מסך” וכו’), כפי שניתן לראות באיור. הדמיון יכול בקלות להימדד ע”י שימוש במדדי דמיון של ווקטורים כמו קוסינוס. בהקשר של משימת הקצה שלנו, אם נייצג מסמכים שוב כסכום/ממוצע של ווקטורי המילים המופיעות במסמך, נוכל להרוויח מהדמיון הזה. אם האלגוריתם שלנו למד לסווג מסמך המכיל את המילה “מחשב” ועכשיו ניתן לו מסמך דומה מאוד אבל שמדבר על “לפטופ” במקום, הייצוג הווקטורי של המסמכים יהיה דומה בזכות הדמיון הווקטורי בין “מחשב” ל”לפטופ”. האלגוריתם מצליח להכליל את החוקים שהוא למד בזכות דמיון מילים.

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

שיכוני מילים (Word Embeddings)

אז איך אפשר להשיג ווקטורים דחוסים ממימד נמוך ששומרים על התכונה הטובה של הייצוג מבוסס השכנים? נקפוץ כמה שנים קדימה (ונדלג על פתרון הביניים – הפעלת אלגוריתם להורדת מימדים כגון SVD על מטריצת ההופעות המשותפות). במקום לספור הופעות משותפות, אפשר להחליט מראש על מימד קטן כלשהו D (בדר”כ 50-1000, הכי נפוץ 300) ולחזות ווקטורים באורך D שישמרו על התכונה הזו – כלומר, שלמילים שמופיעות באותם ההקשרים יהיו ווקטורים דומים. למרות שהרעיון הזה כבר הוצע ב-2003 עי בנגיו וקולגות, הוא זכה לפופולריות רק ב-2013 כשמיקולוב וקולגות פרסמו את word2vec (שהמימוש שלו היה יעיל, והתוצאות מרשימות). ככה ייראו הווקטורים, קטני מימדים ודחוסים, ועדיין שומרים על תכונת הדמיון:

nlp

הרעיון של word2vec הוא ללמוד מטריצה בגודל |V| על D, שכל שורה בה מייצגת מילה. זאת המטריצה של מילות היעד (target). כעזר, מחזיקים מטריצה נוספת באותם המימדים שמייצגת מילה כמילת הקשר (context). שתי המטריצות מאותחלות אקראית. בזמן האימון, האלגוריתם עובר על כל הקורפוס, מילה-מילה, כאשר בכל פעם מילה אחת נחשבת ליעד והמילים המקיפות אותה בחלון נחשבות למילות ההקשר. יש שתי גרסאות לאלגוריתם: באחת (CBOW = continuous bag of words), מנסים לחזות את מילת היעד ממילות ההקשר, ובשנייה (skip-gram), מנסים באמצעות מילת היעד לחזות את מילות ההקשר. כפועל יוצא של החיזוי הזה, הווקטור של מילת היעד (ממטריצת היעד) מתקרב לווקטורים של מילות ההקשר (ממטריצת ההקשר). נוסף על כך, ווקטור היעד צריך להתרחק מווקטורי ההקשר של המילים שלא הופיעו בחלון. בגרסה היעילה יותר (negative sampling), דוגמים k מילים אקראיות כלשהן (שכנראה לא הופיעו בחלון) ומוסיפים לפונקציית המטרה גורם דומה לחיזוי של מילות ההקשר אבל עם המילים האקראיות ומוכפל במינוס 1.

חוץ מ-word2vec יש עוד לא מעט אלגוריתמים שונים ללמידה של word embeddings ע”י חיזוי, הנפוצים מביניהם GloVe של סטנפורד ו-FastText של פייסבוק. בשנים האחרונות הם משמשים כקלט לכל אלגוריתם למידה בתחום עיבוד שפה, בין אם בשימוש בווקטורים המאומנים שפורסמו עם השיטות האלה או באימון מחדש על קורפוס אחר. בהקשר של משימת סיווג הטקסטים שלנו, נוכל עדיין לייצג מסמך ע”י סכום או ממוצע וקטורי המילים. וקטור מסמך יהיה כעת באורך D והפיצ’רים שלו יהיו חבויים, אבל מסמכים עם מילים דומות עדיין יקבלו ייצוג דומה ויסווגו לאותו הנושא, ובמחיר חישובי נמוך יותר. המטרה הושגה!

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

nlp

תודה ל https://www.kdnuggets.com/2016/05/amazing-power-word-vectors.html

בתור מדד איכותי, נהוג לחשב הטלה של הווקטורים למימד 2 ע”י t-SNE או PCA ולצייר גרף מילים שממנו ניתן לראות שמילים דומות סמנטית ממוקמות זו לצד זו ב(הטלה למימד 2 של ה)מרחב הווקטורי. הנה דוגמת קוד לחישוב הזה, וכך למשל נראה חלק קטן מהגרף המתקבל כשמפעילים t-SNE על GloVe (מאומן מראש, בגודל 50):

nlp

העתיד של ייצוגי מילים

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

ההתפתחות האחרונה בייצוגי מילים היא ההכרה שמשמעות של מילה נגזרת לא רק מהמשמעות הכללית שלה אלא גם במשמעות שלה בהקשר נתון, וזה נכון בעיקר (אבל לא רק) עבור מילים רבות משמעות. למשל, המילה “עכבר” במשפט “קניתי מקלדת ועכבר אלחוטיים” שונה במשמעותה מאשר במשפט “החתול רדף אחרי העכבר”. במקום לייצג את המילה “עכבר” בווקטור יחיד שמאגד את כל ההופעות שלה בקורפוס (בשתי המשמעויות), אפשר לחשב את הווקטור הזה בכל פעם מחדש עבור השימוש הספציפי, ושיהיה תלוי-הקשר. זה מה שעושים בשיטת ELMo שלאחרונה זכתה בפרס המאמר הטוב ביותר בכנס NAACL 2018. לא מעט מאמרים יצאו לאחרונה שהראו ששימוש ב-ELMo משפר ביצועים של משימות קצה על-פני שימוש בווקטורים סטטיים. ההקשר חשוב. החיסרון הברור הוא כמובן שהשימוש בווקטורים דינאמיים הרבה יותר כבד מבחינה חישובית: במקום לשלוף ווקטור מוכן צריך לחשב אותו בכל פעם מחדש ע”י מעבר על כל המשפט… אין מתנות חינם.

Posted by Vered Shwartz in deep

הטלוויזיה הרגה את הרדיו, האינטרנט הרג את הטלוויזיה והבוטים הורגים את אתרי האינטרנט

מיועד ל- מתחילים (כתבה קצת טכנית)

נכתב על ידי תמיר נווה

צאטבוטים Chatbots קיימים עוד משנות ה-60 (ראו את אליזה ELIZA החלוצה) אך ההתעניינות והפופולאריות שלהם גוברת :

רמת הפופולאריות של המושג Chatbot לפי Google Trends

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

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

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

אז איך עובד הקסם הזה ?

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

לפי הגישה הג’נרטיבית Generative המודל הבסיסי לצ’אטבוט הינו אותו מודל המשמש לתירגום של טקסט ונקרא סדרה לסדרה seq2seq.

ארכיטקטורת seq2seq המשמש לניתוח שפה

ארכיטקטורת seq2seq המשמש לניתוח שפה

מודל זה מורכב ממקודד Encoder, צד שמאל בתרשים שמקבל את המשפט הקודם, וממפענח Decoder, צד ימין בתרשים שמחזיר את משפט התגובה. כל אחד מאותם מרכיבים “מקודד” ו-“מפענח” הינם רשת RNN=RecurrentNeural Network. רשת RNN מקבלת קלט סדרתי (מילה מילה במקרה שלנו) ומעדכנת משתני מצב נסתרים בתוכה תוך כדי הוצאת פלט.

הסבר על התרשים:

התרשים קצת לא ברור למי שלא מכיר RNN ולכן אנסה להסביר אותו ואת ההיגיון שיש מאחורי מבנה זה:

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

הסבר על החיצים האנכיים:

כל יחידת חישוב של ה Encoder (המלבנים משמאל) מקבלת כקלט מילה מהמשפט שנאמר לצאטבוט וכל יחידת חישוב של ה Decoder (המלבנים מימין) מקבלת את הפלט של היחידה שמשמאלה.

הסבר על החיצים האופקיים:

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

מבנה זה של רשתות RNN שונה ממבנה של הרשתות הקלאסיות שנקראות Feedforward Neural Network בהן כל יחידה רק מקבלת קלט אחד שהינו התוצאה של היחידה הקודמת.

מה ההיגיון שבשימוש ברשתות RNN לניתוח שפה:

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

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

למשל נשאל צאטבוט: “מהו אירוע הספורט הגדול שיש במלבורן בחודש הקרוב ?”

והצאטבוט יענה: “אירוע הספורט הגדול במלבורן בחודש הקרוב הינו Australian Open Tennis”

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

 

Posted by תמיר נווה in deep

מהי למידה עמוקה

מיועד ל- כל אחד (כתבה לא טכנית)

נכתב על ידי תמיר נווה

“למידה עמוקה” (Deep Learning) הינו ענף ברשתות ניורונים שעשה מהפכה כמעט בכל תחומי האלגוריתמיקה.

המהפיכה התחילה בראייה ממוחשבת (computer vision) והמשיכה לנושאים שונים כמו עיבוד שפה טבעית (NLP), תרגום, עיבוד אות שמע (speech, voice), מכוניות אוטונומיות, רובוטיקה, התנהגות ברשת ועוד ועוד… רבים מכנים זאת (באופן שגוי) כבינה מלאכותית (AI=Artificial Intelligence) אך למעשה זה רק ענף של התחום.

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

כמו כן קיימים מגוון מוצרים ושירותים שכולנו משתמשים בהם, אשר מבוססים על למידה עמוקה כמו למשל siri, תירגום סימולטני בסקייפ, google photos, ועוד ועוד…

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

ידוע שבתחום למידת המכונה (machine learning) יש צורך בהרבה רקע מתמטי ויש הרבה משוואות מתמטיות “מפחידות”

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

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

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

Posted by תמיר נווה in deep