← Home

רעיונות לפתרון — מבחן לדוגמה

עיבוד שפה טבעית (NLP) · ד״ר איגור קליינר
HITHolon Institute of Technology
סוג מסמך: רעיונות לפתרון
סך הכול בבחינה: 100 נקודות
מספר שאלות: 8
המסמך מציג כיווני פתרון ודרך חישוב. בבדיקה ניתן לקבל ניסוחים שקולים, כל עוד ההסבר נכון, ממוקד ומבוסס.

תוכן העניינים

  1. מודל שפה מסוג n-grams
  2. Cosine Similarity בין מסמכים
  3. Distributional Similarity
  4. ייצוג וקטורי של מילים ומסמכים
  5. PMI והשוואת קבוצות
  6. Regex
  7. קידוד ופענוח טקסט
  8. Jaro Similarity ו־Perplexity

שאלה 1 — מודל שפה מסוג n-grams

15 נקודות
א. הסתברות משפטים

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

P(<s> I am Sam) = P(I|<s>) · P(am|I) · P(Sam|am) = 0.375 · 0.625 · 0.375 = 0.087890625
P(<s> Sam am I) = P(Sam|<s>) · P(am|Sam) · P(I|am) = 0.375 · 0.375 · 0.125 = 0.017578125
לכן המשפט <s> I am Sam סביר יותר לפי המודל.
הערת בדיקה: אם סטודנט הכפיל גם ב־P(<s>|<s>)=0.125 באופן עקבי, כדאי לבדוק לפי דרך הפתרון. הפירוש המקובל כאן הוא שסימן ההתחלה נתון ואינו מוכפל.
ב. מדוע ייתכן ערך חיובי ל־P(<s>|<s>)?

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

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

שאלה 2 — Cosine Similarity בין מסמכים

8 נקודות

נסמן את שני הווקטורים:

a = (5, 88, 123, 43, 35, 0, 36) b = (71, 125, 42, 76, 0, 27, 88)

מכפלה סקלרית:

a·b = 5·71 + 88·125 + 123·42 + 43·76 + 35·0 + 0·27 + 36·88 = 355 + 11000 + 5166 + 3268 + 0 + 0 + 3168 = 22957

נורמות:

||a||² = 5² + 88² + 123² + 43² + 35² + 0² + 36² = 27268 ||b||² = 71² + 125² + 42² + 76² + 0² + 27² + 88² = 36679

לכן:

cos(a,b) = 22957 / (sqrt(27268) · sqrt(36679)) ≈ 0.726
הדמיון הקוסינוסי הוא בערך 0.726. אין צורך בערך עשרוני סופי אם ההצבה והחישוב מוצגים נכון.

שאלה 3 — Distributional Similarity ומילים בעייתיות

15 נקודות
א. מילים נפוצות מאוד

מילים כמו of, the, from הן בדרך כלל stop words. הן מופיעות כמעט בכל הקשר ולכן אינן עוזרות להבחין במשמעות. דרכי טיפול מקובלות:

  • הסרה של stop words לפני בניית המטריצה.
  • שימוש במשקול כגון TF-IDF, PMI או PPMI כדי להפחית משקל של מילים כלליות מדי.
  • סינון מילים לפי שכיחות גבוהה מדי או נמוכה מדי.
ב. מילים רב־משמעיות

דוגמאות:

  • bank: בנק כספי לעומת גדת נהר.
  • light: אור לעומת קל במשקל.
  • sanction: אישור לעומת עונש.
  • oversight: פיקוח לעומת שגיאה שנבעה מהתעלמות.

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

ג. האם למילה יש יותר ממשמעות אחת במודל וקטורי?

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

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

שאלה 4 — ייצוג וקטורי של מילים ומסמכים

15 נקודות
א. חסרונות של TF-IDF
  • הייצוג דליל מאוד: רוב הערכים בווקטור הם אפסים.
  • אין הבנה סמנטית: מילים נרדפות כמו car ו־automobile נחשבות מילים שונות לגמרי.
  • אין התייחסות לסדר המילים או לתחביר.
  • קשה להתמודד עם הקשר: אותה מילה מקבלת אותו ייצוג גם במשמעויות שונות.
ב. דמיון ושוני בין Word2Vec לבין SVD

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

הבדל מרכזי: SVD מפרק מטריצה גלובלית של שכיחויות או הופעות משותפות, ואילו Word2Vec לומד וקטורים באמצעות משימת חיזוי מקומית, למשל CBOW או Skip-gram.

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

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

v(document) = average(v(w_i)) או v(document) = weighted_average(TF-IDF(w_i) · v(w_i))

אפשרויות מתקדמות יותר: Doc2Vec, או שימוש בייצוג של משפט/מסמך ממודל Transformer.

ד. ייצוג דליל מול ייצוג צפוף

ייצוג דליל הוא וקטור גדול מאוד, בדרך כלל בגודל אוצר המילים, שבו רוב הערכים הם אפס. לדוגמה: Bag of Words או TF-IDF. ייצוג צפוף הוא וקטור קצר יותר, שבו רוב הערכים אינם אפס ומייצגים מידע סמנטי דחוס. לדוגמה: Word2Vec, GloVe, BERT embeddings.

שאלה 5 — PMI, שכיחות מילים והשוואת קבוצות

15 נקודות
א. מדוע תדירות גבוהה אינה מספיקה?

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

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

נסמן:

N = 4492 count(church) = 194 count(religious) = 3284 count(non-religious) = 1208 count(church, religious) = 191 count(church, non-religious) = 3

עבור הקבוצה הדתית:

PMI(church, religious) = log( P(church, religious) / (P(church)P(religious)) ) = log( (191/4492) / ((194/4492)(3284/4492)) ) = log( 191·4492 / (194·3284) ) = log(1.3467)
בלוגריתם טבעי מתקבל בערך 0.298. בבסיס 2 מתקבל בערך 0.429.

עבור הקבוצה הלא־דתית:

PMI(church, non-religious) = log( (3/4492) / ((194/4492)(1208/4492)) ) = log( 3·4492 / (194·1208) ) = log(0.0575)
בלוגריתם טבעי מתקבל בערך -2.856. בבסיס 2 מתקבל בערך -4.120.
בסיס הלוגריתם משנה את הערך המספרי, אך לא את הסימן ולא את המסקנה. לכן חשוב לבדוק את ההצבה ואת הפרשנות.
ג. משמעות של PMI שלילי

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

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

שאלה 6 — Regex

10 נקודות

הביטוי:

1*0+1?0

פירושו:

  • 1* — אפס או יותר מופעים של 1 בתחילת המחרוזת.
  • 0+ — מופע אחד או יותר של 0.
  • 1? — אפס או מופע אחד של 1.
  • בסוף חייב להופיע 0.

לכן הצורה הכללית היא:

1^k 0^m 1^r 0, k ≥ 0, m ≥ 1, r ∈ {0,1}
מחרוזתמתאימה?הסבר קצר
0לאאין מקום גם ל־0+ וגם ל־0 הסופי.
00כן0+ נותן 0 אחד, ואז 0 סופי.
1010כן1*=1, 0+=0, 1?=1, סוף=0.
000010כן1* ריק, 0+=0000, 1?=1, סוף=0.
10לאאחרי 1* יש רק 0 אחד, אבל צריך גם 0+ וגם 0 סופי.
01110לאהביטוי מאפשר לכל היותר 1 אחד אחרי רצף האפסים.
1100כן1*=11, 0+=0, סוף=0.
1לאחסרים אפסים.
המחרוזות המתאימות הן: 00, 1010, 000010, 1100.

שאלה 7 — קידוד ופענוח טקסט

6 נקודות

Encoder הוא מקודד: הוא מקבל טקסט קריא, כלומר רצף תווים, וממיר אותו לרצף של בתים לפי שיטת קידוד מסוימת, למשל ASCII או UTF-8.

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

טקסט → encoder → bytes bytes → decoder → טקסט

דוגמה פשוטה: באות האנגלית A, גם ב־ASCII וגם ב־UTF-8, הקוד הוא 65, כלומר 0x41. לעומת זאת, האות העברית א אינה ניתנת לייצוג ב־ASCII, אך ב־UTF-8 היא מיוצגת על ידי שני בתים: D7 90.

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

שאלה 8 — Jaro Similarity ו־Perplexity

16 נקודות
א. Jaro Similarity בין muose ו־mausse

המחרוזות הן:

s1 = muose, |s1| = 5 s2 = mausse, |s2| = 6

טווח ההתאמה הוא:

floor(max(5,6)/2) - 1 = floor(3) - 1 = 2

התווים המתאימים הם:

m ↔ m u ↔ u s ↔ s e ↔ e

לכן מספר ההתאמות הוא m=4. סדר התווים המתאימים בשתי המחרוזות הוא אותו סדר: m,u,s,e, ולכן מספר הטרנספוזיציות הוא t=0.

J = (1/3) · ( m/|s1| + m/|s2| + (m-t)/m ) = (1/3) · ( 4/5 + 4/6 + (4-0)/4 ) = (1/3) · ( 0.8 + 0.6667 + 1 ) ≈ 0.8222
הדמיון לפי Jaro הוא בערך 0.822.
ב. בחירת מודל לפי Perplexity

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

בחירה: מודל A.
ג. Perplexity של W = a^N b^N c^N d^N

אורך המילה הוא 4N. ההסתברויות הן:

P(a)=1/2 P(b)=P(c)=P(d)=1/6

לכן הסתברות כל הרצף:

P(W) = (1/2)^N · (1/6)^N · (1/6)^N · (1/6)^N = (1/2)^N · (1/6)^(3N)

לפי נוסחת Perplexity:

PP(W) = P(W)^(-1/(4N)) = [ (1/2)^N · (1/6)^(3N) ]^(-1/(4N)) = (2 · 6^3)^(1/4) = 432^(1/4) ≈ 4.559
ה־Perplexity של W הוא 432^(1/4) ≈ 4.56, ואינו תלוי ב־N.