<aside> ℹ️ מידע על העמוד

מידול שפה Language modeling (בהקשר של עיבוד שפה טבעית) היא משימה בה חוזים את המילה הבאה במשפט, למשל – "הסטודנטיות פתחו את ___" (המחשבים? הספר? המבחן?). באופן יותר פורמלי, בהנתן רצף מילים $x^{(1)}, x^{(2)}, \ldots, x^{(t)}$ המשימה היא לחשב את ההתפלגות של המילה הבאה $x^{(t+1)}$ , כלומר לחשב את $P\left(x^{(t+1)} \mid x^{(t)}, \ldots, x^{(1)}\right)$ (כאשר $x^{(t+1)}$ יכולה להיות כל מילה מתוך אוצר המילים המסומן $V=\left\{w_1, \ldots, w{|V|}\right\}$).

מערכת המבצעת את משימת מידול השפה נקראת מודל שפה Language model . אפשר לחשוב על מודל שפה בתור מערכת שמשייכת הסתברות לטקסט מסוים. למשל, עבור טקסט מסוים $x^{(1)}, x^{(2)}, \ldots, x^{(T)}$ ההסתברות של הטקסט לפי מודל השפה היא:

Untitled

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

מודלי n-gram

שיטה שהיתה בשימוש לפני שעברו להשתמש בלמידה עמוקה. n-gram הוא רצף של n מילים (ובהתאם unigram הוא מילה יחידה, bigram הוא צמד מילים, trigram הוא שלישיית מילים, 4-gram הוא רביעיית מילים וכו'). מודל שפה n-gram מניח הנחה מרקובית Markovian assumption על השפה אותה הוא רוצה למדל – כלומר, שהמילה $x^{(t+1)}$ תלויה רק ב-n-1 המילים שקודמות לה.

Untitled

בהנתן ההנחה הזו, מודלי n-gram מוגדרים באופן הבא (שנוצרת באופן ישיר לחלוטין מההגדרה של הסתברות מותנית):

Untitled

כדי לחשב את ההסתברויות האלו, סופרים את כמות הפעמים שכל תת משפט שכזה מופיע בקורפוס גדול כלשהו. כלומר, אנחנו מקבלים קירוב סטטיסטי שמוגדר באופן הבא: $\approx \frac{\operatorname{count}\left(\boldsymbol{x}^{(t+1)}, \boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}^{(t-n+2)}\right)}{\operatorname{count}\left(\boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}^{(t-n+2)}\right)}$.

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

Untitled

אנחנו מסתכלים על הקורפוס שבחרנו להשתמש בו עבור יצירת מודל השפה שלנו, ומחשבים לפיו עבור כל מילה w שקיימת באוצר המילים (למשל exams, books..), את ההסתברות הבאה:

$$ P(\boldsymbol{w} \mid \text { students opened their })=\frac{\operatorname{count}(\text { students opened their } w \text { ) }}{\operatorname{count}(\text { students opened their })} $$

למשל, אם בקורפוס "students opened their" הופיע 1,000 פעמים, ו-"students opened their books" הופיע 400 פעמים, אז $P(\text { books } \mid \text { students opened their })=\frac{400}{1000}=0.4$

ובהתאם אם "students opened their exams" הופיע רק 100 פעמים, הוא יקבל הסתברות נמוכה יותר של 0.1. כאן אפשר לשים לב לחסרון שבשימוש בשיטות שמתבססות על ההנחה המרקובית – השימוש בהנחה המרקובית גרם לכך שהתעלמנו מהחלק הראשון במשפט (שנותן לנו הקשר משמעותי) ובכך נתנו הסתברות נמוכה יותר למילה exams למרות שאם מתחשבים בהקשר של תחילת המשפט היא ככה"נ יותר סבירה. למודלי n-gram יש בעיית דלילות sparsity שנובעת מכמה סיבות: