[בלה פוסט אורחת בלה גבי סטנובסקי בלה סטודנט לבלשנות בלה באוניברסיטת בת בלה]
לאחרונה נתקלתי ברשת במספר אלגוריתמים לשוניים מעניינים ומוזרים שהוצעו בשפה האנגלית. עניין אותי לנסות ולשחזר אותם עבור השפה העברית. רשומה זו סוקרת את האלגוריתמים, את הכלים החישוביים אשר נעשה בהם שימוש, ומספקת מקבילה עברית שלהם.
NURBLE
במקור
מן הקומיקס המעולה SMBC של הכותב והמאייר זק ווינר (Zach Weiner). בקומיקס מועלים לא פעם רעיונות מתחומים רבים, חלקם דמיוניים לחלוטין, וחלקם מתבררים כפרקטיים למדי.
באחד הקומיקסים הכותב העלה את הסברה כי ניתן לשפר טקסטים פוליטיים ע"י שינוי כל מילה שאינה שם עצם ל-NURBLE. עוקב טוויטר חרוץ לא איחר להגיב עם תוכנה קטנה שעושה בדיוק את זה – מקבלת טקסט, ומחזירה אותו "מנורבל".
הרעיון לא חמק מעינם של הכותבים של לאנגואג' לוג, אלו התייחסו בפוסט שבו הוצעו מספר "מנרבלים" נוספים.
איך זה נעשה
התוכנה הקטנה ששלח העוקב (שנכתבה בשפת PHP) עושה שימוש במשאב חיצוני – קובץ המכיל מאגר מילים וחלק הדיבר שלהם. התוכנה עוברת מילה-מילה על הטקסט אותו יש לנרבל, ובודקת לפי המאגר האם המילה היא שם עצם או לאו – בהתאם היא מחזירה Nurble, או את המילה עצמה.
התוצאה
מעניינת ומשעשעת למדי, ניתן להתרשם באותו הקומיקס מהרצה של האלגוריתם על נאום המצב לאומה של אובמה. באופן מפתיע ניתן להבין את רובו, גם כאשר הרוב המוחלט של המילים "מנורבל".
בעברית
כפי שראינו התוכנה המקורית עשתה שימוש במאגר מילים ממשאב חיצוני. למיטב ידיעתי משאב שכזה לא קיים בשפה העברית. בנוסף, כנראה שנטייתה של השפה העברית לעמימות תחבירית יקשה מאד על שימוש במשאב כזה, גם אם קיים. מסיבות אלו נעשה שימוש במתייג – פונקציה אשר בקבלת משפט מחזירה, בין השאר, את חלקי הדיבר של מילותיו (עוד על כך בהמשך) באחוזי ההצלחה מסוימים. בהינתן פונקציה כזו הפתרון למשימה נעשה טריוויאלי – נעבור על כל המשפטים בקלט, נזין אותם למתייג, ונברור את שמות העצם מתוכם.
התוצאה
התרשמו בעצמכם מ"נירבול" נאומו של יאיר לפיד במליאה:
מקור, ולאחר נירבול.
עינכם הרואות – ה"נארבל" עשה עלייה ל-"בלה", לדעתי גם במקרה הזה ניתן להבין את המסר בקווים כלליים.
נסו בעצמכם
אם אתם מעוניינים לבדוק בעצמכם את ההשפעה של הנירבול על טקסטים אחרים, העלתי מדגים של התוכנה (לאחר הכנסת הטקסט, סמנו את האופציה NURBLE).
אתנחתא – מתייגים, מפיגי עמימות ומודלים סטטיסטיים
בתחום הבלשנות החישובית קיימים מספר תחומים ובעיות אשר נחקרו רבות בשנים האחרונות – רובן בעיות בסיסיות אשר פתרון שלהן יהווה בסיס כמעט לכל מערכת אשר רוצה לעשות שימוש בשפה טבעית. בין אלו ניתן למצוא: תיוג חלקי דיבר (Part Of Speech Tagging), זיהוי ביטויים שמניים (NP Chuncking) וזיהוי ישויות (Named Entity Recognition). קל לראות כי אלו הן אבני הבסיס למשימות "מורכבות" יותר, דוגמת ניתוח תחבירי (Parsing), תרגום מכונה, סיכום אוטומטי, ועוד.
בניגוד למשימות ה"מורכבות", במשימות בסיס אלו קיימת לרוב הסכמה בין דוברי השפה לגבי הפלט הרצוי. כך, כל דובר שפה עברית יסכים כי חלק הדיבר של המילה "רץ" במשפט "גל רץ הביתה" הנו פועל (Verb), בעוד שספק אם קיימים שני אנשים שונים אשר יסכמו את הרשומה הזו לכדי אותו סיכום.
כמובן שבעיות אלו הנן תלויות שפה עד מאד, והאלגוריתמים אשר מנסים לפתור אותן חייבים להתייחס למאפייניה הייחודיים של השפה אליה הם מכוונים פתרונן. למשל אופייה הצירופי (word agglutination) של השפה העברית עלול להקשות רבות על כותבי אלגוריתמים כנ"ל לשפה העברית – אלגוריתמים אלו צריכים להפיג את העמימות באשר היא קיימת לגבי המילים במשפט. אם נסתכל שוב על המילה "רץ" הפעם במשפט "גל הזיז את הרץ למשבצת הסמוכה", ברור כי יש להתייחס למילה רץ בתור שם עצם, בניגוד לפועל שראינו במשפט לעיל – אלגוריתמים אלו יצטרכו לבחור את הפירוש הנכון למילה בהינתן ההקשר המתאים. [ראו גם כאן וכאן – א"ק]
המגמה הבולטת בשנים האחרונות לתקיפת בעיות אלו היא גישה הסתברותית (סטוכסטית). ניתן לייחס זאת להתחזקות כוח המחשוב, לקורפוסים העצומים והבלתי מעובדים (unstructured corpora) של שפה טבעית שמשתמשי האינטרנט מייצרים על בסיס יומיומי, ולאכזבה כללית ממודלים דטרמיניסטיים ו-"שלמים" יותר שהוצגו בעבר.
אלגוריתמים הנוקטים בגישה זו מניחים קיום של מודל כלשהו אשר ממנו מופקים משפטים תקינים בשפה או שבעזרתו ניתן לנתח משפטים בשפה טבעית. כך לדוגמא רשתות נוירונים מניחות קיומו של מודל המפשט את המוח האנושי לכדי נוירונים אשר מופעלים לפי פונקציות הפעלה מסוימות (activation function), ומודלי מרקוב חבויים (Hidden Markov Models) מניחים קיומו של מודל של מכונת מצבים, אשר המעבר בין המצבים תלוי במשפט הקלט ובהסתברות מסוימת.
מודלים אלו נמצאים בבסיס האלגוריתמים הסטוכסטיים. אופיינית, אלגוריתמים אלו יתחילו מתהליך של "אימון" על משפטי קלט משפה טבעית. תהליך זה מטרתו לכייל את הפרמטרים אשר מוטבעים במודל. כך ברשתות נוירונים יכוילו המשקלים אשר ניתנים לכל נוירון, ובמודלי מרקוב חבויים תכוילנה ההסתברויות למעבר בין המצבים.למעשה ניתן לומר כי תהליך האימון מתאים את המודל למשימה הספציפית מולה ניצבים.
לאחר שלב האימון, מפסיקים לכייל את הפרמטרים של המודל ומציגים בפניו משפטים שלא חזה בהם בשלב האימון. בתקווה, המודל אכן יודע להכליל איזושהי תחזית לגבי כלל המשפטים בשפה (או בחלק נרחב ממנה), ולכן יוכל לתת תשובות באמינות מסוימת גם עבור משפטים שלא ראה בעבר.
חלק מן החכמה בכתיבת מערכות שכאלו כוללת את בחירת המודל, אפיון הפרמטרים שלא ישתנו במהלך האימון (לדוגמא, טופולוגיית הרשת במקרה של רשתות נוירונים), ובחירת המאפיינים (features) שיהוו קלט למודל הנבחר.
עבור מימוש שני האלגוריתמים הפשוטים יחסית שמתוארים ברשומה זו, עשיתי שימוש במתייג ומפיג העמימות שנכתב על ידי מני אדלר מאוניברסיטת בן גוריון. משפטים שלמים מן הקלט מוזנים אליו, ובתמורה מקבלים עבור כל מילה בין השאר את חלק הדיבר שלה (בו כבר עשינו שימוש עבור אלגוריתם NURBLE) את הבניין, הזמן, המין, הגוף, ואת צורת הריבוי שלה – בכל אלו נעשה שימוש באלגוריתם הבא שיתואר.
Jailbreak the Patriarchy
במקור
במקרה הזה מדובר בתוסף לשוני מוזר לדפדפן chrome שמתיימר לשבור את הפטריארכיה השלטת ברשת.
התוסף מחליף בטקסט דפי האינטרנט שמות גוף זכריים לנקביים ולהיפך. בנוסף הוא מחפש ביטויים זכריים מסוימים ומחליף אותם במקבילה הנקבית שלהם, ולהיפך. כך לדוגמא "he loved his mother very much" יהפוך ל-"she loved her father very much" ו-"the patriarchy also hurts men" יומר ל- "the matriarchy also hurts women".
איך זה נעשה
לפי תיאור התוסף, נראה כי מדובר במשימת "חפש-החלף" פשוטה יחסית: התוסף עובר על הטקסט בדף, ומחפש ביטויים שנקבעו מראש. ברוב המשפטים אכן מושגת החלפת מין (gender swapping, לפי הכותב), זאת מכיוון שרוב חלקי הדיבר בשפה האנגלית הם ניטרליים מבחינת מין.
(אובמה נפגש עם קבוצת ה-KINGS/QUEENS, הכתבה המקורית (מימין) מול התוצר של התוסף (משמאל). מקור
בעברית
בדומה לאלגוריתם הקודם, נראה כי הגישה שננקטה במקור לא תספק מענה הולם בעברית. נסתכל על הדוגמא שנתנה בחלק הקודם:
- גל רץ הביתה.
- גל הזיז את הרץ למשבצת הסמוכה.
נניח כי נבצע משימה של חיפוש והחלפה, ונרצה להחליף את "רץ" ב-"רצה", נקבל:
- גל רצה הביתה
- * גל הזיז את הרצה למשבצת הסמוכה
ברור כי זוהי אינה התנהגות רצויה, וכאמור, בשפה האנגלית לרוב לא נתקלים בקשיים שכאלו.
הדרך בה נקטתי לפתרון הבעיה הנה שימוש במתייג שהוזכר לעיל – ממנו דליתי עבור כל מילה בקלט את חלק הדיבר שלה, בהתאם הפעלתי עליה פונקציית החלפת מין. אתאר את הפונקציות עבור חלקי הדיבר שם-גוף ופעלים:
שמות גוף:
בהינתן הידע כי מילה מסוימת היא שם גוף, והעובדה כי שמות הגוף היא קבוצה סגורה וקטנה יחסית של מילים, ניתן להשתמש בטבלה פשוטה ולהמיר "הוא" <-> "היא", "הם" <->"הן" וכיו"ב.
פעלים:
בהינתן הפרמטרים הבאים עבור מילה: בניין, זמן, מין, גוף, ואת צורת הריבוי שלה. ניתן להשתמש בחוקי התחביר העברי, לגזור את השורש ולשתול אותו במקבילה הנקבית / זכרית.
בנוסף לאלו, הכנסתי גם רשימת ביטויים בעלי מין אותם האלגוריתם מחליף, בדומה לתוסף המקורי – "אמא" <->"אבא", "פטריארכיה" <-> "מטריארכיה" ועוד.
התוצאה
מעניינת, אך רחוקה מלהיות מושלמת. אם להמשיך באותו קו של דוגמאות, בחרתי את פוסט הפייסבוק שמשום מה התפרסם בזמן האחרון על ריקי כהן הדמיונית, וזוהי התוצאה: "אני רוצה שנדבר על מר כהן". ניתן לראות כי ביטויים רבים מבלבלים את התוכנה, אולם ברגעיה היפים יוצאים משפטים לתפארת מרב מיכאלי.
נסו בעצמכם
גם בתוכנה זו ניתן להתנסות בהמרת מינו של כל ביטוי העולה על רוחכם – כאן (לאחר הכנסת הטקסט, סמנו את האופציה Jailbreak).
[בלה בלה רשומת אורחת בלה גבי בלה בלה בלה פוסט אורחת בלה צרו בלה קשר בלה בלה דרך הטופס בעמוד בלה בלה]
Read Full Post »