מודל Bag-of-words
פעולות נוספות
Bag-of-words או BoW (בתרגום חופשי: "מודל שק מילים") הוא מודל ייצוג של טקסט המשתמש באוסף לא סדור (מולטי קבוצה) של מילים. המודל נמצא בשימוש נרחב בעיבוד שפה טבעית ובאחזור מידע. הוא מתעלם מסדר מילים (ועל כן מרוב המבנה התחבירי או הדקדוקי) אך משמר את הריבוי של כל מילה.
מודל בג-אוף-וורדס משמש בדרך כלל בשיטות של סיווג מסמכים, שבהן, למשל, (תדירות) ההופעה של כל מילה משמשת כתכונה לאימון מסווג.[1] המודל נמצא בשימוש גם בתחום הראייה ממוחשבת.[2]
אזכור מוקדם למונח "שק מילים" בהקשר בלשני ניתן למצוא במאמרו של זליג האריס משנת 1954 על מבנה הפצתי (Distributional Structure).[3]
הגדרה עריכה
הדוגמה הבאה ממדלת מסמך טקסט באמצעות בג-אוף-וורדס. להלן שני מסמכי טקסט פשוטים:
(1) John likes to watch movies. Mary likes movies too.
(2) Mary also likes to watch football games.
על בסיס שני המסמכים הללו, נבנית רשימה עבור כל מסמך:
"John","likes","to","watch","movies","Mary","likes","movies","too"
"Mary","also","likes","to","watch","football","games"
ייצוג כל שק מילים כאובייקט JSON והצמדה למשתנה JavaScript תיראה כך:
BoW1 = {"John":1,"likes":2,"to":1,"watch":1,"movies":2,"Mary":1,"too":1};
BoW2 = {"Mary":1,"also":1,"likes":1,"to":1,"watch":1,"football":1,"games":1};
כל מפתח (key) הוא המילה, וכל ערך הוא מספר המופעים של אותה מילה במסמך הטקסט הנתון. סדר האלמנטים אינו קבוע, ולכן, לדוגמה, האובייקט {"too":1,"Mary":1,"movies":2,"John":1,"watch":1,"likes":2,"to":1} שקול לחלוטין ל-BoW1.
הערה: אם מסמך נוסף מהווה איחוד של שני המסמכים הקודמים:
(3) John likes to watch movies. Mary likes movies too. Mary also likes to watch football games.
הייצוג שלו ב-JavaScript יהיה:
BoW3 = {"John":1,"likes":3,"to":2,"watch":2,"movies":2,"Mary":2,"too":1,"also":1,"football":1,"games":1};
- כפי שניתן לראות באלגברה של מולטי־סטים (שקים), ה"איחוד" של שני מסכים בייצוג באג־אוף־וורדס הוא, פורמלית, איחוד זר, והסכום הרב־קבוצתי שלו הוא:
- <math>\mathrm{BoW}_3 = \mathrm{BoW}_1 \uplus \mathrm{BoW}_2</math>
סדר מילים עריכה
ייצוג BoW של טקסט מסיר כל סדר בין המילים. לדוגמה, הייצוג של "man bites dog" (אדם נושך כלב) ושל "dog bites man" (כלב נושך אדם) יהיה זהה. למרות היעדר זה של תחביר או דקדוק, ייצוג BoW הוא מהיר ועשוי להספיק למשימות פשוטות שאינן דורשות את סדר המילים. לדוגמה, בסיווג מסמכים, אם המילים "מניות", "מסחר" ו"משקיעים" מופיעות פעמים רבות, סביר להניח שהטקסט הוא דוח פיננסי. עם זאת, הייצוג לא יאפשר להבחין במשמעויות מפורטות התלויות בסדר המילים בלבד.
מימושים עריכה
מימושים של מודל בג-אוף-וורדס עשויים לכלול שימוש בתדירויות של מילים במסמך כדי לייצג את תוכנו. ניתן "לנרמל" את התדירויות באמצעות הופכי לתדירות במסמכים, או Tf–idf. בנוסף, עבור המטרה הספציפית של סיווג, פותחו חלופות של למידה מונחית הלוקחות בחשבון את תווית המחלקה של המסמך.[4] לבסוף, במשקולות בינאריות (נוכחות או היעדר) נעשה שימוש במקום בתדירויות עבור בעיות מסוימות (למשל במערכת WEKA).
שיטת ה-Hashing עריכה
חלופה נפוצה לשימוש במילונים היא "טריק הגיבוב" (Hashing trick), שבו מילים ממופות ישירות לאינדקסים באמצעות פונקציית גיבוב.[5] בעת שימוש בפונקציית גיבוב, אין צורך בזיכרון לאחסון מילון. בפועל, הגיבוב מפשט את המימוש ומשפר את יכולת ההרחבה.[6] התנגשויות עשויות להתרחש כאשר שתי מילים מגובבות לאותו אינדקס, אך הדבר קורה בתדירות נמוכה ועשוי לתפקד כצורה של רגולריזציה.[7]
ראו גם עריכה
הערות שוליים עריכה
- ^ McTear et al 2016, p. 167.
- ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
- ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
- ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
- ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
- ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).
- ^ שגיאת לואה ביחידה יחידה:Citation/CS1/Configuration בשורה 1739<includeonly></includeonly>: attempt to index field '?' (a nil value).