ABA


"סקירה על בלשנות חישובית \ NLP"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15879 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15879
Nokia
חבר מתאריך 1.7.02
538 הודעות
   16:14   07.05.10   
אל הפורום  
  סקירה על בלשנות חישובית \ NLP  
 
   בלשנות חישובית\NLP

הקדמה:

NLP הוא תחום המחקר במדעי המחשב שמטרתו היא לגרום למחשבים "להבין" ולפתור בעיות הקשורות בשפות אנושיות.
הפתרונות בימינו לבעיות אלה מבוססים בעיקר על מודלים מבוססי למידה כמו Support Vector Machines, Hidden Markov Models, Conditional Random Fields שבהסבר שטחי הרעיון בהם הוא לקבל המון מידע מתוייג (אם מדובר בבעיית POS Tagging אז נניח המידע יהיה המון טקסטים שמתוייגים עפ"י חלקי דיבר) ובעזרת וקטור פיצ'רים שיינתנו למודל כקלט ומשקל שנותנים לכל פיצ'ר שיאומן לפי הTraining Data לתייג טקסט חדש לא מתוייג. בהנתן טקסט שאותו נרצה לתייג, המודל ייתן למילים בטקסט את התיוג הכי "מתאים" לפי הTraining Data בהתחשב בפיצ'רים. פיצ'ר לדוגמה יכול להיות אם נניח מילה מתחילה באות גדולה. הרעיון הוא לקחת פיצ'רים אינטואיטיביים ולחלק להם ערכים נומרי כשלבסוף תתבצע סכימה על כל הפיצ'רים הממושקלים ונרמול לטווח הסתברות מסויים.

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

בד"כ המדד להערכת טיב פתרון (Evaluation) לבעיות מסוג זה מתבסס על Precision וRecall

Precision – כמה תייגנו נכון מתוך כל אלה שתייגנו

Recall – כמה תייגנו מתוך אלה שהיינו אמורים לתייג

והרבה פעמים מוסיפים את מדד הf1 שהוא מדד שמטרתו היא לתת ממוצע הרמוני בין Precision ל Recall
http://en.wikipedia.org/wiki/F1_score

תתי בעיות:

Part Of Speech Tagging – בעיה ידועה ובסיסית בתחום הNLP היא לתייג משפט לפי חלקי הדיבר שבו. עבור המשפט: דני הלך לים - נרצה שהמחשב יבין שדני הוא הנושא, הלך הוא הפועל וים זה המושא. המחקר בתיוג POS לאנגלית בימים אלה מגיע לתוצאות של מעל 95% הצלחה.

Parsing – בעייה שמכלילה את בעיית הpos היא ניסיון לבנות עץ גזירה שלם למשפט. שהעץ יתחיל משורש שהוא המשפט, יירד לNP (Noun Pharse) וVP (Verb Phrase) ומכל אחד מהם גם יתפצל. יש כיום שיטות שמביאות ביצועים טובים בתחום, אך הביצועים לא עוברים בהרבה את ה90% (ככלל בNLP שיטה מוגדרת כמצויינת כשהיא מגיעה לדיוק של מעל 95%).

Segmentation – בעיה שפחות רלוונטית לאנגלית אך יותר לסינית ולעברית. מטרתה היא להפריד מילים ולהבין מתי מתחילה ומסתיימת מילה. בעברית יש מורפולוגיה עשירה וזאת הסיבה שלפעמים מילה מורכבת מ2 מילים. לדוגמה: כשפגשתי = כאשר פגשתי.

Word Sense Disambiguation – בעיה שבאה לטפל במשמעויות כפולות של מילה ובעצם הבנת המשמעות של המילה בקונטקסט שהיא מדוברת. עפ"י מרצה שלימד אותי, למילה "לבנה" יש בעברית 23 משמעויות (!) וברור שנרצה לזהות את המשמעות הנכונה שלה בהנתן משפט.

Named Entity Recognition – בהנתן טקסט, לעיתים נרצה לזהות בו את היישויות שהן חברות\בני אדם\מקומות וכו'. אני אישית מודע לחקר הבעיה בעיקר באנגלית ושם יותר קל להצליח בגלל השימוש באותיות גדולות בתחילת שמות. הרבה יוריסטיקות מסתמכות על כך ששמות של חברות לרוב יסתיימו בInc. והרבה פעמים גם יש שימוש במילונים של תארים (נניח אם הנושא של המשפט מלווה בCEO, סביר להניח שהנושא של המשפט הוא בן אדם) וכן מילונים של שמות של מקומות (שם המורכב מכמה מילים שהאחרונה בהן היא Lake יהיה שם של נהר (מקום)) ועוד שיטות דומות.. רוב המודלים בימים אלה בתחום הם מבוססי CRF כשהפיצ'רים משתנים בהתאם למטרת התיוג.

Sentiment Analysis – אחת התתי בעיות היותר חמות בימים אלה היא ניתוח סנטימנט של כותב הטקסט בהינתן הטקסט. כשבטקסט יהיה כתוב: Google is a bad company נרצה להסיק שהסניטמנט כלפי גוגל בטקסט הוא שלילי. כמובן שטקסטים נוטים להיות יותר מסובכים מזה בגלל שמעורבות מילות שלילה פעמים רבות וכן יש את הבעיה שאי אפשר לקבוע אם מילה היא חיובית או שלילית באופן אבסולוטי משום שהרבה פעמים חיוביות של מילה היא בהתאם לקונטקסט שלה.
שימושים:
יש אתרים בימינו שמנסים לחזות סנטימנט של חברות עפ"י תחזיות האנליסטים המתפרסמות עליהן ובכך לנסות לחזות לאן "נושבת הרוח".
יש חברות שמשתמשות במחקר בתחום כדי לנתח באופן אוטומטי תגובות של לקוחות על המוצרים שלהן ולפעמים גם מנסות לפרק את התגובות לחלקים במוצר עליהם היה הסנטימנט (אם מדובר בפלאפון אז לפעמים תהיה ביקורת שבה ייכתב שהמסך קטן מדי אבל הסאונד מעולה. המטרה תהיה לתפוס את הסנטימנט החיובי כלפי הסאונד ואת הסנטימנט השלילי כלפי המסך).

Machine Translation – תרגום מילים\משפטים\טקסטים משפה אחת לשפה אחרת, דבר שמתפתח כל יום יותר ויותר. המגמה בימים האלה היא יותר ויותר להתחיל לתרגם מרמת הביטויים מאשר מרמת המילים כדי להגיע לתוצאות טובות יותר (שלא יהיה מצב שנתרגם מילה מילה במשפט ואז נגיע בשפה אחרת למשפט לא הגיוני). Google Translate הוא דוגמה לכלי שמתפתח בכיוון המחקר בתחום הנ"ל.

קצת לינקים כדי שיהיה לכם עם מה לשחק:
POS Tagger שמבוסס על Brill Tagger שנחשב לאחד מכלי תיוג חלקי דיבר הכי טובים שיש באנגלית:
http://web.media.mit.edu/~hugo/montylingua/index.html (Python Java)

Brill Tagger Demo:
http://cst.dk/online/pos_tagger/uk/index.html

עוד POS Tagger מעולה של סטנפורד:
http://nlp.stanford.edu/software/tagger.shtml (Java)

עבור כל הPOS Taggers חשוב לדעת שהם מתייגים לפי קבוצת טאגים שנקראת Penn Treebank Tag Set והנה רשימה של הקיצורים בה ומה כל אחד אומר:
http://www.ims.uni-stuttgart.de/projekte/CorpusWorkbench/CQP-HTMLDemo/PennTreebankTS.html

Stanford Parser שהוא הפרסר הכי טוב שנתקלתי בו:
(http://nlp.stanford.edu/software/lex-parser.shtml (Java

Stanford NER שהוא כלי מעולה לNER והכי טוב שיצא לי לראות באינטרנט:
http://nlp.stanford.edu/ner/index.shtml

אם אתם מסתבכים עם הקיצורים של הNamed Entities אז רצוי לבקר בערך ויקיפדיה:
http://en.wikipedia.org/wiki/Named_entity_recognition


אתר שעושה Sentiment Analysis לכתבות כלכליות:
http://jane16.com/
אני יודע שהאתר הזה מתבסס רק על מילון של ביטויים כלכליים חיוביים ושליליים והוא מגיע לתוצאות די יפות.

GATE - חבילת NLP מאוד עשירה לJava שיש בה כלי פחות או יותר לכל משימה שתיארתי פה:
http://gate.ac.uk/
NLTK - ה-חבילת NLP שיש בPython
http://www.nltk.org/
יש לה תיעוד מאוד עשיר בספר הנ"ל:
http://www.nltk.org/book
ואם מישהו יצטרך עזרה בדברים ספציפיים אז תשאלו

Lingpipe – חבילת NLP קלה להבנה ולשימוש בג'אווה:
http://alias-i.com/lingpipe/

למי שמתעניין במחקר העדכני בתחום ורוצה לקרוא, הייתי ממליץ על האתר שמרכז את המאמרים מהכנסים הכי חשובים ועדכניים בתחום:
http://aclweb.org/anthology-new/
יש שם מנוע חיפוש באתר למעלה ובו תוכלו לחפש מאמרים לפי התחום שמעניין אתכם.

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

תהנו!


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  מאוד ממצה, תודה על המאמר ! Deuce  07.05.10 18:05 1
  מעניין מאוד, תודה! :) ronen333  09.05.10 12:54 2
     ברמה הכללית לא.. אבל זה מתחלק לפי סוגי האלגוריתמים Nokia 09.05.10 14:29 3
  טעות zeevrevah 13.05.10 07:53 4

       
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   18:05   07.05.10   
אל הפורום  
  1. מאוד ממצה, תודה על המאמר !  
בתגובה להודעה מספר 0
 
אני באופן אישי גם אוהב את התחום ולומד אותו כרגע.
בסה"כ תחום דיי גדול והסברת על הרבה נושאים, סה"כ אינפורמטיבי ומקיף






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   12:54   09.05.10   
אל הפורום  
  2. מעניין מאוד, תודה! :)  
בתגובה להודעה מספר 0
 
   אתחיל לחקור קצת יותר בנושא..
יש איזה ידע מוקדם שצריך לפני שמתחילים ללמוד על זה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nokia
חבר מתאריך 1.7.02
538 הודעות
   14:29   09.05.10   
אל הפורום  
  3. ברמה הכללית לא.. אבל זה מתחלק לפי סוגי האלגוריתמים  
בתגובה להודעה מספר 2
 
   אלגוריתמים שהם יותר מבוססי חוקים \ Semi-Supervised לפעמים דורשים פחות ידע מוקדם ופשוט דורשים הבנה (הם בד"כ משתמשים בתכונות של שפה). אלגוריתמים שהם יותר Supervised בד"כ מבוססים על מודל קיים (לדוגמה SVM\CRF\HMM) ומה שמתואר באלגוריתמים זה בעצם הגדרת הפיצ'רים, התכונות שאותן האלגוריתם ילמד.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
zeevrevah

   07:53   13.05.10   
אל הפורום  
  4. טעות  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net