Skip to content

Latest commit

 

History

History
68 lines (36 loc) · 7.05 KB

File metadata and controls

68 lines (36 loc) · 7.05 KB

הטמעות

בעת אימון מסווגים המבוססים על BoW או TF/IDF, עבדנו עם וקטורי תיק מילים (bag-of-words) בעלי ממד גבוה באורך vocab_size, והמרנו באופן מפורש מווקטורי ייצוג מיקום בעלי ממד נמוך לייצוג דל של אחד-חם (one-hot). עם זאת, ייצוג אחד-חם אינו יעיל מבחינת זיכרון. בנוסף, כל מילה מטופלת באופן עצמאי, כלומר וקטורי אחד-חם אינם מבטאים שום דמיון סמנטי בין מילים.

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

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

על ידי שימוש בשכבת הטמעות כשכבה הראשונה ברשת המסווג שלנו, נוכל לעבור מתיק מילים למודל תיק הטמעות (embedding bag), שבו אנו קודם ממירים כל מילה בטקסט שלנו להטמעה המתאימה, ואז מחשבים פונקציית צבירה כלשהי על כל ההטמעות הללו, כמו sum, average או max.

תמונה המציגה מסווג הטמעות עבור חמש מילים ברצף.

תמונה מאת המחבר

✍️ תרגילים: הטמעות

המשיכו ללמוד במחברות הבאות:

הטמעות סמנטיות: Word2Vec

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

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

  • תיק מילים רציף (CBoW) — בארכיטקטורה זו, אנו מאמנים את המודל לנבא מילה מתוך הקשר סביבתי. בהינתן ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$, מטרת המודל היא לנבא $W_0$ מתוך $(W_{-2},W_{-1},W_1,W_2)$.
  • דילוג רציף (skip-gram) הוא ההפך מ-CBoW. המודל משתמש בחלון סביבתי של מילים בהקשר כדי לנבא את המילה הנוכחית.

CBoW מהיר יותר, בעוד ש-skip-gram איטי יותר, אך עושה עבודה טובה יותר בייצוג מילים נדירות.

תמונה המציגה את האלגוריתמים CBoW ו-Skip-Gram להמרת מילים לוקטורים.

תמונה מתוך המאמר הזה

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

הטמעות הקשריות

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

לדוגמה, המילה 'play' בשני המשפטים הבאים יש לה משמעות שונה לחלוטין:

  • הלכתי להצגה בתיאטרון.
  • ג'ון רוצה לשחק עם חבריו.

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

סיכום

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

🚀 אתגר

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

סקירה ולימוד עצמי

קראו את המאמר הזה על Word2Vec: Efficient Estimation of Word Representations in Vector Space