תוכן העניינים
- מודל שפה מסוג n-grams
- Cosine Similarity בין מסמכים
- Distributional Similarity
- ייצוג וקטורי של מילים ומסמכים
- PMI והשוואת קבוצות
- Regex
- קידוד ופענוח טקסט
- Jaro Similarity ו־Perplexity
שאלה 1 — מודל שפה מסוג n-grams
15 נקודותבמודל ביגרם מחשבים הסתברות של משפט כמכפלת הסתברויות מעבר בין מילים עוקבות. אם הסימן <s> נתון כסימן התחלה, בדרך כלל לא מכפילים את ההסתברות של <s> עצמו, אלא מתחילים במעבר ממנו אל המילה הראשונה.
הסבר אפשרי: הטבלה התקבלה לאחר החלקה סטטיסטית, למשל Laplace smoothing, ולכן גם מעברים שלא הופיעו בפועל בקורפוס מקבלים הסתברות חיובית קטנה. הסבר אפשרי נוסף הוא שהסימן <s> משמש גם כסמן טכני בין משפטים או מסמכים, ולכן ייתכנו צמדים סמוכים של סמני התחלה בנתונים.
- הנחת מרקוב מסדר ראשון: ההסתברות למילה תלויה רק במילה הקודמת, ולא בכל ההיסטוריה של המשפט.
- הסתברויות המעבר קבועות ונלמדו מקורפוס מייצג.
- מגבלה: המודל מתעלם מהקשר ארוך טווח, מתחביר עמוק וממשמעות רחבה של המשפט.
- מגבלה נוספת: מילים נדירות או לא מוכרות דורשות טיפול מיוחד, למשל החלקה או סימון UNK.
שאלה 2 — Cosine Similarity בין מסמכים
8 נקודותנסמן את שני הווקטורים:
מכפלה סקלרית:
נורמות:
לכן:
שאלה 3 — Distributional Similarity ומילים בעייתיות
15 נקודותמילים כמו of, the, from הן בדרך כלל stop words. הן מופיעות כמעט בכל הקשר ולכן אינן עוזרות להבחין במשמעות. דרכי טיפול מקובלות:
- הסרה של stop words לפני בניית המטריצה.
- שימוש במשקול כגון TF-IDF, PMI או PPMI כדי להפחית משקל של מילים כלליות מדי.
- סינון מילים לפי שכיחות גבוהה מדי או נמוכה מדי.
דוגמאות:
- bank: בנק כספי לעומת גדת נהר.
- light: אור לעומת קל במשקל.
- sanction: אישור לעומת עונש.
- oversight: פיקוח לעומת שגיאה שנבעה מהתעלמות.
הבעיה היא שמודל וקטורי פשוט עשוי לתת לכל מילה וקטור אחד בלבד, ולכן הוא מערבב הקשרים שונים. ניתן להתמודד בעזרת הפרדת משמעויות, אשכול הקשרים, או שימוש במודלים הקשריים.
במודלים קלאסיים כמו Word2Vec לכל מילה יש בדרך כלל וקטור אחד קבוע, ולכן כל המשמעויות של המילה מתערבבות באותו ייצוג. לעומת זאת, מודלים הקשריים כמו BERT או מודלים מבוססי Transformer מייצרים ייצוג שונה לאותה מילה לפי ההקשר שבו היא מופיעה במשפט.
שאלה 4 — ייצוג וקטורי של מילים ומסמכים
15 נקודות- הייצוג דליל מאוד: רוב הערכים בווקטור הם אפסים.
- אין הבנה סמנטית: מילים נרדפות כמו car ו־automobile נחשבות מילים שונות לגמרי.
- אין התייחסות לסדר המילים או לתחביר.
- קשה להתמודד עם הקשר: אותה מילה מקבלת אותו ייצוג גם במשמעויות שונות.
שתי השיטות מייצגות מילים כווקטורים במרחב רציף, כך שמילים דומות נוטות להיות קרובות זו לזו. שתיהן נשענות על רעיון התפלגותי: משמעות של מילה נלמדת לפי ההקשרים שבהם היא מופיעה.
הבדל מרכזי: SVD מפרק מטריצה גלובלית של שכיחויות או הופעות משותפות, ואילו Word2Vec לומד וקטורים באמצעות משימת חיזוי מקומית, למשל CBOW או Skip-gram.
אפשר לייצג מסמך כווקטור אחד על ידי ממוצע של וקטורי המילים במסמך. גרסה טובה יותר היא ממוצע משוקלל, למשל משקל לפי TF-IDF, כך שמילים חשובות במסמך ישפיעו יותר ממילים כלליות.
אפשרויות מתקדמות יותר: Doc2Vec, או שימוש בייצוג של משפט/מסמך ממודל Transformer.
ייצוג דליל הוא וקטור גדול מאוד, בדרך כלל בגודל אוצר המילים, שבו רוב הערכים הם אפס. לדוגמה: Bag of Words או TF-IDF. ייצוג צפוף הוא וקטור קצר יותר, שבו רוב הערכים אינם אפס ומייצגים מידע סמנטי דחוס. לדוגמה: Word2Vec, GloVe, BERT embeddings.
שאלה 5 — PMI, שכיחות מילים והשוואת קבוצות
15 נקודותתדירות גבוהה לבדה אינה אומרת שמילה מאפיינת קבוצה מסוימת. מילה יכולה להיות נפוצה בשתי הקבוצות, כמו Family, ולכן היא אינה מבדילה ביניהן. בנוסף, אם קבוצה אחת גדולה יותר, ייתכן שיהיו בה יותר הופעות פשוט כי יש בה יותר תשובות.
נסמן:
עבור הקבוצה הדתית:
עבור הקבוצה הלא־דתית:
PMI שלילי אומר ששני אירועים מופיעים יחד פחות ממה שהיה מצופה אילו היו בלתי תלויים. כלומר יש ביניהם קשר שלילי או חוסר התאמה ביחס לציפייה הסטטיסטית.
שאלה 6 — Regex
10 נקודותהביטוי:
פירושו:
- 1* — אפס או יותר מופעים של 1 בתחילת המחרוזת.
- 0+ — מופע אחד או יותר של 0.
- 1? — אפס או מופע אחד של 1.
- בסוף חייב להופיע 0.
לכן הצורה הכללית היא:
| מחרוזת | מתאימה? | הסבר קצר |
|---|---|---|
| 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 | לא | חסרים אפסים. |
שאלה 7 — קידוד ופענוח טקסט
6 נקודותEncoder הוא מקודד: הוא מקבל טקסט קריא, כלומר רצף תווים, וממיר אותו לרצף של בתים לפי שיטת קידוד מסוימת, למשל ASCII או UTF-8.
Decoder הוא מפענח: הוא מקבל רצף של בתים ומנסה לפרש אותו בחזרה כתווים לפי אותה שיטת קידוד.
דוגמה פשוטה: באות האנגלית A, גם ב־ASCII וגם ב־UTF-8, הקוד הוא 65, כלומר 0x41. לעומת זאת, האות העברית א אינה ניתנת לייצוג ב־ASCII, אך ב־UTF-8 היא מיוצגת על ידי שני בתים: D7 90.
שאלה 8 — Jaro Similarity ו־Perplexity
16 נקודותהמחרוזות הן:
טווח ההתאמה הוא:
התווים המתאימים הם:
לכן מספר ההתאמות הוא m=4. סדר התווים המתאימים בשתי המחרוזות הוא אותו סדר: m,u,s,e, ולכן מספר הטרנספוזיציות הוא t=0.
נבחר במודל A, כי יש לו Perplexity=150, שהוא נמוך יותר מהערך של מודל B. במדד Perplexity, ערך נמוך יותר פירושו שהמודל מייחס הסתברות גבוהה יותר לטקסטים ולכן הוא מנבא טוב יותר את הנתונים.
אורך המילה הוא 4N. ההסתברויות הן:
לכן הסתברות כל הרצף:
לפי נוסחת Perplexity: