אם תכניסו מסמך משפטי בן 300 עמודים או דוח שנתי כרוך לתוך רוב תהליכי ה-OCR, התוכנה פשוט תפרק אותו לקטעים. עמוד ראשון, עיבוד, ניקוי זיכרון. עמוד שני, עיבוד, ניקוי זיכרון. עד שהמערכת תגיע לנספחים שבסוף, כל הקשר שהיא עשויה הייתה להפיק מההקדמה כבר ייעלם מזמן. הערות שוליים יהפכו ליתומות. טבלאות המתפרסות על פני מספר עמודים יאבדו את המבנה שלהן. כותרות שנמשכות לאורך עמודים יקבלו תיוג שגוי. התוצאה היא קובץ טקסט מחובר שבן אדם נאלץ להרכיב מחדש.
Baidu סבורה שסביבת עבודה זו שבורה מיסודה. התשובה שלהם היא Unlimited OCR, ארכיטקטורה שנועדה לקלוט מסמכים מאסיביים ורב-עמודים במעבר קדימה (forward pass) יחיד, מבלי לגרום לפיצוץ בזיכרון ה-GPU שבדרך כלל מלווה תהליכים כאלה. הטריק הוא מנגנון קשב (attention mechanism) חדש שמתייחס לזיכרון פחות כאל כונן קשיח ויותר כאל זיכרון עבודה אנושי: שמור את חומר המקור מול העיניים, זכור את מה שזה עתה כתבת, ותן לעבר הרחוק להישחק.
מדוע מסמכים ארוכים הורסים OCR סטנדרטי
כדי להבין את הפתרון, כדאי לראות היכן מערכות OCR מסוג end-to-end קונבנציונליות קורסות.
רוב תהליכי ה-OCR המודרניים משתמשים במודל שפה גדול כמתרגם (decoder) שלהם. ככל שהמודל קורא עמוד ומייצר טקסט, הוא שומר ייצוגים פנימיים הנקראים KV cache — למעשה יומן שוטף של מפתחות וערכים (keys and values) שעוזר למודל לעקוב אחר מה שהוא כבר אמר. הבעיה היא שהיומן הזה גדל באופן ליניארי עם כל שורה חדשה של פלט. אם תעבדו עשרה עמודים, ה-cache יהיה בעומק עשרה עמודים. אם תעבדו מאה עמודים, הוא יתנפח למאות אלפי טוקנים, יתמרס את ה-VRAM ויאט את מהירות היצירה עד לרמה זחילה.
מהנדסים התמודדו עם זה פשוט על ידי אי-התמודדות. הם חותכים מסמכים לעמודים בודדים, מריצים כל עמוד דרך המודל באופן עצמאי, ומאפסים את ה-KV cache בין כל שלב. זה שומר על המערכת פעילה, אך זה גם שולל מהמודל כל רצף רציף. פסקה שמתחילה בעמוד שלוש ומסתיימת בעמוד ארבע נחצה לשניים. עיצוב טבלאות חוצה-עמודים מתפרק. הפניות לסעיפים קודמים הופכות לקישורים שבורים מכיוון שלמפענח אין זיכרון מתמשך של מה שהיה לפני כן. המודל לא באמת קורא את המסמך; הוא מבצע סדרה של כרטיסיות (flashcards) מבודדות.
הטריק האנושי: Reference Sliding Window Attention
החוקרים של Baidu ניגשו לבעיה על ידי שאילת רעיון מתחום הקוגניציה האנושית. חשבו על פעולה של העתקה ידנית של קטע מספר. אתם לא שומרים בראש את כל המשפט שהעתקתם קודם לכן. אתם מציצים במקור, מביטים בכמה המילים האחרונות שכתבתם, וממשיכים. זיכרון העבודה שלכם קטן מאוד, אך מכיוון שטקסט המקור נשאר פתוח מולכם, המשימה נעשית ללא מאמץ.
Reference Sliding Window Attention, או R-SWA, מנסחת בדיוק את האינטואיציה הזו.
מתחת למכסה המנוע, ה-KV cache הופך לתור (queue) באורך קבוע. כאשר המודל מייצר טוקן חדש, הוא שומר על נראות מלאה של ה-"reference tokens" — ה-visual image embeddings המקוריים וה-prompt הראשוני — אך הוא מסתכל אחורה רק על 128 הטוקנים האחרונים שהוא עצמו ייצר. זהו זה. בין אם המודל נמצא בעמוד הראשון ובין אם בעמוד החמישים, טביעת הרגל בזיכרון של היסטוריית הפלט שלו נשארת קבועה. ה-cache לא גדל. הוא עושה שימוש חוזר.
זהו
