מחשבים יודעים לקרוא טקסט, דבר זה ידוע. אם הטקסט הוא בפורמט ממוחשב - זה ברור, אפילו בנאלי. וגם הטכנולוגיה שמאפשרת לתרגם טקסט סרוק למילים (OCR) עובדת לא רע כבר הרבה שנים, לפחות עבור אותיות לטיניות.
המקום בו המהנדסים מזיעים קשה הוא הבנת משמעות של טקסט. ההבנה העמוקה, האנושית, של המסר שמועבר מתוך רצף המילים. המידע, הרגש (סנטימנט), העמדה (בעד, נגד), הדימויים ומשמעותם, הומור, דברים והיפוכם (מה שמכונה בשוגג "ציניות"), קריאה בין השיטין ועוד.
אם הטקסט לימודי, האם המחשב מסוגל להבין ממנו, למשל איך מכינים פיצה, במקרה שהטקסט הוא מתכון?
הנושא נופל תחת ההגדרה הכוללנית של בינה מלאכותית ונחשב לאחד האתגרים הקשים בתחום זה.
כל כך קשה, שפתרונו נחשב לזה שמקרב את הבינה המלאכותית ליכולות, או יותר נכון מורכבות, של חשיבה אנושית. AI Complete קוראים לזה ובינה שמסוגלת להבין טקסט לעומקו מכונה גם Strong AI. בינה חזקה הפכה למילת מפתח אצל סופרי מדע בדיוני. אמצו אותה אם אתם בענין של לכתוב ספר מדע בדיוני דיסטופי בו האנושות מושמדת כלאחר יד, מתוך בוז עמוק שרוחשת לה הבינה החזקה.
מיזנתרופים המייחלים לקץ האנושות? המשיכו לקרוא!
סקרנים לדעת איך זה עובד? גם המשיכו לקרוא!
לא תתאכזבו, בשני המקרים.
כבוד לחלוצים
ג'ון מקארתי, מדען בתחום מדעי המחשב וזוכה פרס טיורינג, היה מי שהמציא את הביטוי בינה מלאכותית (AI) בכנס דארטמות ב - 1956. למעשה, מחקר הבינה מלאכותית החל משם ואילך.
8 שנים אחר כך, ב - 1964, דניאל בוברו, מגיש בתור עבודת דוקטורט ב - MIT, תכנית מחשב שכתב, המאפשרת להבין שאלות פשוטות אנושיות על תרגילים באלגברה.
התוכנה נקרא STUDENT והיא נכתבה ב - Lisp, שבין מפתחיה היה מקארתי הזכור לטוב.
Lisp אגב נחשבת כלי פיתוח ומחקר עבור בינה מלאכותית במשך שנים רבות, בשל יכולותיה ליצור "עצי מבני נתונים" (Tree Data Structures). עצים אלה משמשים אותנו עד היום כדי לפרק את המשפט למרכיביו ולקבוע את היחסים ביניהם. למעשה, המשפט האחרון שכתבתי הוא המפתח להבנה מעמיקה ומדויקת של טקסט על ידי מחשב. זהו ככל הנראה התהליך המתרחש במוחנו כאשר אנחנו מנתחים משפט שאנחנו קוראים או שומעים. עוד על המשמעות של למידה ולמה היא אינה כה טריוויאלית למרות שכל ילד יודע אותה, ברשומה אחרת כאן בבלוג.
המהפכה - SyntaxNet
אחרי הרבה שנים של פיתוחים הדרגתיים במוסדות אקדמיים שונים, גוגל פיתחה ושחררה לאוויר העולם במאי 2016 את מערכת SyntaxNet. חשוב לציין בהקשר זה, שבגלל המאמצים המרובים המושקעים בפיתוח בינה מלאכותית, רוב החברות הגדולות (גוגל, IBM, מיקרוסופט ופייסבוק) משתפות פעולה ופותחות את המידע לכל. כמו בפרויקט הגנום האנושי, המידע נגיש לכל. היישום המסחרי או המחקרי פתוח לכל אחד.
זו אגב בדיוק הנקודה בה אנחנו עושים שימוש בכל הפיתוחים המענינים האלה כדי ליצור את מנוע ההמלצות שלנו, המאתר סרטים וקטעי וידאו עבור הרצאות ופרזנטציות.
סינטקס-נט היא רשת נוירונים מלאכותית (ANN) שמסייעת לכם לאמן ('לאמן' הוא מונח מיחשובי שכוונתו היא 'ללמד.' היכנסו לקישור זה כדי להבין למה הוא מכונה 'אימון') מחשב להבין טקסט אנושי. מעתה ואילך אקרא לטקסט אנושי שפה טבעית, שהוא המונח המקובל בבלשנות.
ובבלוג הזה עושים הרבה כבוד לבלשנות.
מהי הבנה של טקסט
האינטואיציה אומרת שאם מחשב יודע את הפירוש המילוני (לקסיקלי) של כל המילים, אז הוא יודע שפה ולכן יכול להבין טקסט. זו טעות כמובן: יחידת ההבנה הבסיסית של שפה, כל שפה, היא המשפט, אפילו הוא רק בן מילה אחת. הבנה של שפה מתחילה מהבנה של משפטים. למשפטים יש מבנה (Structure) ויש קשר תלותי בין חלקיהם (Dependency).
רקע תיאורטי קצר
במאמר מוסגר אציין שהנחת הקשר התלותי בין מרכיבי המשפט נובעת מתיאוריית ה - Dependency של לוסיין טנייר, בלשן סטרוקטורליסטי צרפתי שבערוב ימיו, בשנות ה - 50' פיתח תיאוריה על פיה ניתוח משפט מתנתק מסדר המילים. הפועל הוא הרכיב המרכזי וקיומו הינו תנאי הכרחי לקיומו של משפט תקין. כל שאר מרכיבי המשפט מסתדרים סביבו והבנה של המשפט הינה הבנה של היחסים בין אותו פועל לבין המילים האחרות במשפט. התיאוריה שלו פורסמה למעשה לאחר מותו (ב - 1959) והיא נחשבת לגורם המשפיע ביותר על פיתוחי בלשנות חישובית המקובלים לניתוח שפה טבעית, כפי שאפשר לראות מעצם בחירתה של סינטקס-נט ללכת לאורו. זאת בניגוד לשיטת ה - Constituency או Phrase Structure Grammar, שנעם חומסקי הוא מההוגים החשובים בה, המניחה מבנה בינארי לכל משפט, בו יש לכל הפחות Verb Phrase ו - Noun Phrase. לכן גם ניתוח על פי Constituency מפוצל יותר מזה של ה - Dependency ברוב המקרים.
השאיפה של סינטקס-נט
מערכת ממוחשבת שיודעת לנתח נכון מבנה של משפט ולהבין נכון את היחסים בין חלקיו, תכבוש את העולם, נקודה. סינטקס-נט מתיימרת להיות כזו. במאמר שפורסם באוניברסיטת קורנל (מרץ 2016 עם עדכון ביוני 2016), שהמפתח הראשי של סינטקס-נט הוא בין כותביו, מוסבר גם למה סינטקס-נט היא המדויקת ביותר בעולם עד היום:
עיבוד המשפט הסופי נעשה רק בסוף קריאתו, כלומר אחרי שהמחשב כאילו 'מתבונן לאחור' ומוודא שאין דו משמעות (Garden Path Sentences) שנוצרה בו. העיבוד הסופי הזה, מעין מבט-על על המשפט, מכונה גם 'נורמליזציה גלובלית' (יש לנו את זה גם בניסוח יותר מעורפל, אם תתעקשו).
נשמע סתום? (בניגוד לשאר הפוסט, שהוא בטח נורא ברור) - הסבר ודוגמאות, חלקן משעשעות, יבואו בהמשך.
תהליך עיבוד משפט
כתלמיד בלשנות, ניסיתי להבין איך עובדת הבנת ועיבוד השפה אצל בני אדם. במקביל, מדעני המחשב תהו אם חיקוי המנגנון האנושי (שהבלשנים משערים אותו) הוא זה שיביא מחשבים להבין שפה באותה רמה. ואולי למחשבים צריך לדבר ב'מחשבית' ולא ב'אנושית'? לא בטוח שיש תשובה חד משמעית לשאלה הזו ואולי, סלחו לי על הכפירה, זה בכלל לא חשוב, כל זמן שזה עובד?
עיבוד משפט מכונה גם Parsing והבנתו מקפלת בתוכה את התהליך: פירוק המשפט למרכיביו המבניים (סינטקטיים) ואיתור היחסים ביניהם באמצעות יצירת עץ מבני, כלומר קביעת יחסי היררכיה ותלות בין המרכיבים.
שימו לב שמשמעות המילים (סמנטיקה) באה רק אחר כך! ולמה? כי כולנו יודעים שלמילים רבות יכולה להיות משמעות אחרת במשפטים שונים. זו יכולה להיות משמעות מילולית אחרת (למשל saw יכול להיות 'ראה' או 'ניסר') או משמעות רגשית אחרת ('בטח' יכול להיות מילת אישור או ההפך הגמור). ייחוס המשמעות הוא חלק בלתי נפרד מהבנת תפקיד המילה בתוך המשפט. הקביעה הזו, הנראית טריוויאלית במבט ראשון, היא האחראית לרוב טעויות המכונה ולעליונות שיש לבני אדם עדיין על מחשבים בתחום זה.
שלב אחרי שלב
המחשב, בדיוק כמונו, בני האדם (רובוט יקר, אני יודע שגם אתה קורא את הפוסט הזה. אין סודות בינינו), נחשף לחלקי המשפט בזה אחר זה.
בדרך להבנת המונח האמורפי הנקרא 'משמעות' הוא מחפש, בדיוק כמונו - 'שורש.' הו, המטאפורה.
שורש המשפט, על פי התיאוריה המודרנית, הוא הפועל. תמיד. ואם יש יותר מפועל אחד, נחפש אחרי הפועל המרכזי (ROOT), זה שממנו נובע הכל.
כל מילה שהמחשב נתקל בה מקבלת תיוג, שעשוי להשתנות בהמשך, אם יתברר שתפקיד המילה במבנה המשפט שונה. תיוג זה תיוג של חלק משפט - Part of Speech או POS. זוהי, אם תרצו, יחידת ההבנה שבדרך. היא מייחסת לכל מילה, פרט למשמעות, גם הקשר לשאר חלקי המשפט. וכאמור - מערכת מתוחכמת יודעת גם להמיר תיוג אחד באחר וכך למנוע דו משמעות בפרשנות.
ואז המחשב מתחיל לבנות יחסים בין השורש למרכיבים:
עליזה ראתה את אברהם
כאן קל לראות כי 'ראתה' הוא הפועל המרכזי, כלומר שורש המשפט. גם אם לא הצטיינתם בלימודי לשון, אתם-ן יודעות ויודעים שעליזה היא הנושא (עונה על השאלה 'מי ראתה') ואברהם הוא המושא הישיר (עונה על השאלה 'את מי היא ראתה').
האתגר המרכזי של Parsing הוא להבין נכון את היחסים בין חלקי המשפט, אפילו אם הפועל המרכזי הובן כהלכה. הביטו למשל בדוגמה הבאה:
בדוגמה הזו נישאר באנגלית.
הפרשנות הראשונה, זו שנעשית באמצעות סינטקס-נט (התמונה למעלה) היא נכונה: אליס נסעה במורד הרחוב במכוניתה.
הפרשנות השניה, האבסודרית, אך האפשרית היא: אליס נסעה במורד הרחוב (שנמצא) במכוניתה.
איך Pasrer שאינו מספיק איכותי מגיע למסקנה שגויה זו?
קודם כל ראו את הסוגריים שהוספתי באדום, שיוצרים את המשמעות: ׳הרחוב שבמכוניתה׳. הם לא קיימים בתמונה המקורית שנוצרה על ידי חכמי גוגל. איכשהו, היה נראה לי שיותר קל להבין את מקור הדו-משמעות בצורה כזו, שהרי סוגריים מוכרות לנו כדרך לנעול בתוך חבילה ביטויים מספריים, כך שאותו עקרון מיושם גם על מילים (ותודה לד"ר נירית קדמון, שהקלה עלינו בדרך זו את הקורס 'סמנטיקה פורמלית').
ועכשיו להסבר הרשמי:
שימו לב לחיצים. המקום ממנו החץ יוצא נקרא בסיס. המקום אליו החץ מופנה נקרא modifier. כל הסיפור יחד נקרא Arc (קשת), בגלל הצורה שנוצרת.
עכשיו שימו לב למילה in. בדוגמה הראשונה, הנכונה, המילה in היא modifier של drove, כלומר יוצא משם חץ המוביל ל - in ובפשטות "אליס נהגה ב (in)" [מכוניתה].
בדוגמה השניה, השגויה, המילה in היא modifier של street, אליס נהגה ב (in) [רחוב]. משם הטעות רק מתגלגלת, שהרי in הוא בעצמו בסיס של המכונית (יוצא משם חץ לכיוון המכונית) ולכן הרחוב נמצא במכונית.
מניעת הטעות
איך סינטקס-נט יודעת למנוע את הטעות הזו ולבחור במשמעות הנכונה? על ידי סטטיסטיקה. תוך התקדמות בציר הבנת המשפט (משמאל לימין), המערכת צריכה לקבל החלטות, המבוססות על הנחות שכל אחת מקבל ציון באמצעות לימוד של רשת הניורונים. האפשרויות מתחרות ביניהן וההחלטה היא על בסיס הסתברות וניבוי (עליהן כתבתי בהרחבה כאן).
חישוב יעיל - Beam Search
כתבתי קודם שהמחשב מתקדם עם המילה, קורא אותה ומייצר הבנות בהדרגה. הבנת מילה (והפרדתה מחיבורים סלנגיים או אחרים כמו חיבורי l'a בצרפתית או wanna באנגלית לצורך הדוגמא) היא ענין פשוט יחסית: רק צריך להכניס לתוך המילון הממוחשב את המילים בשפה מסוימת, כולל יוצאי דופן, ביטויי עממיים וכן הלאה. מחשבים מעולים בעיכול כמויות גדולות כאלה של מידע, הרבה יותר מבני אדם.
עכשיו, נניח שהמחשב פסע בנתיב של הבנה, קבע את תפקידה של מילה במשפט (Part of Speech לעיל) וכתוצאה מכך הסיק על משמעותה.
עד כאן טוב ויפה. אלא שהמחשב התקדם במורד המשפט ואז התברר לו שמה שהוא חשב לחיבור בין בסיס ל - modifer (כלומר - Arc) הוא בעצם חיבור אחר! בדיוק כשם שהמערכת הבינה קודם שיש ליצור קשת בין drove ל - in ולא בין street ל - in בדוגמה הנ"ל על אליס הנוהגת במורד הרחוב.
איך מייצרים את ההחלפה הזו, בין החלטה אחת של המחשב לגבי תפקיד של מילה במשפט, לבין החלטה אחרת?
לשם כך הגאונים החליטו שהחלטה ראשונה לגבי תפקידה של מילה תיחשב להחלטה זמנית, המכונה גם Buffer.
כאשר המערכת בטוחה בתפקידה של המילה, באמצעות התקדמות במשפט וחשיפה למילים נוספות, ההחלטה הופכת להיות בטוחה יותר. המילה נכנסת אז לתוך מערום המילים שהמערכת בטוחה לגבי משמעותן. הערימה הזו היא ה - Stack.
מתוך המערום המצטבר והולך של מילים שתפקידן מונח כוודאי צומחים גם היחסים בין המילים, הלוא הן הקשתות (Arcs) שתוארו קודם לכן ושאת הציורים שלהן ראיתם באיורים שלמעלה.
מערכת ממוחשבת נמדדת בין השאר ביעילות שלה, כלומר במהירות בה היא מגיעה להחלטה ולא רק בעצם נכונותה של ההחלטה. תכנתים קוראים לקוד יעיל "קוד אלגנטי" כי הוא קצר וחוסך בזמן ומשאבים.
כדי להפוך את ההחלטה לגבי מילה מהשערה (buffer) להחלטה (stack) המערכת עושה שימוש בשיטה המכונה Beam Search. שיטה זו מנסה לחסוך בזיכרון על ידי חישוב וקיצוץ האפשרויות שנראות בלתי סבירות (מתחת לסף וודאות מוגדר מראש). כלומר, כתבתי קודם שכל אפשרות לקיום יחס מסוים בין מילה למילה מתחרה עם אפשרויות אחרות (למשל, שהמילה in תהיה קשורה ל - street ולא ל - drove) ושכל אפשרות כזו מקבלת ניקוד על פי הסתברותה הסטטיסטית. אז יישום של Beam Search מאפשר בכל פעם לזנוח אפשרות אחת לטובת אפשרות אחרת, שבינתיים קבלה ניקוד גבוה יותר.
ראו את אנימציית ה - gif החביבה בהמשך, המדגימה איך השערות הופכות לקביעות ומשם עוברות הצרנה (פורמליזציה) לנוסחה, שידידנו הרובוט כל כך מחבב:
המין האנושי, הפלא האמיתי
עד כאן מחשבים. ואיך בני אדם מקבלים את ההחלטה לגבי הדו-משמעות, שהיא ברוב המקרים, באופן מעורר השתאות, נכונה?
האמת היא שאין לי מושג!
יכול להיות שאנחנו מערבים את הידע שלנו על העולם בעסק, כלומר ההבנה שלגמרי לא סביר שרחוב יימצא בתוך מכונית. מערכות ממוחשבות ללמידת שפה, נכון להיום, לא עושות שימוש בידע כללי על העולם לצורך קבלת החלטות (ותקנו אותי אם אני טועה).
קחו לדוגמה משפטי דו-משמעות, המכונים גם Garden Path Sentences (הבטחתי הרחבה קודם), על שום הליכתנו המדומה בנתיב הבנה מסוים, המדומה לנתיב של גן בו אנו פוסעים בנחת.
הכל יפה וטוב ואז בום! תחזרי את כל הדרך חזרה וארגני את כל מה שהבנת מחדש. מתברר שזה לא גן של ורדים, אלא חוחים.
נתחיל עם משהו פשוט: Johh went to the bank. זוהי דו-משמעות סמנטית פשוטה, כי בהקשר המשפט המסוים הזה, ייתכן כי ג'והן הלך לבנק או לגדת הנהר.
אם המשפט היה John was refused a loan at the bank, כל דובר שפה ילידי, המשתף פעולה (הכוונה, לא "עושה דווקא." הביטוי 'משתף פעולה' בא מתחום הפרגמטיקה בבלשנות), יקבע כי אמנם אפשר להיות מסורב הלוואה בגדת הנהר, אבל הידע הכללי שלנו על העולם מנחה אותנו שהלוואות מסורבות בבנקים.
אגב, עד כמה סינטקס-נט מבינה פרגמטיקה? אין על כך אף מילה במסמכים הרשמיים ואני משער שאפס מאופס (סליחה גוגל, הייתי חייב).
דוגמה נוספת היא המשפט The old man the boat. כאן הבלבול נובע מהעובדה ש - 100% מדוברי השפה (האנושיים) יניחו שמדובר בביטוי 'האיש הזקן' - old man ולכן יחברו את שתי המילים זו לזו, כלומר נושא->מושא. אלא שאז אנחנו שמים לב, שאין למשפט פועל! האיש הזקן הסירה. אבל מה הוא עושה שם? חותר? דג? נמצא שם? הדבר לא מצוין. פעמוני האזעקה מצלצלים: לא יכול להיות. האם זו טעות של מחבר/ת המשפט? או אולי מישהו מהתל בנו? ואולי נבדוק שוב?
מערכת סינטקס-נט חסרת חשדנות או חוש הומור. היא לא תניח הנחות פרנואידיות או חברתיות וישר תבדוק שוב. מהר מאוד, כנראה לפנינו, היא תגיע למסקנה שהמילה man היא הפועל במשפט (במשמעות של "מאיישים") ומכאן ש - old הוא אכן הנושא (modifier) של man (המשתמש כ - base), אבל במשמעות של זקנים או בקיצור "הזקנים מאיישים את הסירה."
בעצם אני לא בטוח... - גוגל טרנסלייט נופלת במשפט הזה בגדול:
לסיכום
לסינטקס-נט יש עוד דרך ארוכה:
* אין לו חוש הומור.
* אינו מבין כפלי משמעות.
* חלש במטאפורות, אלא אם מדובר בביטויים מוכרים ("כמו מהרסייך ומחריבייך....," הביטוי הכי שחוק בטוקבקים).
* חלש באיפכא מסתברא.
* אינו מבצע שיפוטים של סבירות (ידע כללי על העולם).
* חלש באנאפורות (מהי אנאפורה? לכו ללמוד בלשנות, עצלנים!).
* מתעלם מהעולם האקטואלי (פארודיות על פליטות פה של פוליטיקאים, סלוגנים של פרסומות, ציטוטים ממערכונים וכדומה).
* מכין קפה די בינוני.
ובקיצור - חכם, גבוה ומפנק, אבל לא רגיש, לא ספוטני, גם לא חובב מוסיקה וטיולים.
והכי חשוב: יש לו הורים עשירים ואזרחות אמריקאית.