300 பக்கங்கள் கொண்ட ஒரு சட்ட ஆவணம் அல்லது ஒரு ஆண்டு அறிக்கையை பெரும்பாலான OCR செயல்முறைகளில் (pipelines) உள்ளீடு செய்தால், அந்த மென்பொருள் அதைத் தானாகவே துண்டுகளாகப் பிரித்துவிடும். பக்கம் ஒன்று, செயலாக்கம், நினைவகத்தை அழித்தல். பக்கம் இரண்டு, செயலாக்கம், நினைவகத்தை அழித்தல். அமைப்பு அதன் இறுதியில் உள்ள சான்றுகளை (exhibits) அடையும் போது, முன்னுரையிலிருந்து அது பெற்றிருக்கக்கூடிய எந்தவொரு சூழலும் (context) மறைந்து போயிருக்கும். அடிக்குறிப்புகள் தனித்து விடப்படுகின்றன. பக்கங்களுக்கு இடையே பிரிக்கப்படும் அட்டவணைகள் அவற்றின் கட்டமைப்பை இழக்கின்றன. பக்கங்களுக்குத் தொடர்ச்சியாக வரும் தலைப்புகள் தவறாகக் குறிக்கப்படுகின்றன. இதன் விளைவாக, ஒரு மனிதன் மீண்டும் ஒன்றிணைக்க வேண்டிய ஒரு துண்டு துண்டான உரை கோப்பு (text file) கிடைக்கிறது.

இந்தச் செயல்முறை அடிப்படையிலேயே தவறானது என்று Baidu கருதுகிறது. அவர்களின் பதில் Unlimited OCR ஆகும்; இது வழக்கமாகத் தொடரும் GPU நினைவக வெடிப்பு (memory explosion) இல்லாமல், மிகப்பெரிய, பல பக்க ஆவணங்களை ஒரே ஒரு forward pass மூலம் உள்வாங்க வடிவமைக்கப்பட்ட ஒரு கட்டமைப்பாகும் (architecture). இதன் ரகசியம் ஒரு புதிய attention mechanism ஆகும்; இது நினைவகத்தை ஒரு வன்வட்டு (hard drive) போலக் கருதாமல், மனிதனின் செயல்பாட்டு நினைவகத்தைப் (working memory) போலக் கையாள்கிறது: மூலப் பொருளை உங்கள் முன்னால் வைத்திருங்கள், நீங்கள் இப்போது எழுதியதை நினைவில் கொள்ளுங்கள், மேலும் கடந்த காலத்தை மறக்க விடுங்கள்.

ஏன் நீண்ட ஆவணங்கள் சாதாரண OCR-ஐச் சிதைக்கின்றன

இந்தத் தீர்வைப் புரிந்துகொள்ள, வழக்கமான end-to-end OCR அமைப்புகள் எங்கே தோல்வியடைகின்றன என்பதைப் பார்ப்பது உதவியாக இருக்கும்.

பெரும்பாலான நவீன OCR செயல்முறைகள் ஒரு பெரிய மொழி மாதிரியை (large language model) அவற்றின் decoder ஆகப் பயன்படுத்துகின்றன. மாதிரி ஒரு பக்கத்தைப் படித்து உரையை உருவாக்கும்போது, அது KV cache எனப்படும் உள் பிரதிநிதித்துவங்களைச் சேமிக்கிறது—இது மாதிரி ஏற்கனவே கூறியதை நினைவில் கொள்ள உதவும் keys மற்றும் values-களின் ஒரு தொடர்ச்சியான நாட்குறிப்பாகும். பிரச்சனை என்னவென்றால், ஒவ்வொரு புதிய வெளியீட்டு வரியுடன் இந்த நாட்குறிப்பும் நேரியல் முறையில் (linearly) வளர்கிறது. பத்து பக்கங்களைச் செயலாக்கினால், cache பத்து பக்க ஆழம் இருக்கும். நூறு பக்கங்களைச் செயலாக்கினால், அது பல லட்சம் டோக்கன்களாக (tokens) விரிவடைந்து, VRAM-ஐத் தீர்த்துக்கொண்டு, உருவாக்க வேகத்தைக் குறைத்துவிடும்.

பொறியாளர்கள் இதைக் கையாள, இதைச் செய்யாமல் தவிர்த்துவிட்டனர். அவர்கள் ஆவணங்களை ஒற்றைப் பக்கங்களாகப் பிரிக்கிறார்கள், ஒவ்வொரு பக்கத்தையும் தனித்தனியாக மாதிரியின் மூலம் இயக்குகிறார்கள், மேலும் ஒவ்வொரு படிநிலைக்கு இடையிலும் KV cache-ஐ ரீசெட் செய்கிறார்கள். இது வேலையைத் தொடரச் செய்கிறது, ஆனால் மாதிரியின் தொடர்ச்சியானத் தொடர்பையும் இது பறித்துவிடுகிறது. பக்கம் மூன்றில் தொடங்கி பக்கம் நான்கில் முடிவடையும் ஒரு பத்தி இரண்டாகப் பிரிக்கப்படுகிறது. பக்கங்களுக்கு இடையிலான அட்டவணை வடிவமைப்பு சிதைகிறது. முந்தைய பிரிவுகளைக் குறிப்பிடும் குறிப்புகள் முறிந்துபோன இணைப்புகளாக மாறுகின்றன, ஏனெனில் decoder-க்கு முன்னால் என்ன வந்தது என்பது குறித்த நிலையான நினைவகம் இல்லை. மாதிரி உண்மையில் ஆவணத்தைப் படிக்கவில்லை; அது தனித்தனி ஃபிளாஷ் கார்டுகளை (flashcards) ஒரு தொடர்ச்சியாகச் செய்கிறது.

மனித உத்தி: Reference Sliding Window Attention

Baidu ஆராய்ச்சியாளர்கள் மனித அறிவாற்றலில் (human cognition) இருந்து ஒரு முறையைக் கையாண்டு இதைத் தாக்கினர். ஒரு புத்தகத்திலிருந்து ஒரு பகுதியை நீங்கள் கைப்பட நகலெடுப்பதைப் பற்றி யோசியுங்கள். நீங்கள் ஏற்கனவே நகலெடுத்த ஒவ்வொரு வாக்கியத்தையும் உங்கள் மனதில் ஏற்றிக்கொண்டே இருப்பதில்லை. நீங்கள் மூலத்தைப் பார்க்கிறீர்கள், நீங்கள் எழுதிய கடைசி சில வார்த்தைகளைப் பார்க்கிறீர்கள், பிறகு தொடர்கிறீர்கள். உங்கள் செயல்பாட்டு நினைவகம் (working memory) சிறியதுதான், ஆனால் மூல உரை உங்கள் முன்னால் திறந்தே இருப்பதால், அந்தப் பணி எளிதாகிறது.

Reference Sliding Window Attention, அல்லது R-SWA, இந்த உள்ளுணர்வையே முறைப்படுத்துகிறது.

இதன் செயல்பாட்டில், KV cache ஒரு நிலையான நீளம் கொண்ட வரிசையாக (fixed-length queue) மாறுகிறது. மாதிரி ஒரு புதிய டோக்கனை உருவாக்கும்போது, அது "reference tokens"-களை (அதாவது அசல் காட்சிப் பிம்ப எம்பெடிங்ஸ் மற்றும் ஆரம்ப தூண்டுதல்/prompt) முழுமையாகக் காணும் திறன் கொண்டதாக இருக்கும், ஆனால் அது தனிப்பட்ட முறையில் உருவாக்கிய கடைசி 128 டோக்கன்களை மட்டுமே பின்னோக்கிப் பார்க்கும். அவ்வளவுதான். மாதிரி முதல் பக்கத்திலோ அல்லது ஐம்பதாவது பக்கத்திலோ இருந்தாலும், அதன் சொந்த வெளியீட்டு வரலாற்றின் நினைவக அளவு (memory footprint) ஒரே இடத்தில் நிலைத்திருக்கும். Cache வளராது. அது மறுசுழற்சி செய்யப்படுகிறது.

இது ஒரு