על Chunking במערכות RAG
- shlomoyona

- Apr 14
- 13 min read
מערכות מבוססות RAG מגשרות על הפער שבין הזיכרון הפרמטרי של מודלי שפה לבין בסיסי ידע ארגוניים דינמיים. מערכות אלו מיועדות לפתור את בעיית ההזיות על ידי עיגון התשובות בעובדות חיצוניות שאוחזרו בזמן אמת. הצלחת המערכת תלויה באיכות המידע שמאוחזר שנקבעת על ידי שלב העיבוד המקדים והחלוקה למקטעים. הבנת תהליך זה דורשת ירידה לפרטים האלגוריתמיים והמערכתיים של האופן שבו מידע שאינו מובנה הופך לווקטורים שניתנים לחיפוש מתמטי.
הצורך בחלוקה נובע מאילוצים חישוביים ומערכתיים. ראשית, לכל מודל אמבדינג ולכל מודל שפה קיימת מגבלת חלון הקשר קשיחה שנמדדת בטוקנים. חריגה מגבולות אלו גורמת לקיטוע התוכן ואובדן מידע. שנית, גם כאשר משתמשים במודלים שבעלי חלונות הקשר רחבים קיימת תופעת הליכה לאיבוד באמצע. כאשר צפיפות המידע גבוהה ושמכילה רעש מודל השפה מתקשה להקצות תשומת לב לפרטים שחבויים בלב הטקסט. חלוקה נכונה מאזנת בין הצורך ברזולוציה מתאימה של אחזור לבין שימור ההקשר הרחב שנדרש ליצירת תשובה קוהרנטית.
ההחלטה על אסטרטגיית החלוקה היא החלטה של תכן מערכות שכוללת פשרות. מצד אחד מקטעים קטנים מאפשרים חיפוש וקטורי ממוקד אך חסרים הקשר דבר שעלול להוביל לכישלון ביצירת התשובה. מצד אחר, מקטעים גדולים לוכדים הקשר אך מכניסים רעש שמדלל את המשמעות הסמנטית של הווקטור מעלים את זמן ההשהיה ומייקרים את עלויות העיבוד. בחירת שיטת החלוקה היא לעיתים קרובות החלטה בלתי הפיכה במערכות פרודקשן שכן שינוי אסטרטגיה דורש חישוב מחדש של כלל הווקטורים במערכת בתהליך שעשוי להיות יקר חישובית.
שיטות ואלגוריתמים ל-Chunking
במקום לכתוב Chunking פשוט אכתוב חלוקת נתונים. עבור כל שיטה של חלוקת נתונים אסביר את העקרונות האלגוריתמיים היתרונות והחסרונות שיקולי הארכיטקטורה אופן היישום ושיטות הבדיקה.
חלוקה לגודל קבוע
גישת החלוקה לגודל קבוע היא אלגוריתם דטרמיניסטי לעיבוד מקדים של טקסט. בשיטה זו מחרוזת הקלט מפוצלת לרשימה של מקטעים בעלי אורך קבוע ומוגדר מראש שנמדד במספר תווים או במספר טוקנים. האלגוריתם מתקדם לאורך המחרוזת במעין חלון נע. כדי למזער את הנזק שנגרם מחיתוך שרירותי של מילים או משפטים נהוג להגדיר חפיפה שהיא מספר מסוים של תווים או טוקנים מסוף המקטע הקודם שמועתקים לתחילת המקטע הבא.
השיטה מציגה יעילות חישובית בסיבוכיות של זמן O(N) וזיכרון O(1) כאשר N הוא אורך הטקסט. היא אינה דורשת מודלי עזר ומהירה ליישום וכן מבטיחה שכל המקטעים ינצלו במדויק את המקום שמוקצה להם במאגר הווקטורי. החיסרון הוא היעדר ההתייחסות למבנה הטקסט ולמשמעותו הסמנטית. החלוקה עלולה לחתוך פסקאות משפטים ומילים באמצע ולשבור את השלמות הלוגית של המידע. מקטעים אלו קשים לפענוח על ידי מודל השפה כי הם מכילים חלקי משפטים חסרי הקשר. מחקרים מעידים כי אף על פי שהשימוש בחפיפה נועד לשפר את המצב בפועל הוא אינו מספק שיפור מהותי באיכות האחזור ואף עלול לייקר את עלויות האינדוקס.
מומלץ להשתמש בשיטה זו בשלבי פיתוח ראשוניים על מנת לייצר בייסליין לביצועים. בנוסף היא מתאימה למערכות שבהן עוצמת החישוב מוגבלת או עבור סוגי מידע שחסרי מבנה כגון תמלילים רציפים של שיחות טלפון ללא סימני פיסוק.
יש להגדיר את גודל המקטע בהתאמה לחלון ההקשר המקסימלי של מודל האמבדינג. רצוי להתחיל עם גדלים של 256 עד 512 טוקנים ולבדוק את ההשפעה כאשר שילוב של חפיפה קטנה מהווה פשרה סבירה במקרים פשוטים. היישום מבוצע בעזרת ספריות קוד מוכרות שכוללות מפרידים מבוססי טוקנייזר במקום לחתוך לפי מספר תוים יבש או אסטרטגיה אחרת. האלגוריתם מקבל כקלט את הטקסט את משתנה הגודל הרצוי ואת החפיפה ומחזיר מערך של אובייקטי מסמך.
היבטי ארכיטקטורה לגבי מבנה מסד הנתונים הווקטורי. חלוקה לגדלים קטנים תיצור כמות רבה של וקטורים. עבור אינדקסים מבוססי גרפים כל וקטור מוסיף צומת וקשתות לזיכרון הראשי ולכן מעלה את עלויות התשתית. מהנדסים צריכים לחשב מראש את מספר הווקטורים שצפוי ולהעריך את עלות הזיכרון שנדרשת. יש לבדוק את הדיוק של אחזור מידע עובדתי על ידי בניית מערך שאלות ותשובות זהב כדי לוודא ששאלות ישירות מחזירות את המקטע שמכיל את התשובה למרות הפיצול המכני.
חלוקה מבוססת מבנה ורקורסיה
אלגוריתם החלוקה הרקורסיבית תוכנן כמענה לבעיית החיתוך של גישת הגודל הקבוע. במקום לחתוך באורח אקראי האלגוריתם משתמש בעקרונות היררכיים של שפה טבעית או קוד מחשב. האלגוריתם מקבל מערך של מפרידים שמסודרים לפי רמת חשיבות יורדת. עבור טקסט רגיל ההיררכיה המקובלת היא מעברי פסקה שורות חדשות רווחים ולבסוף תווים בודדים. האלגוריתם מנסה לפצל את הקלט בעזרת המפריד העליון. המפריד העליון הוא התו הראשון ברשימת העדיפויות שהאלגוריתם מנסה להשתמש בו כדי לחתוך את הטקסט. אם אחת הפסקאות קטנה מגבול גודל המקטע שמוגדר היא נשמרת כיחידה שלמה. אם פסקה מסוימת חורגת מהגבול הפונקציה מפעילה קריאה רקורסיבית על אותה פסקה תוך שימוש במפריד הבא בתור וכך הלאה עד שכל המקטעים עומדים במגבלה.
שיטה זו מספקת איזון בין כיבוד מבנה הטקסט לעמידה במגבלות זיכרון. היא משמרת משמעותיות מבניות כיחידות שלמות כך שפסקאות נשארות יחד ומשפטים לא נקטעים באמצע. היא יציבה ומהווה שיפור לעומת שיטות החיתוך המכניות. החיסרון הוא שגודל המקטעים שנוצרים עשוי להשתנות וזה כמובן עלול להשפיע על ייצוג הווקטור. בנוסף למרות שהיא שומרת על מבנה תחבירי היא אינה מודעת לתוכן ולתמה של המידע. אם טקסט ארוך חסר סימני פיסוק כלל האלגוריתם יפעל לבסוף כחלוקה מכנית של תווים.
גישה זו מומלצת כברירת מחדל למרבית פרויקטי השחזור בתעשייה כיום במיוחד עבור עיבוד מסמכים ארוכים מאמרים פוסטים בבלוג ומסמכי קוד. היא עובדת בצורה מתאימה כאשר ידוע שהקלט שמסופק מכיל מבנה טבעי.
להכין רשימת מפרידים שמתאימה לתוכן. למשל עבור קוד מפרידים צריכים לכלול הגדרות של מחלקות ופונקציות. גודל המקטע הטיפוסי נע סביב 400 עד 512 טוקנים תוך שימוש בחפיפה קטנה כדי להבטיח זרימה במעברים. המימוש נעשה באמצעות אובייקטים ייעודיים בספריות הקוד שמקבלים את מערך המפרידים ופרמטרי הגודל ומחזירים רשימת מסמכים שמשמרת לעיתים את מיקום המקטע במסמך המקורי.
הגישה יעילה לעבודה במערכות הזנת נתונים בזמן אמת ואינה מהווה צוואר בקבוק. אלגוריתם הרקורסיה רץ בזמן פולינומי. בארכיטקטורה שמבוססת על שירותים קטנים חלוקה זו ניתנת למיקבול קל משום שפסקאות שונות יכולות להיות מחולקות בנפרד. יש לבדוק האם המפרידים שהוגדרו מתאימים לאופי המסמך. לצורך הערכה כלים מתאימים יריצו את מדד רלוונטיות ההקשר. מודל השפה שבודק ינתח כל מקטע שמוחזר אל מול השאילתה ויוודא שהמקטע שנוצר אכן עומד בפני עצמו ולא מכיל שברי משפטים שמבלבלים את מודל השפה שמייצר.
חלוקה סמנטית
בעוד ששיטות רקורסיביות נשענות על סימני פיסוק ותחביר חלוקה סמנטית מנתחת את המשמעות של התוכן. אלגוריתם זה מחלק את הטקסט בנקודות שבהן יש שינוי נושא או תמה. התהליך כולל פיצול של הטקסט למשפטים בודדים בהתבסס על נקודות וסימני פיסוק אחרים. לאחר מכן מבוצעת הוספת חלון גולש סביב כל משפט שמכיל משפטים לפניו ואחריו כדי לתת לו הקשר. בהמשך כל קבוצת משפטים עוברת דרך מודל וקטורי ליצירת ייצוג מתמטי. מחושב המרחק הסטטיסטי באמצעות מרחק קוסינוס בין כל זוג וקטורים של משפטים סמוכים המיוצג כ Dᵢ = 1 - (Vᵢ · Vᵢ₊₁) / (|Vᵢ| |Vᵢ₊₁|). לבסוף האלגוריתם מחפש קפיצות או ניתוקים רעיוניים על ידי בחינת המרחקים מול סף שמוגדר מראש למשל אחוזון מסוים או סטיית תקן ביחס לממוצע. קפיצה מעבר לסף מצביעה על שינוי נושא ושם מתבצע הפיצול כאשר המשפטים שבין שתי קפיצות מאוגדים לכדי מקטע סמנטי אחד.
שיטה זו מפיקה מקטעים קוהרנטיים ועצמאיים. היא מתאימה לאופן שבו בני אדם כותבים ולוכדת יחידות רעיון. במחקרי ביצועים שיטה זו הציגה שיפור בכושר ההחזרה לעומת חלוקה רגילה עבור טקסטים רציפים ונרטיביים. החיסרון של הגישה הוא העומס החישובי והעלות. כדי לחלץ את גבולות המקטעים יש לקודד כל משפט בודד למרחב הווקטורי במהלך שלב ההזנה למערכת מה שמעלה את כמות הקריאות לממשקים ודורש כוח חישוב. בנוסף ספים יחסיים עשויים לייצר מקטעים ארוכים במסמכים ארוכים שבעלי נושא אחיד שכן אין מספיק קפיצות שמגיעות לסף העליון מה שמחייב לעיתים שימוש בחלוקה רקורסיבית כרשת ביטחון.
מומלץ להשתמש בשיטה זו עבור נתונים או מסמכים נרטיביים שאינם מובנים שבהם כותרות אינן קיימות ושינויי הנושא הם עדינים. היא פחות מתאימה ליומני שרת או למסמכים שמבוססים על כרטיסיות.
כדי להגיע לתוצאות טובות יש לבחור בקפידה את שיטת הסף. אם משתמשים באחוזון נהוג לבדוק ספים שונים בהתאם למידת הדחיסות שנדרשת. יש להשתמש במודל וקטורי מהיר רק עבור השלב של זיהוי הגבולות. היישום מתאפשר דרך ספריות קוד שמיועדות לכך. המהנדס מכין מודל וקטורי מזין אותו לתוך אובייקט החלוקה ומגדיר את אסטרטגיית הפיצול והאובייקט מבצע את העבודה המתמטית ומחזיר רשימת מסמכים שמחולקת.
האתגר כאן הוא העומס בזמן הקליטה. מכיוון שצריך להריץ מודלים נוירוניים לפני האחסון במסד הנתונים צינור הנתונים חייב להיות אסינכרוני ויציב מול מגבלות קצב של ספקיות הענן. חשוב לוודא שמודל האמבדינג שמשמש לקביעת הגבולות אומן על נתונים מאותו תחום תוכן אחרת המרחקים שהוא ייצר לא ישקפו הבדלים רעיוניים אמיתיים. יש לבדוק את צפיפות המידע הרלוונטי במקטעים שנוצרו על ידי בחינת החיתוך לעומת האיחוד בין התשובה הצפויה לבין המקטע שאוחזר כדי לראות האם המקטע מכיל רעש עודף. בנוסף יש לעקוב אחר אורך המקטעים הממוצע שמופק דרך האלגוריתם כדי לוודא שאינם עוקפים את חלון ההקשר.
חלוקה אג'נטית מבוססת מודלי שפה והוצאת טענות
חלוקה אג'נטית או חלוקה סוכנותית היא חלוקה באמצעות סוכן. באנגלית Agentic Chunking. הוצאת טענות באנגלית היא Proposition Extraction. גישה זו מעבירה את האחריות מאלגוריתמים למודלי שפה. סוכן בינה מלאכותית מקבל בלוק טקסט מנתח אותו ומחליט כיצד לחלקו ליחידות משמעות. הגישה המתקדמת בתחום זה היא חלוקת טענות. מודל השפה משכתב ומפרק קטעים מורכבים לרשימה של טענות או הצהרות אטומיות שעומדות בפני עצמן ועובדתיות. לדוגמה אם הקלט מתאר השקת מוצרים והרחבת שווקים המודל יפרק זאת לשתי טענות נפרדות שעוסקות כל אחת בנושא אחד. בגישה זו נפתרת גם בעיית כינויי הגוף מכיוון שהמודל שמבצע את החלוקה מחליף מילים שמצביעות על שייכות בשם הישות המקורית.
גישה זו מספקת שלמות הקשרית גבוהה. המערכת מפיקה אבני בניין של ידע עובדתי ומבטיחה שאילתות ממוקדות ואמינות. החיסרון הוא העלות החישובית. הרצת כמות גדולה של טקסט כהזנה למודל שפה רק לשם תהליך החלוקה הופכת תהליך זה ליקר בסביבות פרודקשן גדולות. בנוסף התהליך דורש זמן והמודל שעובד עשוי לסבול מהזיות ולנסח מחדש טענות תוך הוספת או השמטת עובדות מהטקסט המקורי דבר שגורר פגיעה באמינות מסד הנתונים.
בגללל עלותה גישה זו נשמרת למקרי קצה ולתחומים שבהם הדיוק נדרש. דוגמאות כוללות חילוץ נתונים מחוזים משפטיים מורכבים שבהם אובדן הקשר של תנאי אחד משנה את משמעות החוזה מסמכים רפואיים או יצירת סוכנים פיננסיים שאוספים עובדות ספציפיות על חברות.
התהליך דורש שימוש במודל שפה בעל יכולות הבנה גבוהות. יש לכתוב תבנית הנחיה שמבקשת מהמודל לפרק את הקלט לרשימת משפטים עובדתיים בפורמט מובנה תוך מתן דגש על כך שכל משפט יעמוד בפני עצמו. המימוש מורכב מיצירת צינור נתונים מותאם אישית שכולל קריאות לממשק הפיתוח. הטקסט מפוצל תחילה לחלקים גדולים בעזרת חלוקה רקורסיבית ואלו נשלחים למודל עם ההנחיה לייצר טענות. לאחר מכן נכתב קוד שמאמת את פורמט התשובה מחלץ את הטענות ממיר אותן לווקטורים ומאחסן במסד הנתונים.
המהנדס נדרש לתכנן ארכיטקטורה עמידה. בשל משך הזמן שנדרש לעיבוד העיבוד אינו יכול להתרחש כפונקציה חוסמת. יש לבנות מערכת של תורים ופועלי רקע כדי לעבד מסמכים תוך שמירה על מגבלות שמטילות ספקיות המודלים. נדרש גם מנגנון חזק של טיפול בשגיאות וניסיון חוזר למקרי שגיאת שרת. הבדיקה החשובה ביותר היא בדיקת האמינות ועיגון העובדות. חובה לוודא שהמודל שפירק את הטקסט לא הכניס רעיונות שלא קיימים במקור. לצורך כך משתמשים בכלים שמפרקים טענות ובודקים אותן חזרה אל מול טקסט המקור.
גישת שחזור היררכי מבוססת אבות בנים
גישה זו נועדה להוות פשרה או לפתור קונפליקט בשחזור הווקטורי. מצד אחד חישוב דמיון עובד בצורה טובה על מקטעים קטנים וממוקדים כיוון שהווקטורים שלהם צפופים ומייצגים משמעות אחת. מצד שני הזנת מקטע קצר למודל השפה שמייצר מובילה לאובדן הקשר משום שחסר לו רקע חיוני. אלגוריתם זה מנתק את המקטע שמאוחזר מזה שמועבר למודל. בשלב בניית האינדקס המסמך מחולק למקטעי אב ארוכים יחסית שכל אחד מהם מזוהה באמצעות קוד ייחודי. לאחר מכן מקטע האב מפוצל למקטעי בנים קטנים. רק מקטעי הבנים הופכים לווקטורים ונשמרים תוך שימור המזהה של מקטע האב שלהם. במקביל מסמכי האב נשמרים בשלמותם במאגר אחסון נפרד. בזמן השאילתה המערכת מחפשת את מקטעי הבנים שמתאימים ביותר וכאשר הם מאותרים היא משתמשת במזהה שלהם כדי לשלוף את מקטעי האב מהמאגר ואלו מוזנים למודל השפה.
הגישה משיגה דיוק באחזור הודות לווקטורים הממוקדים והקשר עמוק בתהליך היצירה. הדבר משמעותי כשהשאילתות קצרות וכוללות מונח בודד אך התשובה מצריכה ראייה רחבה של מסמך ארוך. החיסרון הוא סיבוכיות תשתית וצריכת זיכרון שכן המערכת מחייבת ניהול של שני מאגרי נתונים נפרדים במקביל. בנוסף העמסת מקטעי אב ארוכים אל מודל השפה מעלה את כמות הטוקנים בבקשה הסופית וזה מעלה עלויות בשלב היצירה.
השיטה מתאימה בסביבות שבהן המידע הוא רב שכבתי. לדוגמה במדריכי טכניים או בתיעוד קוד שבהם משתמש מחפש שם של שגיאה מסוימת אך כדי שמודל השפה יסביר איך לפתור אותה הוא חייב לקבל את ההקשר המלא של הפונקציה שנמצאת רק במסמך האב.
יש להשתמש בשני מנגנוני פיצול מקבילים אחד לפיצול גדול והשני לפיצול קטן. יש להגדיר יחס גדלים מתאים בין מקטע האב לבן ומומלץ להשתמש במאגרי אחסון מהירים בזיכרון למאגר מסמכי האב. יישום מעשי מתבסס על ספריות שמנהלות קשרי אבות בנים. בקוד מאתחלים מאגר וקטורי עבור הבנים ומאגר אחסון עבור האבות. האובייקט מנהל באופן אוטומטי את קשרי המזהים כך שקריאה לשליפה מביאה את האבות במקום את הבנים.
ניהול סנכרון הוא נושא מכריע. מכיוון שמסמך אחד מיוצג בשני מאגרי נתונים שונים יש צורך בארכיטקטורה שמבטיחה תאימות. אם יש לעדכן מסמך המערכת חייבת לוודא שמוחקים את מקטע האב הישן ואת כל הבנים שמקושרים אליו במקביל כדי למנוע חוסר התאמה ונתונים יתומים. הבדיקה המרכזית מתמקדת במדד רלוונטיות התשובה. כאשר מזינים את מקטע האב למודל קיים סיכון שהמודל יתעלם מהשאלה הספציפית ויתחיל לסכם את כל המידע שקיבל. יש להשתמש בכלים שמוודאים שהתשובה נשארה ממוקדת בצורך המקורי של המשתמש חרף ההקשר הנרחב.
חלוקה מאוחרת
גישת החלוקה המאוחרת מבצעת שינוי בסדר של צינור הנתונים. בגישה הקלאסית טקסט גדול מפוצל לחלקים ואז כל חלק מועבר בנפרד למודל האמבדינג ליצירת וקטור פעולה שהורסת את ההקשר הכולל. חלוקה מאוחרת מתחילה בהעברת המסמך השלם למודל אמבדינג שבעל יכולת עיבוד הקשר ארוך. אלגוריתם ה-attention מנתח את כל הטוקנים בו זמנית כך שכל טוקן סופג משמעויות מהטוקנים האחרים במסמך. התוצאה היא מערך של וקטורים ברמת הטוקן שעשירים בהקשר גלובלי. רק לאחר הפקת הווקטורים מוחלים גבולות החלוקה. פונקציה מתמטית מחשבת ממוצע על פני הווקטורים של הטוקנים שנכללים בטווח המקטע שהוגדר.
שיטה זו משמרת את ההקשר בתוך וקטורים זעירים ומייצרת וקטורי מקטע שמייצגים את התוכן המדויק ואת ההקשר העוטף. היא חסכונית באחסון ומשפרת את כושר ההחזרה במאמרים מורכבים ובהתייחסויות עמומות במסמך. החיסרון הוא הדרישה החישובית לעבד מסמך באורך של אלפי טוקנים בפעם אחת וזה דורש זיכרון רב. תהליך זה גם מקשה על עיבוד מקבילי והופך את צינור ההזנה לאיטי בהשוואה לחיתוך רגיל. בנוסף היא מחייבת שימוש במודלי אמבדינג שתומכים בחלון הקשר עמוק.
הגישה מומלצת למסמכי טקסט מורכבים וארוכים מאותו תחום תוכן שבהם הפיצול מפרק תלות בין חלקים. דוגמאות בולטות הן ספרי תיעוד שבהם שמות פונקציות ושגיאות מופרדים לאורך עמודים רבים טקסטים אקדמיים ומסמכי מדיניות.
יש להשתמש במודלי אמבדינג ספציפיים שתומכים בחלונות הקשר גדולים. נדרש להעביר תחילה אלגוריתם לקבלת מצביעי הפיצול ואחר כך לבצע חישוב של ממוצע. יישום הנדסי משלב קוד שמשתמש בטוקנייזר להפקת רשימה של טוקנים מריץ את המודל לקבלת מטריצה גדולה של וקטורים ואז מפעיל פונקציה שעוברת על הטווחים ומבצעת מיצוע ממדי מתמטי כדי להחזיר את מערך הווקטורים של המקטעים. כלים מסוימים מתחילים לתמוך בכך באופן מובנה שמקל את העבודה.
האתגר הוא אסטרטגיית אירוח המודלים. לאור צריכת המשאבים עדיף להעביר את תהליך יצירת הווקטורים לשרתים ייעודיים עם שירותי האצה. זמן התגובה של קליטת המסמכים הוא ארוך יותר מאחר שיש לעבדם ברצף במקום לחלקם לאשכולות. יש לבחון את הדיוק אל מול הגישה הקלאסית על ידי פיתוח מערך שאלות שמיועד לבחון חיבור עובדות ממקומות רחוקים במסמך ולבדוק האם המקטע הבודד שהוחזר יכול לספק למודל את התשובה ללא צורך בצירוף כל המסמך.
שחזור הקשרי
גישה זו משתמשת ביכולת יצירת הטקסט של מודלי שפה כדי לתקן את ההקשר במקטע בטרם הומר לווקטור. במקום לחלק ולהמיר מיד המערכת לוקחת את המקטע הקצר ומזינה אותו למודל שפה יחד עם המסמך המלא. המודל מונחה להסביר ולהוסיף רקע שמבהיר למה מתייחס המקטע בתוך הטקסט הגדול. ההסבר שמיוצר משורשר למקטע המקורי והמקטע המשולב שמכיל את הטקסט וההקשר שיצר המודל מקודד לווקטור מתמטי ונשמר במסד הנתונים.
שיטה זו גורמת להפחתה בשיעורי אובדן המידע באחזור ויוצרת מקטעים יציבים ואמינים שאינם תלויים במבנה הרקורסיבי. החיסרון הוא שדחיפת מסמכים ארוכים לתוך ממשק הפיתוח פעם אחר פעם עבור כל מקטע עוררה הוצאות כספיות ניכרות לצד זמני יצירה ממושכים. במערכות שאינן משתמשות במטמון העלות גבוהה ופתרון זה צורך משאבי עיבוד כבדים הרבה מזה של חלוקה מאוחרת.
השיטה מתאימה לפרויקטים שבהם אמינות המערכת וכושר השחזור הם ערך עליון שעולה על אילוצי התקציב. דוגמאות כוללות מנועי מחקר מערכות רפואיות להבנת עבודות אקדמיות מפורטות ומנועי חיפוש על קוד פתוח.
כדי להפוך את הגישה לכדאית נדרש שימוש בטכנולוגיית זיכרון מטמון מבוסס הנחיות. יש להטעין את המסמך השלם לתוך זיכרון המטמון בפעימה הראשונה ולאחר מכן לעבור על כל המקטעים שבמסמך באמצעות אותו השרשור שמקודד במטמון. יישום הגישה מבוצע באמצעות הגדרת תבניות הנחיה שמפרידות בין המסמך המלא לבין המקטע עם דרישה להחזרת תקציר הקשרי קצר בלבד. הקוד חייב להיות מתוכנן במבנה שמחליף רק את תוכן המקטע הקצר בתוך הלולאה כדי לא לשבור את הפניות המטמון.
מהנדס התוכנה נדרש לבנות שירות serverless שיקבל את המסמך ויחזיר את רשימת המקטעים שמועשרים לפני שליחתם למסד הנתונים. יש לוודא שהמסמכים נדחסים באצווה שמסודרת לפי מסמך יחיד על מנת שהמטמון לא יתרוקן בין קריאה לקריאה ויוביל לעליות דרמטיות בעלות הגישה. הבדיקה המקיפה תהיה במדד של כמה אחוזים מכלל המידע הרלוונטי נכשל להגיע בתוצאות הראשונות. המדד החשוב האחר הוא מעקב אחר עלויות כיוון ששגיאות קוד בטיפול במטמון יכולות להגדיל את חשבון ספק המודלים.
איגוד עצי
גישה זו בונה עץ של תקצירים על פני מקטעי הטקסט בעזרת שימוש באלגוריתמי למידת מכונה. בתחילה הטקסט מפוצל למקטעים והם מקודדים לוקטורים. כדי לקבץ וקטורים אלו לאשכולות של משמעות האלגוריתם מפעיל פונקציה שמצמצמת ממדים וחושפת קשרים במרחב הסמנטי. לאחר מכן חלה פונקציית הקבצה סטטיסטית שיוצרת אשכולות שבהם מקטע אחד יכול להשתייך למספר אשכולות. משנוצר אשכול של מקטעים מודל שפה מקבל את האשכול השלם ומסכם אותו ליחידת תובנה חדשה. הסיכום הופך לצומת אב ומצטרף שוב לערימת הווקטורים. תהליך זה רץ באופן רקורסיבי מלמטה למעלה עד שמגיעים לשורש המסמך. בעת חיפוש המערכת עוברת על רמות העץ השונות ומאחזרת גם פרטים קטנים וגם סיכומים עיליים במקביל.
שיטה זו חזקה בשאילתות שדורשות סינתזה רוחבית לאורך כל המסמך ודילוג בין נושאים. היא מתמודדת היטב בהבנת היררכיה ובהענקת מידע רב שכבתי למודל במכה אחת. החיסרון הוא צריכה רבה של כוח עיבוד ונפח אחסון. בזמן בניית העץ מסמך קצר יכול להפיק עץ נתונים גדול שיוצר עומסי זיכרון ועלויות בגלל הפעולות הרבות מול מודלי יצירת הסיכומים. האלגוריתמים המתמטיים דורשים תכנון מוקפד ועשויים לקרוס על טקסטים גדולים.
השיטה מתאימה למערכות מחקר ידע ולסביבות רפואיות או משפטיות שבהן נשאלות שאלות על נושאי על ולא רק על נתונים ספציפיים. היא אינה מומלצת למערכות פרודקשן זעירות.
יש להשתמש בארכיטקטורה מודולרית שניתנת להרחבה. ניתן לשלב כל מודל סיכום ומודל שפה אך יש להיות מודע למגבלות הכמות של המסמכים לפני שהפונקציות הרקורסיביות יוצרות עומס. יישום המערכת מבוצע תוך שימוש בספריות ייעודיות וספריות מתמטיות של למידת מכונה ליצירת מנגנוני צמצום הממדים וההקבצה.
התכנון דורש שינוי מהותי במסד הנתונים הווקטורי. המערכת זקוקה לתכונת רידוד עץ בחיפוש כלומר אחסון של רמת המקטע ההקשר ההסתברותי ומזהה של צומת הבן והאב. בעדכון מסמך מחיקת נתון דורשת חישוב מחדש של מרבית ענפי העץ כך שהשיטה מתאימה לארכיוני מידע יציבים וסטטיים כמעט. יש לבצע בדיקת ביצועים באמצעות שאלות דילוג רבות ולבדוק עד כמה היענות הסיכומים שומרת על הקשר אל המקור באמצעות מבחני הערכה מבוססי מערכי נתונים מוכחים.
מבני אחזור טקסט חצי מובנה ותמונות
בסביבה עסקית ארכיטקטורה נכונה מחייבת מודעות למבנה המסמך. ניסויים שבוצעו על ידי צוותי הנדסה גילו שפירוק טבלאות לחתיכות מוריד את הדיוק משום שהתלות המרחבית שבין עמודה לשורה נעלמת במרחב הווקטורי. הפתרון מחייב בידוד של אלמנטים מיוחדים והעברתם בשלמותם או שימוש בכלי המרה מיוחדים שיוצרים המרה לשורות טקסט ולעיתים גם מחוללים לכל טבלה הסבר סיכומי לפני ההמרה.
מבחינת מבנה כולל מחקרים מצאו שחלוקה ברמת הדף שבה כל עמוד הופך למקטע השיגה באופן עקבי את ציוני הדיוק הגבוהים ביותר מבין השיטות עבור מסמכים ארגוניים שמכילים טקסט וטבלאות יחדיו. המערכת מפצלת את המסמך תוך שימור מרחבי בעזרת מודלי ראייה ממחושבת שמזהים תיבות תוחמות עבור הטבלאות והשורות המדויקות. לטיפול בנתונים מורכבים מהנדס נדרש להטמיע כלי חילוץ מתקדמים בתחילת התהליך.
תכן הבדיקות ואוטומציה של הערכת מקטעים
הנדסה איכותית מחייבת מדידה כמותית ואמפירית. כישלון ארכיטקטורת ההזנה מוביל לכישלונות אילמים כאשר מודל השפה שמייצר מחפה על העובדה שמקטע גרוע הוזן אליו ומייצר תשובות שקריות באורח משכנע. כדי לבצע אופטימיזציה לגישת החלוקה על המהנדס להשתמש במספר שיטות הערכה.
תחילה יש להקים מערך שאלות ותשובות זהב שהוא שלב מחייב בכל מחזור פיתוח. יש לבחור מדגם של מסמכים ולהפעיל אלגוריתם שיוצר שאלות שמכוונות לחלקי טקסט ספציפיים תוך ציון המזהה והמיקום במסמך כדי ליצור זוג של שאלה ותשובה רצויה.
בנוסף יש לבצע מדידת שחזור טהור באמצעות מדדים מתמטיים שמודדים מרחק או חפיפה. מדדים אלו מספקים בדיקה שבוחנת עד כמה התשובה שמיוצרת קרובה לתשובה הרצויה על בסיס מרחק עריכה. מדדים נוספים בודקים התאמת מילים ללא קשר למשמעות סמנטית.
כמו כן הסטנדרט שמקובל בתעשייה כיום נשלט על ידי ספריות שמספקות פונקציות הערכה שמבוססות על מודלי שפה כשופטים וטכניקת שרשרת מחשבה. ההערכה מבוססת על שלושה עמודי תווך.
הראשון הוא רלוונטיות ההקשר שמודדת את המרווח שבין השאלה למקטעים שמאוחזרים. אם החלוקה למקטעים הייתה גרועה ונוצרו מקטעים שרירותיים ארוכים שמכילים רעש רב הציון ייפגע שכן המודל ששופט ימצא יחס אות לרעש נמוך בתוך המקטע.
העמוד השני הוא עיגון ואמינות שמודדת את התפר שבין התשובה הסופית למקטע שאוחזר. המודל ששופט מפרק את התשובה לטענות עובדתיות ומאתר האם המקטע מהווה אסמכתא טקסטואלית ברורה.
העמוד השלישי הוא רלוונטיות התשובה שמעריכה את ההלימה בין השאלה המקורית לתשובה על מנת למנוע תשובות מתחמקות או לא מדויקות שנוצרו עקב חוסר במידע מספק במקטע שאוחזר. תהליך הערכה נכון כרוך בהרצת צינור המידע עם סוגי החלוקה השונים במקביל וקבלת ציונים כמותיים לבחירת האסטרטגיה המיטבית באופן מתמשך.
לסיכום
הטבלה הבאה מרכזת את כלל התכונות ההנדסיות של השיטות. (ותודה לחבר ג'מיני שהפך טקסט ארוך ומייגע לטבלה מגניבה).

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

אנחנו ב- Mathematic.ai מומחים בבלשנות חישובית, עיבוד שפה טבעית ובעיבוד שפה פורמלית. צריכים עזרה בשיפורים אלגוריתמיים או הנדסיים או לשוניים במערכות שפה טבעית? דברו איתנו! צריכים עזרה עם מחקר אלגוריתמי יישומי? האצה של אלגוריתמים או של מערכות אלגוריתמיות? צריכים עזרה בארגון נתונים ובהפקת תובנות?
דברו איתי:
שלמה יונה
מייסד ומדען ראשי, מתמטיקאי מחקר ופיתוח בע"מ
053-7326360
פודקאסט על החברה ועליי, שלמה יונה, ואופן העבודה שלנו ואיתנו: A technical deep dive about

.png)
Comments