הבנת שפה טבעית באמצעות למידה עמוקה

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

קרדיט צלם\תמונה: AshleyWiley, Getty Images Israel

מאת חגי שחר, מנהל מעבדת החדשנות, לייבפרסון

תחום עיבוד שפה טבעית (NLP), או בשם המעורר יותר השראה: הבנת שפה טבעית – NLU (יש שיטענו שהאחרון הוא תת תחום של הראשון, אבל לא בסמנטיקה עסקינן), הינו תחום וותיק למדי במדעי המחשב.
כבר משנות ה-50 של המאה הקודמת עסקו חוקרים בדרכים אוטומטיות לעבד שפה של בני אנוש. האלגוריתמים שפותחו עד שנות השמונים היו מבוססים לרוב על סט של חוקים שנכתבו ידנית, ומאוחר יותר מבוססי למידה ממוחשבת (Machine Learning).

ואכן, במשך השנים הושגו הישגים מרשימים ביותר – ניתוח סמנטי של משפטים, זיהוי חלקי דיבר (Part of Speech Tagging), זיהוי אלמנטים מתוך הטקסט (Entity Extraction), קסליפיקציה וקטגוריזציה של מסמכים, זיהוי נושאים (Topic Modeling), ניתוח תחושה (Sentiment), תרגום בין שפות, תרגום מקול לטקסט, תרגום מטקסט לקול ועוד.

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

מסתבר שניתוח שפה טבעית אינה משימה פשוטה כלל. מודלי ה-parsers הקיימים שבירים למדי ומתקשים מאוד עם טקסטים שנכתבו בצורה חופשית ושאינם עונים על סט החוקים הנוקשה של השפה.

למידה עמוקה לעזרה

למידה עמוקה (Deep Learning) הנו תחום חדש/ישן בעולם מדעי המחשב, או לייתר דיוק – מיתוג מחדש של אלגוריתמים, חלקם וותיקים מאוד, ממשפחת הרשתות נוירונים (Neural Networks).

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

בנושא זיהוי תמונה – בסוף 2014 הציגה גוגל פוסט על היכולת לתאר תמונה ע"פ האלמנטים שבתוכה.

בנושא זיהוי קול – מיקרוספוט פרסמה בסוף 2016 פוסט שבו מתואר הישג היסטורי בשוויון רמת הבנת שיחה בין אוזן אנושית לאוזן מכונה.

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

מה נשתנה?

בצד הדאטה:

ידוע שתנאי מקדים לפיתוח מערכות לומדות מבוססות דאטה, הוא קיומו של דאטה. ב-2010 החל פרויקט בשם imageNet ע"י חוקרים מאוניברסיטאות מובילות בארה"ב (בעיקר סטנפורד, ופרינסטון). בפרויקט זה, תויגו ידנית מעל 10 מליון תמונות הזמין לכל דורש.

קיומו של Dataset כזה, הקפיץ את קצב המחקר של אלגוריתמי למידה עמוקה, בעיקר באמצעות אלגוריתמים מסוג Convolutional Neural Network המתאימים במיוחד לזיהוי תמונה. 
גם מידע טקסטואלי לטובת מחקר נהיה זמין יותר מבעבר – SNAP של סטנפורד, דאטה מתויג של סקירות וציוני סרטים מ-IMDB, כמובן כל הטקסט של ויקיפדיה זמין להורדה, ועוד.

בצד החומרה:

אלגוריתמי NN 'אוהבים' מאוד לרוץ על מעבדי גרפיים (GPU), מעבדים אלו מתאפיינים ביכולת עיבוד מקבילית של פעולות פשוטות רבות. הבנצ'מרקים מראים שיפור של בין x50 ל x100 בזמן אימון הרשת באמצעות מעבדי GPU של מול מעבדי CPU. ואכן, חברות כמו NVIDIA, Intel, AMD, Asus מייצרות לאחרונה כרטיסים גרפיים אופטימליים לאלגוריתמי DL (ולא רק למשחקי first-man-shooter למיניהם).

בצד האקדמי:

תחום רשתות הנוירונים ידע עליות וירידות לרוב במהלך ה-70(!) שנה האחרונות. בשנים האחרונות הוצגו כמות עצומה של מחקרים אקדמים בעיקר מסטנפורד וממחלקות מחקר בגוגל, IBM ו-MS בנושא הלמידה העמקה, וקצרה היריעה מלפרט עליהם.

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

ובצד התכנה:

לטעמי מה שהכי הקפיץ את DL למרכז הבמה, זו העובדה שבסוף 2015 גוגל שחררה את Tensorflow – ספריה לפיתוח רשתות ללמידה עמוקה כקוד פתוח שזכתה לפופולריות עצומה עם למעלה מ-44K כוכבים.

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

למידה אוטומטית של פיצ'רים

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

מערכות לומדות קלאסיות דורשות לרוב תהליכי עיבוד מקדים של הדאטה, תהליכים הנקראים Feature Extraction או Feature Engineering. בתהליכים אלו, מנסה החוקר לחפש מאפיינים (פיצ'רים) בדאטה שיש להם שימוש בחיזוי, כלומר למשל – נוכחותם / אי-נוכחותם / או נוכחותם ביחד עם פיצ'רים אחרים, עשוי להצביע על מגמה כזו או אחרת בחיזוי. תהליך זה דורש במקרים רבים ידע עמוק בתחום הנלמד (Domain Knowledge) וידע סטטיסטי משמעותי, ועל כן, התהליך נוטה להיות מאוד ידני, סיזיפי וארוך.
בתחום ה NLP למשל, החוקר מצופה להבין – בבלשנות, חלקי דיבר, פורמליזציה של שפות, היגוי, מורפולוגיה, וכו'.. של כל שפה ושפה בה הוא מתעסק ע"מ לייצר את הפיצ'רים הרלוונטיים למערכת הלומדת.

למשל:

  • הבנת מבנה המילה – למשל הופעת un בתחילת המילה, הופכת את משמעותה – uninterested.
  • הבנת משמעות רצפי מילים – למשל pun intended.
  • הסתמכות על מאגרי טקסטים מנותחים תחבירית (למשל treebank)
  • הסתמכות על מאגרי מילים חיצוני לזיהוי חלקי דיבר, מילים חלופיות, מילים מנוגדות (למשל wordnet)
  • הסתמכות על מיפוי חיצוני של שמות, מקומות, אנשים, וכו'

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

זה כנראה יהיה מוגזם להגיד שתהליכי ה-feature extractions ייעלמו בזכות אלגוריתמי DL, אבל בהחלט ניכרת תחילתה של שינוי מגמה – במקום לתת לחוקר לחלץ פיצ'רים רלוונטיים בטקסט, "נזרוק" את כל הדאטה על הרשת והיא כבר תמצא את הפיצ'רים הרלוונטיים ותדע למשקל אותם בצורה הנכונה.

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

ייצוג הדאטה

ואכן, רוב האלגוריתמים הקלאסים בעולם ה-NLP מנסים לייצג מילים/משפטים/מסמכים ע"י וקטור או מטריצה של מספרים. קיימות מספר שיטות לייצג טקסט ע"י מבנה נתונים מספרי, בניהן: one-hot, CBOW, BOW, TF-IDF, Co-occurrence matrix, n-grams, skip-grams ועוד.

לדוגמא בשיטת הייצוג one-hot הפשוטה ביותר:

המילה 'מטוס' עשויה להיות מיוצגת ע"י וקטור: [0, 0, 0, 0, 1, 0, 0, 0, …. , 0, 0]
והמילה 'אווירון' עשויה להיות מיוצגת ע"י וקטור: [0, 0, 0, 0, 0, 0, 1, 0, …. , 0, 0]
כאשר גודל הוקטור הוא כגודל מספר כל המילים האפשרויות בגוף הטקסט.

ייצוג כזה יוצר שתי בעיות מרכזיות:

דלילות (Sparsity) – מספר הממדים (אורך הווקטור) הדרוש לייצג מילה בודדת הוא כאורך מספר המילים הקיימות בכלל גוף הטקסט (corups) העלול בקלות להגיע לעשרות אלפי מילים ויותר.
ברור כי ייצוג זה מאוד לא חסכוני ודורש משאבי מחשוב משמעותיים ע"מ להזינם למערכת לומדת.

הקשר בין מילים – המילים 'מטוס' ו- 'אווירון' נחשבות מילים נרדפות, השימוש בהם הוא בר תחליף ולהן משמעות זהה (אלא אם תשאלו את ביאליק). אף על פי כן, השיטות הנ"ל מפספסות מידע חשוב זה הנחוץ להבנת הטקסט בצורה מיטבית.

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

ייצוג וקטורי של מילים (word embedding)

ב-2013 פרסמו חוקרים מגוגל מאמר, המתאר כיצד לייצג מילים במרחב ווקטורי – מאמר שהשפיע עמוקות על ניתוח השפה הטבעית, והשימוש ברשתות נוירונים לשם כך, גוגל אף פרסמו את הקוד מאחורי המאמר הזה, בשם Word2Vec. אלגוריתם זה (המבוסס כמובן על רשת נוירונים), מסוגל לקחת גוף טקסט גדול ולייצר לכל מילה ומילה ייצוג במרחב וקטורי בגודל נבחר (לרוב 50-200 מימדים).

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

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

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

? ⇒ lolol, lmao, lololol, lolz, lmfao, lmaoo, lolololol, lol, ahahah, ahahha, loll, ahaha, ahah, lmfaoo, ahha, lmaooo, lolll, lollll, ahahaha, ahhaha, lml, lmfaooo

? ⇒ beautifull, gawgeous, gorgeous, perfff, georgous, gorgous, hottt, goregous, cuteeee, beautifullll, georgeous, baeeeee, hotttt, babeee, sexyyyy, perffff, hawttt

אפליקציות רבות בתחום הבנת השפה משתמשות בייצוג מילים במרחב וקטורי נמוך באמצעות Word2Vec (או GloVe המייצר תוצאה דומה, אבל עובד בשיטה סטטיסטית ולא באמצעות NN), כקלט לרשת ללמידה עמוקה, תהליך הנקרא pre-training.

הבנת רצפים – Recurrent Neural Network

שאלו עולה חדש: במילה אחת, איך בארץ? ענה: טוב. ובשתי מילים? ענה: לא טוב.

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

מערכות לומדות קלאסיות מתקשות לרוב בטיפול ברצפים התלויים בסדר ובזמן. ועל כן כבר בשנות ה 80 פותחה מחלקה במשפחת אלגוריתמי ה NN הנקראת Recurrent Neural Network, המיועדת להתמודד עם בעיה זו.

RNN-ים דומים לרשתות נוירונים רגילות עם הבדל אחד מרכזי – הפלט של כל שכבה משמש גם כקלט של אותה השכבה לצעד הבא. ארכיטקטורת היזון חוזר זאת מאפשרת לרשת ל'זכור' את המידע מהצעד הקודם (ושלמעשה הצטבר עד כה) ובכך לאפשר תיאור של רצפים.

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

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

העתיד – שאל אותי כל דבר

האם למידה עמוקה מתאימה לכל בעיות ה-NLP? בהחלט נראה שלשם העולם הולך. בעזרת שימוש ב-Word Embedding חכם עם ארכיטקטורת רשת מבוססות לרוב על RNNים (או ווריאציות שלה), הצליחו חוקרים להגיע לתוצאות טובות משיטות ה-NLP הקלסיות כמעט בכל תחום שנבחן.

האם בזה נגמר הסיפור? כנראה שרק ההתחלה..

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

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

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

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

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

לסיכום – אני רוצה ללמוד עוד

תחום הלמידה עמוקה, מייצר הזדמנויות רבות למפתחים שאינם בהכרח מגיעים מרקע של Data Science בזכות מספר סיבות:

  • טכנולוגיה חדשה, הדורשת זמן לימוד מכולם, בין אם מגיעים מתחום משיק או מתחום רחוק יותר. קצב השינויים כ"כ מהיר, ולהכיר את השינויים והמגמות חשוב לא פחות מלהתעמק באלגוריתם כזה או אחר.
  • הצורך הפוחת ב-feature engineering
  • התפתחויות של מעטפות (wrappers) מעל הכלים הגולמיים המקלים מאוד על השימוש בהן (למשל keras.io).
  • תמיכה בשפות רבות: python, java, lua ואפילו כמה ספריות מעניינות מאוד ב-javascript.
  • וספציפית בנושא הטקסט – קל מאוד להשיג טקסט גדול מאוד ולהתאמן עליו.

בשני הלינקים הבאים, יש רשימות תוכן מעולות למי שרוצה להעמיק בנושא NLP ו-DL.

אם הייתי צריך להמליץ על ספריות התוכנה המומלצות בעיקר בנושא של DL + NLP, אלו היו השתיים:

Gensim – בעיקר לטובת מימוש קל לשימוש ב python של אלגוריתם – Word2Vec, אבל גם בשביל אלגוריתמי topic modeling אחרים (LDA, LSI וכו').

Keras.io – ספריית הפיתוח הנוחה ביותר לפיתוח אלגוריתמי DL מעל Tensorflow או Theano. 
ממש לאחרונה בינואר השנה, גוגל הכריזו שהם מתכוונים להפוך את Keras להיות שפה טבעית מעל Tensorflow.

Happy Deep Learning!

כתב אורח

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

הגב

4 Comments on "הבנת שפה טבעית באמצעות למידה עמוקה"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 
Sort by:   newest | oldest | most voted
רון
Guest

כתבה מעולה!

bsd
Guest

ממש כתבה מעולה ומקצועית בתוך כל הכתבות הדי רגילות.

Rona
Guest

כתבה מרתקת!
תודה רבה על השיתוף והאינפורמציה.

Natan
Guest

אחלה כתבה! תודה!

wpDiscuz

תגיות לכתבה: