אחרי שהבנו מה זה צ'אטבוט, בואו נראה ממה הוא בנוי. כמו כל טכנולוגיה חדשה גם צ'אטבוטים מביאים איתם קונספטים וטרמינולוגיה חדשה והיום נתמקד במושגים אלה.
נניח שאנחנו בנינו בוט לענף הבנקאות והמשתמש שואל אותו "מה יתרת העו"ש שלי?" או שהוא יכול לשאול "כמה כסף יש לי בחשבון?" או "האם אני במינוס?". צ'אטבוט שבנוי טוב אמור להבין שאלו דרכים שונות לשאול את אותה השאלה והכוונה של המשתמש היא לבדוק את יתרת העו"ש.
ללא קשר לדרך בה נשאלה השאלה הבוט אמור להיות מסוגל לשייך את הקלט לאותה הכוונה או באנגלית intent והיא בדיקת יתרת עו"ש . בשבילנו intent הוא בעצם ה use case שהבוט תומך בו. נגיד שהבוט שלנו תומך בשלושה intents : בדיקת יתרת עו"ש, העברה מחשבון לחשבון וניהול הוצאות. בהינתן העובדה ש intent הוא Use case נתמך ע"י בוט אז אוסף ה intents מגדיר לי את עולם ההבנה של הבוט.
לכן אם אשאל את הצ'אטבוט שלי מה המניות המומלצות לרכישה תשובתו תהיה שהוא לא כל כך מבין במניות ועדיף לי להתייעץ עם יועץ השקעות.
אתם בטח תוהים איך הבוט יודע מתי לבדוק יתרת עו"ש ומתי לעשות העברה בנקאית? איך הוא מבין שאמירה מסוימת משויכת לכוונה מסוימת?
והתשובה היא כמו בחיים אמיתיים נציג שרות שהולך לעבוד בבנק עובר הדרכה אז גם את הבוט אנחנו מלמדים. תהליך הלימוד של הבוט (training) הוא בעצם הזנתו ע"י אמירות לדוגמא שנקראות Utterances. הבוט ישתמש בטכניקות מרובות של בינה מלאכותית על מנת להבין לא רק את האמירות שסופקו כדוגמא אלא גם אמירות שונות שיידע לשייך כדומות לאלה שסופקו לו בתהליך הלימוד. אז בכדי לבדוק את יתרת העו"ש אני אספק utterances כמו "כמה כסף יש לי בחשבון?", "מה היתרה שלי?" והמצב האידיאלי הוא לאמן את הבוט עם 10-15 אמירות פר intent שאני רוצה שיתמוך. חשוב לציין שעל בוט חכם לדעת לזהות אמירות שלאו דווקא היו חלק מתהליך הלימוד.
נחזור לדוגמא של הבוט הבנקאי שלנו. הבנו כבר שאמירות כמו "כמה כסף יש לי בעו"ש" ו"מה הצבירה בחסכונות" משויכות לאותו ה intent. למרות שבשתי האמירות הכוונה היא לבדוק יתרה ברור לנו שמדובר ביתרות שונות – עו"ש וחסכונות. וכאן נכנסים לפעולה ה entities שהם בעצם פיסות מידע שאנחנו מחלצים מהאמירות של המשתמש כדי להציג את היתרה הספציפית שביקש. ראשית אנחנו מחלצים את ה intent והוא בדיקת יתרה. מה intent נחלץ את ה entity שמשויך אליו ונשמור אותו במשתנה שנוכל להשתמש בו בקריאה לשרות ה REST שמביא את היתרות ממערכות הבנק. לדוגמה עבור intent בדיקת יתרה נגדיר entity בשם AccountType ונאפיין אותו ע"י שלוש אפשרויות – עו"ש, חסכונות, אשראי. בהינתן הקלט "כמה כסף יש לי בעובר ושב?" הבוט יבין שה intent הינו בדיקת יתרה וה entity AccountType יאוכלס בערך "עו"ש".
בדוגמה הזאת השתמשתי ב entity שהינו ספציפי לענף הבנקאות כמו סוג חשבון, קיימים גם entities גנריים כמו date, currency, duration ועוד רבים שמאוד שימושיים בלהבין את הפרטים המדויקים של ה intent.
האתגר העיקרי בממשק דמוי שיחה הוא להבין את משמעות הקלט של המשתמש, הרי אנחנו לא יכולים לצפות ממשתמשים להשתמש באמירות מדויקות וקבועות מראש. גישות כמו חיפוש מילות מפתח או מבוססת כללים גם לא יביאו אותנו רחוק.
אנחנו חייבים מנגנון שיאפשר לבוט למדל את האמירות שסיפקנו בתהליך הלימוד למודל שיאפשר לנבא איך הקלט שהתקבל משויך לכוונה או intent. אחד המודלים הנפוצים בממשקי דמויי שיחה היום הינו רשת נוירונים (נושא שמצדיק פוסט נפרד). המודל בדרך כלל יגובה במנוע Natural Language Processing שמבין את משמעות השפה ובעזרתו הבוט יבין שיש קשר בין המילים כמו כסף, מזומן, הון ובהקשר של בוט בנקאי מילים אלו יכולות להחליף אחת את השניה.
מנגנון זה הינו מנגנון של בינה מלאכותית וזהו בדיוק המנגנון intelligence שהבוט שלנו צריך.
האינטראקציה בין הבוט למשתמש היא לא רצף של שאלות ותשובות שאין קשר בניהן אלא היא שיחה. לשיחה שלנו יש מבנה שלפיו היא זורמת. לדוגמה זרימה בהזמנת פיצה יכולה להיות בחירת גודל, תוספות, הזנת קוד מבצע, פרטי משלוח ותשלום. בכל שלב בתהליך הזרימה הבוט יידע לטפל באינטראקציה מולו בהתאם לשלב הנוכחי ובקונטקסט של התוצאות שהתקבלו בשלבים קודמים. לקונספט הזה אנחנו קוראים FLOW.
אלה הם המושגים העיקירים בעולם של הבוטים, בפוסטים הבאים נראה איך ממשים אותם במציות.