หากคุณใส่เอกสารทางกฎหมายหนา 300 หน้า หรือรายงานประจำปีแบบเข้าเล่มลงในกระบวนการ OCR ส่วนใหญ่ ซอฟต์แวร์จะแอบแบ่งมันออกเป็นส่วนย่อยๆ หน้าหนึ่ง ประมวลผล แล้วล้างหน่วยความจำ หน้าสอง ประมวลผล แล้วล้างหน่วยความจำ กว่าระบบจะไปถึงส่วนเอกสารแนบที่อยู่ด้านหลัง บริบทใดๆ ที่มันอาจจะเคยรวบรวมได้จากบทนำก็หายไปนานแล้ว เชิงอรรถกลายเป็นข้อความที่หลุดลอย ตารางที่คาบเกี่ยวกันระหว่างหน้าก็สูญเสียโครงสร้าง หัวข้อที่ต่อเนื่องกันหลายหน้าก็ถูกติดป้ายกำกับผิด ผลลัพธ์ที่ได้คือไฟล์ข้อความที่ถูกนำมาปะติดปะต่อกัน ซึ่งมนุษย์ต้องมานั่งเรียบเรียงใหม่เอง

Baidu มองว่าเวิร์กโฟลว์นี้มีปัญหาในเชิงโครงสร้าง คำตอบของพวกเขาคือ Unlimited OCR ซึ่งเป็นสถาปัตยกรรมที่ออกแบบมาเพื่อรับเอกสารจำนวนมหาศาลที่มีหลายหน้าในการประมวลผลแบบ single forward pass โดยไม่ทำให้เกิดปัญหาหน่วยความจำ GPU พุ่งสูงเกินควบคุมเหมือนที่มักจะเกิดขึ้น เคล็ดลับอยู่ที่กลไก attention แบบใหม่ที่ปฏิบัติต่อหน่วยความจำไม่เหมือนฮาร์ดไดรฟ์ แต่เหมือนกับ working memory ของมนุษย์ นั่นคือการรักษาเนื้อหาต้นฉบับไว้ตรงหน้า จดจำสิ่งที่คุณเพิ่งเขียนลงไป และปล่อยให้ข้อมูลในอดีตที่ห่างไกลค่อยๆ เลือนหายไป

ทำไมเอกสารขนาดยาวจึงเป็นอุปสรรคต่อ OCR มาตรฐาน

เพื่อที่จะเข้าใจวิธีแก้ไข การดูว่าระบบ OCR แบบ end-to-end ทั่วไปล้มเหลวตรงไหนจะช่วยได้มาก

กระบวนการ OCR สมัยใหม่ส่วนใหญ่ใช้ Large Language Model เป็น decoder ในขณะที่โมเดลอ่านหน้ากระดาษและสร้างข้อความ มันจะเก็บการแทนค่าภายในที่เรียกว่า KV cache ซึ่งเปรียบเสมือนบันทึกประจำวันของ keys และ values ที่ช่วยให้โมเดลติดตามสิ่งที่มันได้พูดไปแล้ว ปัญหาก็คือบันทึกนี้จะเติบโตขึ้นแบบเส้นตรงตามทุกบรรทัดของผลลัพธ์ที่ออกมา หากประมวลผลสิบหน้า cache ก็จะลึกสิบหน้า หากประมวลผลหนึ่งร้อยหน้า มันจะขยายตัวจนกลายเป็นหลายแสน tokens ซึ่งจะกัดกิน VRAM และทำให้ความเร็วในการสร้างข้อความช้าลงอย่างมาก

วิศวกรรับมือกับเรื่องนี้ด้วยการ "ไม่รับมือ" กับมันเลย พวกเขาตัดเอกสารออกเป็นหน้าเดี่ยวๆ รันแต่ละหน้าผ่านโมเดลอย่างเป็นอิสระ และรีเซ็ต KV cache ในทุกๆ ขั้นตอน วิธีนี้ช่วยให้ระบบยังทำงานต่อไปได้ แต่ก็ทำให้โมเดลขาดความต่อเนื่อง ย่อหน้าที่เริ่มในหน้าสามและจบในหน้าสี่จะถูกตัดแบ่งครึ่ง รูปแบบตารางที่คาบเกี่ยวระหว่างหน้าจะแตกสลาย การอ้างอิงไปยังส่วนก่อนหน้าจะกลายเป็นลิงก์ที่เสีย เพราะ decoder ไม่มีหน่วยความจำที่คงอยู่ว่ามีอะไรเกิดขึ้นก่อนหน้านี้ โมเดลไม่ได้กำลัง "อ่าน" เอกสารจริงๆ แต่มันกำลังทำชุดของแฟลชการ์ดที่แยกขาดจากกัน

เคล็ดลับแบบมนุษย์: Reference Sliding Window Attention

นักวิจัยของ Baidu แก้ปัญหานี้โดยการหยิบยืมแนวคิดจากการรับรู้ของมนุษย์ ลองนึกถึงการคัดลอกข้อความจากหนังสือด้วยมือ คุณไม่ได้เก็บทุกประโยคที่คัดลอกไปแล้วไว้ในหัวตลอดเวลา คุณแค่เหลือบมองต้นฉบับ มองคำสุดท้ายที่คุณเพิ่งเขียน แล้วก็เขียนต่อ working memory ของคุณนั้นมีขนาดเล็กมาก แต่เพราะข้อความต้นฉบับยังเปิดอยู่ตรงหน้า งานนี้จึงทำได้อย่างง่ายดาย

Reference Sliding Window Attention หรือ R-SWA คือการทำให้สัญชาตญาณนี้กลายเป็นรูปแบบที่เป็นทางการ

ในเชิงเทคนิค KV cache จะกลายเป็นคิวที่มีความยาวคงที่ (fixed-length queue) เมื่อโมเดลสร้าง token ใหม่ มันจะยังคงมองเห็น "reference tokens" ได้อย่างครบถ้วน ซึ่งก็คือ visual image embeddings ดั้งเดิมและ prompt เริ่มต้น แต่โมเดลจะมองย้อนกลับไปเพียงแค่ 128 tokens ล่าสุดที่มันสร้างขึ้นมาเองเท่านั้น แค่นั้นเลย ไม่ว่าโมเดลจะอยู่ที่หน้าหนึ่งหรือหน้าห้าสิบ ขนาดของหน่วยความจำที่ใช้สำหรับประวัติผลลัพธ์ของตัวเองจะถูกล็อกไว้ที่เดิม cache จะไม่เติบโตขึ้น แต่มันจะหมุนเวียนใช้ใหม่

นี่คือ