הטלוויזיה הרגה את הרדיו, האינטרנט הרג את הטלוויזיה והבוטים הורגים את אתרי האינטרנט

מיועד ל- מתחילים (כתבה קצת טכנית)

נכתב על ידי תמיר נווה

צאטבוטים Chatbots קיימים עוד משנות ה-60 (ראו את אליזה ELIZA החלוצה) אך ההתעניינות והפופולאריות שלהם גוברת :

רמת הפופולאריות של המושג Chatbot לפי Google Trends

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

פייסבוק הכניסה את האפשרות למפתחי בוטים למסנגר שלה ב 2017, וזה אחד הגורמים שהניעו את התחום הזה (יש עשרות אלפי צאטבוטים במסנגר). לעיתים יש גם אסונות, כמו בוט רפואי שבתגובה לתיאור סימפטומים של אדם כלשהוא יעץ שמדובר בסך הכל בכויית שמש (מה שנקרא: “אחי, נשרפת…”) כאשר מה שבאמת היה זה הרעלת דם (sepsis) שעלולה להביא למוות.

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

אז איך עובד הקסם הזה ?

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

לפי הגישה הג’נרטיבית Generative המודל הבסיסי לצ’אטבוט הינו אותו מודל המשמש לתירגום של טקסט ונקרא סדרה לסדרה seq2seq.

ארכיטקטורת seq2seq המשמש לניתוח שפה

ארכיטקטורת seq2seq המשמש לניתוח שפה

מודל זה מורכב ממקודד Encoder, צד שמאל בתרשים שמקבל את המשפט הקודם, וממפענח Decoder, צד ימין בתרשים שמחזיר את משפט התגובה. כל אחד מאותם מרכיבים “מקודד” ו-“מפענח” הינם רשת RNN=RecurrentNeural Network. רשת RNN מקבלת קלט סדרתי (מילה מילה במקרה שלנו) ומעדכנת משתני מצב נסתרים בתוכה תוך כדי הוצאת פלט.

הסבר על התרשים:

התרשים קצת לא ברור למי שלא מכיר RNN ולכן אנסה להסביר אותו ואת ההיגיון שיש מאחורי מבנה זה:

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

הסבר על החיצים האנכיים:

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

הסבר על החיצים האופקיים:

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

מבנה זה של רשתות RNN שונה ממבנה של הרשתות הקלאסיות שנקראות Feedforward Neural Network בהן כל יחידה רק מקבלת קלט אחד שהינו התוצאה של היחידה הקודמת.

מה ההיגיון שבשימוש ברשתות RNN לניתוח שפה:

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

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

למשל נשאל צאטבוט: “מהו אירוע הספורט הגדול שיש במלבורן בחודש הקרוב ?”

והצאטבוט יענה: “אירוע הספורט הגדול במלבורן בחודש הקרוב הינו Australian Open Tennis”

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