לשפה טבעית אין מושג של “משפט לא תקין.”


אף אחד לא בודק מה נכנס להקשר

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

RAG מחזיר קטעים. סוכן מקבל תגובות API. שיחות קודמות מצטברות בהיסטוריה. משתמש מעלה מסמך.

כל אלה נכנסים לחלון ההקשר. בלי בדיקה.

למה אין בדיקה? כי לשפה טבעית אין מושג של “לא תקין.”


שפה טבעית מקבלת כל מחרוזת

בתכנות, יש דבר כזה שגיאת תחביר.

def calculate(x, y
    return x + y

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

לשפה טבעית אין דבר כזה.

“He went to the bank.” דקדוקית מושלם. אי אפשר לדעת מי הלך, לאיזה בנק, או למה, אבל שום דבר לא מפר את כללי הדקדוק של שפה טבעית.

“דוח מכירות ליום ה-45 בחודש ה-13, 2024.” אין חודש 13 ואין יום 45. ובכל זאת שום דבר לא מפר את כללי הדקדוק של שפה טבעית. זהו משפט תקין דקדוקית.

“מקור: לא ידוע. ודאות: לא ידועה. תאריך: לא ידוע. שווי השוק של Samsung Electronics הוא 1,200 טריליון וון.” המקור לא ידוע, הוודאות לא ידועה, תאריך הייחוס לא ידוע. ובכל זאת שום דבר לא מפר את כללי הדקדוק של שפה טבעית.

שפה טבעית מקבלת הכל. משפט שפה טבעית לא תקין לא קיים מבנית. לכן אין קריטריון מכני ל-“דחיית” מידע שמבוטא בשפה טבעית.


מה נדרש לאימות מכני

תסתכל על מהדר Go.

Go מסרב לקמפל אם יש import שלא בשימוש. גם אם הקוד עובד מושלם. גם אם אין שום בעיה בלוגיקה. הוא מסרב רק בגלל ששורת import אחת לא בשימוש.

זה אימות מכני.

לאימות מכני יש שלוש תכונות.

הוא דטרמיניסטי. התוצאה היא כן או לא. לא הסתברות. אין “כנראה בסדר.” תקין או לא תקין.

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

הוא לא קורא משמעות. הוא לא שופט אם התוכן נכון או שגוי. הוא רק בודק אם הפורמט תואם את המפרט. הוא לא יודע אם “שווי השוק של Samsung Electronics הוא 1,200 טריליון וון” נכון. אבל הוא יודע אם שדה המקור ריק.

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

אם יש מפרט, הפרות מוגדרות. אם הפרות מוגדרות, דחייה אפשרית. אם דחייה אפשרית, אימות קיים.

לשפה טבעית אין מפרט, ולכן אין הפרות. אין הפרות פירושו אין דחייה. אין דחייה פירושו אין אימות.


למה נדרש אימות לפני ההקשר

חלון ההקשר הוא סופי.

בין אם זה 128K טוקנים או 1M טוקנים, הוא סופי. איכות המידע שנכנס למרחב סופי קובעת את איכות הפלט.

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

זה שגוי בשלושה אופנים.

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

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

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

אימות מכני בא לפני כל זה. לפני הכניסה להקשר. לפני שה-LLM קורא. לפני שהחלון נצרך.


מה נבדק

אימות מכני בודק לא את אמיתות התוכן אלא התאמה למפרט פורמט.

באופן ספציפי, את הדברים הבאים:

שלמות מבנית. האם שדות נדרשים קיימים? האם לקשת יש נושא ומושא? האם חסר משהו?

תקינות מזהים. האם הצומת המצוין קיים? האם מה שכתוב כ-“Samsung Electronics” באמת מצביע על ישות מוגדרת? האם ההפניה משתלשלת לריק?

התאמת טיפוסים. האם יש תאריך בשדה התאריך? האם יש מספר בשדה המספר? “יום ה-45 בחודש ה-13, 2024” נתפס כאן.

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

שלמות הפניות. האם הצומת שהקשת מצביעה עליו באמת קיים? האם יש הפניה לצומת שנמחק?

לבדיקות האלה יש דבר משותף אחד. את כולן אפשר לבצע בלי לקרוא את התוכן. לא יודעים אם “שווי השוק של Samsung Electronics הוא 1,200 טריליון וון” נכון. אבל יודעים אם מקור מצוין עבור ההצהרה הזו. יודעים אם זמן רשום עבור ההצהרה הזו. יודעים אם הפורמט של ההצהרה הזו תואם את המפרט.


הזול קודם

בצינור הנדסת הקשר, לבדיקות יש סדר.

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

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

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

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

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


הסדר הזה בלתי אפשרי בצינור שפה טבעית

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

כתוצאה מכך, כל בדיקה היא בדיקה סמנטית. כל בדיקה דורשת LLM. כל בדיקה יקרה.

“האם בקטע הזה יש מקור?” – ה-LLM חייב לקרוא. “האם ייחוס הזמן של הקטע הזה מתאים?” – ה-LLM חייב לקרוא. “האם הפורמט של הקטע הזה נכון?” – לשפה טבעית אין פורמט, ולכן השאלה עצמה לא מתקיימת.

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


תנאים מוקדמים לאימות

כדי שאימות מכני יתקיים, נדרשים שלושה דברים.

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

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

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

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

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

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


סיכום

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

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

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

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

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