מדוע סלוט-פילינג של צ'אטבוט מתפרק בשיחות אמיתיות
בדמו, סלוט-פילינג של צ'אטבוט נראה אמין: העוזר שואל שאלה, המשתמש עונה בערך אחד, הסלוט נסגר, והשיחה ממשיכה הלאה. בתנועה אמיתית, המשפט כמעט אף פעם לא מגיע בצורה הצפויה — וחילוץ פרמטרים של השיחה מתחיל לאבד ערכים בכל שלב.
ניסוחים חופשיים נותנים ערכים מורכבים ויחסיים: «אחרי הצהריים ביום שישי», «כמו בפעם הקודמת», «בערך בעוד שעתיים». מילונים וכללים מכסים את רשימת הווריאציות, אך לא את השילובים שלהן.
תקלה נפוצה שנייה — כמה ישויות באותו משפט: «משלוח למינסק ביום חמישי, שתי כתובות, אחת מ-10 עד 12» — הראשונה מחולצת, והשאר נשארות כסלוטים לא מלאים, והטופס שואל שוב על מה שהאדם כבר ציין.
סירובים ודחיות שוברים את הלוגיקה אחרת: «עדיין לא יודע», «בואו אחר כך» — והמודל כותב בביטחון ערך לסלוט, כי הטופס דורש מילוי. החלפת נושא בתוך אותה הודעה («והאם אפשר לשלם בכרטיס?» באמצע איסוף הנתונים) מאפסת את הסט שכבר נאסף, והמשתמש חוזר לשאלה הראשונה.
ב-Rasa ובפלטפורמות שיח דומות זה נראה בלוגים מיד: הסלוט ריק, הטופס נכנס ללולאה של שאלות חוזרות, ומספר הצעדים עד לתוצאה גדל.
שגיאות זיהוי ישויות מצטברות: שיעור השיחות שבהן כל סלוטי החובה מלאים ללא חיבור נציג יורד, ואסקלציות והבהרות חוזרות אוכלות את האפקט של האוטומציה. בהמשך נבחן כיצד הכלאה של כללים ומודל שפה סוגרת את ארבעת התרחישים האלה — ומה בדיוק משתנה בחילוץ הפרמטרים.
מה נותן סלוט-פילינג של צ'אטבוט בסכימה היברידית
ניתוח פרמטרים של השיחה על מודל שפה אחד בלבד נותן תוצאה לא יציבה: אותו משפט בהקשר שונה ממלא את הסלוט אחרת, וחלק מהמשפטים עוברים לשאלה חוזרת. בתסריט ארוך זה נראה בשיחות שבהן הלקוח מציין בפעם השלישית את העיר, התאריך או קטגוריית השירות.
סכימת nlp היברידית מחלקת את העבודה בצורה מפורשת. מילונים, כללים רגולריים ונרמול מכסים מבנים צפויים — כתובות, תאריכים, טווחים מספריים, שמות שירותים. מודל השפה מתחבר רק במקום שבו התבנית לא עבדה: ניסוח חופשי, כמה פרמטרים באותו משפט, סדר משפטים לא סטנדרטי.
האפקט המדיד הראשון — דיוק חילוץ הפרמטרים. מקרים טיפוסיים נסגרים על ידי כלל דטרמיניסטי, והמודל לא «משחק» אותם מחדש; על מדגם מתויג של שיחות אמיתיות שיעור הסלוטים שמולאו נכון עולה, ותשובות שנויות במחלוקת מסומנות לבדיקה, ולא עוברות לתסריט בשקט.
השני — שיעור השיחות שהושלמו ללא שאלה חוזרת. יציבות ניתוח השיחה נשענת על נרמול: שגיאות כתיב, תעתיק וסלנג מובאים לצורה קנונית לפני הכתיבה לסלוט, ולכן «מחר», «מחרר» ו«עבור מחר» נותנים תאריך אחד, ולא שלוש שאלות הבהרה ברצף.
השלישי — העומס על מודל השפה. המודל נקרא רק בענפים מורכבים, ולכן השהיית התגובה צפויה, והתנהגות הבוט ניתנת לשליטה: אפשר לתקן כלל באותו יום בלי אימון מחדש ובלי סיכון לשבור סלוטים שכנים.
מצבי חילוץ פרמטרים: כללים, מודל, הכלאה
בחירת מצב חילוץ הסלוטים נעשית לא לפי «עוצמת» המודל, אלא לפי יכולת החיזוי של הקלט. אנחנו בוחנים שלושה דברים: עד כמה רשימת ערכי הסלוט סגורה, באיזו תדירות המשתמש מנסח מחדש את אותה מחשבה, ומה התסריט עושה עם משפט שלא נותח. מהתשובות האלה תלוי היכן נגמרים הכללים והיכן מתחבר המודל.
| אפשרות | מתי מתאימה | מגבלות |
|---|---|---|
| כללים ומילונים | רשימת ערכים סגורה: ערים, תעריפים, קודים, תאריכים; משפטים אחידים | נשברת על ניסוחים מחדש ושגיאות כתיב — כל ניסוח חדש הוא תיקון של תבניות |
| מודל שפה | דיבור חופשי, משפטים ארוכים, הרבה מילים נרדפות, תרחישים נדירים | התוצאה לא דטרמיניסטית, התגובה מגיעה בהשהיה, ייתכנו ערכים מומצאים — דרוש וולידטור |
| הכלאה | משפטים טיפוסיים נסגרים בכללים, המודל עובד על השארית שלא נותחה | תכנון מורכב יותר: דרוש בוררות בין השכבות ותיעוד מי מילא את הסלוט |
נוח לבנות ניתוח שיחה היברידי בשכבות: שכבה דטרמיניסטית מנתחת משפטים תבניתיים וממלאת את הסלוט מהמילון, ומודל השפה נקרא רק על מה שהיא לא הצליחה לטפל בו. תשובתו עוברת בדיקה לפי סוג ולפי ערכים מותרים, ולכן טקסט אקראי לא נכנס לסלוט.
הסלוט-פילינג נשאר ניתן לצפייה: רואים איזה ענף מילא את הפרמטר, ומקרים שלא נותחו עוברים ללוג והופכים לתבניות חדשות.
מעבר בין מצבים אינו דורש לכתוב מחדש את תסריט השיחה — משתנה רק שכבת הניתוח, וממשק מילוי הסלוטים נשאר זהה. לכן סביר להתחיל מהכללים ולהפעיל את המודל נקדתית, כשרואים בלוגים את שיעור המשפטים שהשכבה הדטרמיניסטית לא סוגרת.
כיצד אנחנו מיישמים חילוץ פרמטרים: שלבי העבודה
סלוט-פילינג לא מופעל כמודול מוכן: איכות החילוץ תלויה באילו פרמטרים נדרשים לתהליך וכיצד הלקוחות מנסחים אותם. לכן יישום ניתוח nlp יוצא משיחות אמיתיות, ולא מסכימה שהומצאה בוואקום, ובכל שלב יש נקודת בדיקה.
- ביקורת שיחות. מייצאים את היסטוריית הפניות, מקבצים לפי תסריטים ומקבלים רשימת סלוטים ייעודיים עם שיעור המקרים שבהם הם נאמרים באופן מפורש.
- תיוג שיחות. כותבים הנחיות למתייגים: גבולות הסלוט, סוגי הערכים, מקרים דו-משמעיים. חלק מהקורפוס מתויג על ידי שני אנשים — פערים נפתרים לפני האימון, אחרת המודל ילמד רעש.
- סכימת פרמטרים. קובעים סוגים, חובה, נרמול (טלפון, תאריך, ערכי עזר) והתנהגות בסתירות, כאשר הלקוח מציין ערכים שונים באותה שיחה.
- הגדרת כללים. מזהים, תאריכים וערכים ממילוני עזר נסגרים בכללים דטרמיניסטיים — הם צפויים ומשמשים עוגן למודל.
- הגדרת המודל. מאמנים מחדש את החילוץ על הקורפוס המתויג עבור ניסוחים חופשיים, קובעים סף ביטחון ושאלה חוזרת במקום הצבת ניחוש.
- קבלת העוזר הדיאלוגי. מריצים מדגם מוחזק: שיעור השיחות עם סלוטים מלאים, שגיאות לפי כל פרמטר, בדיקה ידנית של מקרים שנויים במחלוקת.
- העברה לתחזוקה. מוסרים את סכימת הסלוטים, הכללים, הנחיות התיוג, לוח מדדי האיכות ותקנון אימון מחדש על ניסוחים חדשים.
סדר השלבים אינו משתנה: כללים בלי תיוג לא מכסים דיבור חי, ומודל בלי וולידציה מציב ערכים סבירים למראה אך שגויים.
ערכת האספקה: סכימות, כללים, תיוג, תקנונים
הערכה נבנית כך שאפשר יהיה לשנות את הפתרון בלי מעורבות שלנו: מהנדס של הלקוח פותח את הסכימה, רואה מהיכן הגיע הפרמטר, ומתקן אותו במקום שבו זה מוגדר, ולא בקוד הבוט. להלן מה שנשאר אצלכם בסיום פרויקט סלוט-פילינג.
- מפת פרמטרי השיחה — טבלה עם כל הסלוטים: שם, סוג, חובה, מקור (תשובה ישירה, פלט המודל, ערך ברירת מחדל), כללי וולידציה והתנהגות העוזר כשהמשתמש מסרב לענות.
- מילון ישויות — צורות מנורמלות של ערכים, מילים נרדפות ושגיאות כתיב שמזוהות כאותו סלוט; מתרחב בלי לבנות מחדש את הלוגיקה.
- סכימת ניתוב — תרשים מעברים בין מצבי השיחה עם ציון הרגע שבו מתחבר המודל ומהיכן פועלים הכללים הדטרמיניסטיים.
- ערכת תיוג — דוגמאות שיחה ייחוס עם סלוטים מסומנים, מחולקות לחלק אימון ולחלק בדיקה; משמשת גם לאימון מחדש וגם להרצות רגרסיה.
- תקנון תיקונים — סדר השינויים: מי מוסיף סלוט, כיצד נבדק, באיזה מבחן מאושר שהלוגיקה החדשה לא שברה ענפים שכנים.
- תיעוד העוזר הדיאלוגי — תיאור חוזי החלפה עם המערכות שלכם, פורמטי התגובה, טיפול בפניות שמולאו חלקית והעברה לנציג.
- הוראות הפעלה — כיצד לקרוא יומנים, היכן לראות את שיעור הפרמטרים שחולצו בהצלחה ולפי אילו סימנים להבין שאיכות הניתוח ירדה.
כל ארטיפקט מנוהל בגרסאות יחד עם הקוד, ולכן השינויים ניתנים למעקב: רואים מה תוקן ולמה, ואפשר לחזור למצב הלוגיקה הקודם. הערכה הזו מספיקה כדי להוסיף בכוחות עצמכם סלוטים ותסריטים חדשים — או, אם תחליטו להמשיך איתנו, ניקח את העבודה בלי הנדסה לאחור.
דוגמה מהפרקטיקה: כיצד עלה דיוק ניתוח השיחות
הפרויקט החל מצ'אטבוט תמיכה שבו הסלוט-פילינג נשען כולו על כללים: ביטויים רגולריים, מילוני מילים נרדפות, רצף שאלות קשיח. על משפטים תבניתיים זה עבד, אבל די היה שהמשתמש יענה בהרחבה או יציין את הפרמטרים בסדר אחר — והניתוח נשבר. שיעור הסלוטים שמולאו נכון עמד על כ-62%, וכל שיחה חמישית עברה לשאלה חוזרת.
את הכללים לא זרקנו: הם נשארו שכבה דטרמיניסטית לנרמול ולישויות צפויות — מספרי הזמנות, תאריכים, ערים מהמילון. המודל נוסף מעל ולקח על עצמו ניסוחים חופשיים, שגיאות כתיב ופרמטרים שנאמרו במשפטים קודמים.
שתי התוצאות מתמזגות לפי ביטחון: בעת אי-התאמה מנצח המקור האמין יותר, והסלוט השנוי במחלוקת מסומן להבהרה. תיוג מבוסס כללים נבנה על spaCy — חוזה התגובה כלפי חוץ לא השתנה.
דיוק הניתוח נמדד על אותו סט של שיחות אמיתיות — לפני ואחרי יישום הסכימה ההיברידית.
| מדד | לפני | אחרי |
|---|---|---|
| סלוטים שמולאו נכון | 62% | 91% |
| שיחות עם שאלה חוזרת על פרמטר | 21% | 6% |
| ניתוח משפטים עם שגיאות כתיב וסלנג | 48% | 87% |
העלייה נבעה לא מעצם חיבור המודל, אלא מסף הביטחון ומכללי המיזוג: בלעדיהם המודל מילא סלוטים בשקיקה רבה יותר, אך גם טעה לעתים קרובות יותר. לאחר כוונון הספים, שיעור התסריטים שהגיעו לפעולה היעד במעבר ראשון עלה מ-71% ל-94%, וההעברה לנציג הצטמצמה כמעט בחצי.
במה נבדלת סכימה היברידית ממודל שפה טהור?
ההבדל ניכר במקום שבו הסלוט-פילינג מפסיק להיות הדגמה: פרמטר אחד מגיע ממשפט חופשי, שני — מכפתור, ושלישי צץ באמצע שאלת הבהרה. מודל שפה טהור שולף ניסוחים שאינם בתיוג, אך אינו מבטיח תוצאה זהה על קלט זהה ואינו מסביר מדוע הסלוט מולא דווקא כך.
הסכימה ההיברידית מחלקת את העבודה: כללים ואוטומט סופי מחזיקים את הפרמטרים הקריטיים ואת סדר השלבים, המודל מנתח טקסט חופשי, והוולידטור מחליט מה ייכנס למצב השיחה. נוח לצמצם את השוואת הגישות לעיבוד שפה טבעית לשלושה צירים.
עיקר העבודה — בנקודת החיבור: הכללים בעדיפות גבוהה יותר ממועמדי המודל, קונפליקט ערכים נפתר לפי מקור וטווח זמן, וכל החלטה נכתבת ללוג. השיחה הופכת לשחזורית: תקלה חוזרת על אותו קלט, ותיקון כלל סוגר מחלקה שלמה של שגיאות, ולא שיחה אחת.
עבור התמיכה זה מעביר את העומס מפענוח «מדוע המודל ענה כך» לתחזוקת כללים ותסריטי רגרסיה. ב-Rasa ערכות כאלה מתוארות באופן דקלרטיבי — התיקון מבוצע על ידי מהנדס בלי אימון מחדש של המודל.
התלבטויות טכניות: מגבלות ויציבות הגישה
סלוט-פילינג בצ'אטבוט לא סוגר הכול: להכלאה יש גבולות. סלוטים בלי סמנים מילוליים — «תעשה כמו בפעם הקודמת», «משהו יקר יותר» — אינם מחולצים בכללים, כאן נדרש מודל עם היסטוריית שיחה, והכללים רק בודקים שהערך נכנס לקבוצה המותרת.
אם סימן מפוזר על פני שלושה משפטים, או ששני פרמטרים מוסתרים במשפט אחד, הדיוק יורד. זו מגבלה של ניתוח nlp, ולא שגיאת הגדרה: ענפים כאלה אנחנו מסמנים כאזור של ניתוח ידני, ולא מסווים אותם כאוטומציה.
שגיאות כתיב מוסרות בנרמול ובהתאמה מטושטשת: פריסת מקלדת, חזרות על אותיות, מילים מחוברות, מספרים במילים. סף ההתאמה מותאם למילון של הלקוח, והתאמות שנויות במחלוקת מתועדות בלוג — לפיהן רואים היכן צריך להשלים את המילון.
נתוני השיחה נשארים במתחם של הלקוח: לוגים ופרמטרים שחולצו נשמרים בצד שלו, תקופת השמירה והאנונימיזציה נקבעות לפי המדיניות, ולחוץ יוצאים רק מדדי איכות בלי טקסט המשפטים.
מה יקרה בשינוי כללי העסק?
הכללים מונחים בנפרד מהמודל ומתוארים באופן דקלרטיבי. תיקון של מילון או תנאי אורך שעות, ואין צורך באימון מחדש: מריצים את ערכת הרגרסיה של השיחות, בודקים ששיעור הסלוטים שמולאו נכון לא ירד, ומשיקים.
כיצד לחזור אחורה אם האיכות ירדה?
התצורה והמודל מנוהלים בגרסאות יחד, והחזרה היא מעבר לגרסה הקודמת. היסטוריית השיחות נשמרת, ואין פניות שאבדו.
נדון במשימת חילוץ הפרמטרים של השיחה שלכם
הערכה מדויקת של משימת חילוץ הפרמטרים נשענת על נתונים, ולא על תיאור «אנחנו רוצים בוט חכם». כדי לחזור עם תוכנית עבודה והרכב התיוג, ולא עם טווח משוער, נדרש מינימום של הקשר. להלן מה לשלוח ומה להבהיר.
- 30-50 שיחות אמיתיות עם תיוג: איזה ערך היה צריך להיות מחולץ בכל מקרה. בנפרד — דוגמאות שבהן הפרמטר נאמר בעקיפין, דרך שלילה או עם שגיאת כתיב.
- רשימת הפרמטרים: חובה ורשות, כללים בעת קונפליקט באותה הודעה — לשאול שוב או לקחת ערך ברירת מחדל.
- ישויות תחומיות ומילונים: שמות שירותים, מילים נרדפות, קיצורים, שילוב של לטינית וקירילית, סלנג של הקהל שלכם.
- ערוצים ופורמט התגובה: טקסט, כפתורים, תמלול קולי; באיזו צורה המערכת מצפה לתוצאה — json מובנה או שדות ב-CRM.
- מדדי יעד לכל פרמטר: שיעור שגיאות מותר, מה חשוב יותר — דיוק או שלמות, כיצד הבוט מתנהג בביטחון ניתוח נמוך.
- מגבלות: היכן מותר לעבד את הנתונים, כמה זמן לשמור לוגים, מי נותן גישות לתיוג ולסביבת הבדיקות.
- המתחם הנוכחי: מה כבר עובד — כללים, סקריפטים, פרומפטים — ועל איזו פלטפורמה חי העוזר הדיאלוגי.
אם מדובר בפיתוח פתרון NLP מאפס, הוסיפו את העומס הצפוי ואת השפות שאיתן תצטרכו לעבוד. מכאן אנחנו מרכיבים את סכימת ההכלאה: הכללים סוגרים פרמטרים צפויים ווולידציה, מודל השפה — ניסוחים משתנים, וניתוח לא בטוח עובר לשאלת הבהרה.
כך הסלוט-פילינג בצ'אטבוט נשאר ניתן לשליטה: רואים איזה פרמטר חולץ ועל איזה בסיס. תארו את המשימה ודונו איתנו בעוזר הדיאלוגי — נחזור עם הערכת היקף ותוכנית עבודה.







