יחידה 3 / 11

נתחים והכנת מסמכים

רווחים:

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

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

למה אנחנו מרסקים?

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

אז נתח הוא יחידת האחזור הקטנה ביותר. זה לא צריך להיות גדול מדי או קטן מדי - בדיוק כמו שצריך.

גודל נתח ואיזון חפיפה

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

נתחים קטנים מאוד (למשל 100 אסימונים): ממוקדים אך מנותקים מהקשר. הוא אומר "ל-14 יום", אבל מה זה 14 יום נשאר במשפט הקודם. נתחים גדולים מאוד (למשל 2000 אסימונים): שומר על הקשר אך חוטים רבים מעורבבים פנימה; הטמעה מתבלבלת ונושאים לא רלוונטיים מתחברים.

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

גודל נתח

יתרון

חיסרון

תוכן מתאים

קטן (100-250 אסימונים)

רגישות גבוהה, ממוקד

ההקשר עלול להישבר

שאלות נפוצות, מאמרים קצרים, הגדרות

בינוני (300-600 אסימונים)

איזון; רוב התרחישים

נהלים, טקסטים של מדיניות

גדול (800-1500 אסימונים)

שלמות ההקשר

הטבעה מטושטשת

נרטיבי, הסברים ארוכים

טיפ: אם אינך יודע מאיפה להתחיל, התחל עם נתח אסימון של 400-500 וחפיפה של 50-80 אסימון; ואז למדוד ולהתאים עם הנתונים שלך. הגודל ה"נכון" אינו אוניברסלי, זה תלוי בהקשר.

אסטרטגיות חתיכות

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

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

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

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

התאמה לפי סוג מסמך

לא כל מסמך זהה. האסטרטגיה משתנה לפי סוג:

  • טקסט PDF/מדיניות: מבוסס סימניות, בגודל בינוני. נקה חזרות של הדף למעלה/תחתון (כותרת עליונה/תחתונה).
  • טבלאות: אל תוציא את הקו מהקשרו; שמור כל שורה עם מידע כותרת ("פריט: X, מחיר: Y, מלאי: Z"). המרת הטבלה הגולמית לטקסט רגיל היא לרוב חיונית.
  • קוד: פיצול לפי גבולות פונקציה/מעמד; אל תגזור פונקציה מהדרך.
  • הקלטת צ'אט/כרטיס: פיצול לפי הודעה או סבב שיחה; לשמור על ידע מי אמר מה.

# נתחים מבוססי סוגריים (קונספטואלי) = bol( text, target_size=450, # חפיפה אסימון=70, # סוגריים אסימונים=["\n\n", "\n", ". ", " "] # פסקה ראשונה, מילה אחרונה)

הוסף מטא נתונים לכל רצועה

צ'אנקינג הוא לא רק "חלוקה"; הוא להעשיר כל יצירה. כל תג שתצמידו למסלול שווה זהב לסינון עתידי וציון מקור.

# Enriched chunk (קונספטואלי){ "text": "חופשה שנתית בתשלום היא 14 ימים עם שירות של 1-5 שנים...", "metadata": { "source": "ik_el_kitabi_v7.pdf", "section": "5.2 חופשה שנתית", "page": 23, "date": "2025": "2025:privacy" "פנימי" }}

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

Chunking חלש / Chunking חזק

חלש (חתך קשה עיוור, ללא מטא נתונים):

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

רב עוצמה (מודע למבנה + כותרת + מטא נתונים):

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

שלושה מיני מארזים

מקרה 1 - אסון ציור. צוות כספים חילק את המחירון בן 200 העמודים בחיתוך קשה עיוור; שורות הטבלה חולקו באופן אקראי. "מה המחיר של מוצר X?" הדגם קרא את השורה הלא נכונה ונתן את המחיר הלא נכון (9 מתוך 12 מקרים שגויים). כשהמרתי את שורות הטבלה לטקסט רגיל בפורמט "מוצר: … | מחיר: … | יחידה: …" השגיאה ירדה ל-0 מתוך 12.

מקרה 2 - נתח גדול במיוחד. בוויקי, כל עמוד עשוי מגוש אחד (יש אומרים 3,000 אסימונים). ההטבעה מטושטשת כי יש "חופשה", "שעות נוספות" ו"שכר" בעמוד אחד; גם סעיף שעות העבודה נכנס לתמונה לגבי שאלת החופשה. כאשר הדפים חולקו לגודל בינוני לפי כותרת, recall@5 עלה מ-64% ל-91%.

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

טעויות נפוצות

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

לסיכום

  • נתח הוא יחידת האחזור הקטנה ביותר; לא גדול מדי ולא קטן מדי - יש לאזן אותו לפי התוכן.
  • גודל הנתח מציין איזון מיקוד-הקשר; חפיפה מנהלת אובדן גבולות.
  • chunking מבוסס סוגריים ומודע למבנה הוא נקודת המוצא של רוב מערכות הדור; chunking סמנטי הוא באיכות טובה אבל יקר.
  • סוגים כמו טבלה, סקריפט וצ'אט דורשים אסטרטגיות משלהם; המרת טבלאות לטקסט רגיל.
  • הוסף מטא נתונים של מקור/תאריך/פרק/פרטיות וכותרת קטע לכל רצועה; זה הבסיס לסינון ולציטוט.

משימת יישום

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

רשימת בדיקה

  • [ ] אני יכול לומר ש-chunk הוא יחידת האחזור הקטנה ביותר וגודל הוא איזון המיקוד-הקשר.
  • [ ] אני יודע למה חפיפה מונעת אובדן גבולות.
  • [ ] אני יכול להבחין בין chunking מבוסס סוגריים, סמנטי ומודע למבנה.
  • [ ] אני יכול להתאים את האסטרטגיה לטבלה, קוד וצ'אט.
  • [ ] אני מחזק את השליפה על ידי הוספת מטא נתונים וכותרת פרק לכל רצועה.