כיצד לפתור 90% מבעיות NLP: מדריך צעד אחר צעד

Forgot password?

Delete Comment

Are you sure you want to delete this comment?

כיצד לפתור 90% מבעיות NLP: מדריך צעד אחר צעד

שימוש בלימוד מכונות להבנת ומינוף טקסט.

נתוני טקסט נמצאים בכל מקום

בין אם אתה חברה ותיקה ובין אם אתה עובד להשקת שירות חדש, אתה תמיד יכול למנף נתוני טקסט כדי לאמת, לשפר ולהרחיב את הפונקציונליות של המוצר שלך. המדע לחילוץ משמעות ולמידה מנתוני טקסט הוא נושא פעיל במחקר שנקרא NLP (Natural Language Processing).

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

זיהוי קבוצות שונות של משתמשים / לקוחות (למשל חיזוי הטרדה, ערך החיים, העדפות המוצר)

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

סיווג טקסט לפי כוונה (למשל בקשה לעזרה בסיסית, בעיה דחופה)

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

כיצד מאמר זה יכול לעזור

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

לאחר קריאת מאמר זה, תדע כיצד:

אסוף, הכין ובדק נתונים

בנה מודלים פשוטים להתחלה, ומעבר למידה עמוקה במידת הצורך

פרש והבין את הדגמים שלך, כדי לוודא שאתה אכן לוכד מידע ולא רעש

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

פוסט זה מלווה במחברת אינטראקטיבית המדגימה ומיישמת את כל הטכניקות הללו. אל תהסס להריץ את הקוד ולעקוב אחריו!

שלב 1: אסוף את הנתונים שלך

דוגמה למקורות נתונים

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

ביקורות על מוצרים (ב- Amazon, Yelp ובחנויות אפליקציות שונות)

תוכן שנוצר על ידי משתמשים (ציוצים, פוסטים בפייסבוק, שאלות על StackOverflow)

פתרון בעיות (בקשות לקוחות, כרטיסי תמיכה, יומני צ'אט)

מערך "אסונות במדיה חברתית"

לפוסט זה אנו נשתמש במערך נתונים שנמסר בנדיבות על ידי איור שמונה, המכונה "אסונות במדיה חברתית", שם:

התורמים בדקו למעלה מ- 10,000 ציוצים שנשלחו בשלל חיפושים כמו "ablaze", "sarantine" ו- "pandemonium", ואז ציינו אם הציוץ התייחס לאירוע אסון (בניגוד לבדיחה עם המילה או לביקורת סרטים או משהו לא אסון).

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

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

תוויות

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

שלב 2: נקה את הנתונים שלך

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

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

להלן רשימת בדיקה שתשמש לניקוי הנתונים שלך: (עיין בקוד לפרטים נוספים):

הסר את כל התווים הלא רלוונטיים, כמו כל התווים שאינם אלפאנומריים

סמל את הטקסט שלך על ידי הפרדתו למילים בודדות

הסר מילים שאינן רלוונטיות, כגון אזכרות או ציוצים של ציוץ ב- @ @

המר את כל התווים לאותיות קטנות, כדי להתייחס למילים כמו "שלום", "שלום" ו- "הלו" אותו דבר

שקול לשלב מילים עם איות שגוי או כתובות לסירוגין לייצוג יחיד (למשל "מגניב" / "kewl" / "cooool")

שקול לימטיזציה (צמצם מילים כמו "am", "are" ו- "is" לצורה נפוצה כמו "be")

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

שלב 3: מצא ייצוג נתונים טוב

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

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

קידוד חם אחד (תיק מילים)

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

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

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

דמיינו את ההטבעות

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

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

ויזואליזציה של שקיות מילים.

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

שלב 4: סיווג

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

חילקנו את הנתונים שלנו למערכת אימונים המשמשת להתאמה למודל שלנו ולמערכת בדיקות כדי לראות כמה טוב זה הכללי לנתונים שלא נראו. לאחר האימונים, אנו מקבלים דיוק של 75.4%. לא מרופט מדי! ניחוש המעמד השכיח ביותר ("לא רלוונטי") ייתן לנו רק 57%. עם זאת, גם אם דיוק של 75% היה מספיק טוב לצרכים שלנו, אל לנו לשלוח דגם מבלי לנסות ולהבין אותו.

שלב 5: בדיקה

מטריקס בלבול

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

מטריצת בלבול (ירוק הוא שיעור גבוה, כחול נמוך)

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

הסבר ופירוש המודל שלנו

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

תיק מילים: חשיבות מילולית

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

Like
Comment
Loading comments