اگر آپ زیادہ تر OCR پائپ لائنز میں 300 صفحات کی کوئی قانونی دستاویز یا کوئی جڑی ہوئی سالانہ رپورٹ ڈالیں، تو سافٹ ویئر خاموشی سے اسے ٹکڑوں میں تقسیم کر دے گا۔ پہلا صفحہ، پروسیس کریں، میموری خالی کریں۔ دوسرا صفحہ، پروسیس کریں، میموری خالی کریں۔ جب تک سسٹم آخر میں موجود ضمیمہ جات تک پہنچتا ہے، تعارف سے حاصل ہونے والا کوئی بھی سیاق و سباق (context) ختم ہو چکا ہوتا ہے۔ حاشیے (footnotes) الگ تھلگ ہو جاتے ہیں۔ صفحات کے درمیان تقسیم ہونے والے ٹیبلز اپنی ساخت کھو دیتے ہیں۔ صفحات پر جاری رہنے والے ہیڈرز غلط لیبل ہو جاتے ہیں۔ نتیجہ ایک ایسا جوڑا ہوا ٹیکسٹ فائل ہوتا ہے جسے انسان کو دوبارہ ترتیب دینا پڑتا ہے۔

Baidu کا خیال ہے کہ یہ طریقہ کار بنیادی طور پر خراب ہے۔ ان کا جواب Unlimited OCR ہے، جو ایک ایسا آرکیٹیکچر ہے جسے بڑے، متعدد صفحات والے دستاویزات کو ایک ہی فارورڈ پاس میں جذب کرنے کے لیے ڈیزائن کیا گیا ہے، وہ بھی اس GPU میموری کے دھماکے کے بغیر جو عام طور پر اس کے بعد ہوتا ہے۔ اس کا راز ایک نیا attention mechanism ہے جو میموری کو ہارڈ ڈرائیو کے بجائے انسانی ورکنگ میموری (working memory) کی طرح استعمال کرتا ہے: اصل مواد کو اپنے سامنے رکھیں، جو آپ نے ابھی لکھا ہے اسے یاد رکھیں، اور ماضی کے دور کے حصوں کو دھندلا جانے دیں۔

طویل دستاویزات عام OCR کو کیوں ناکام بنا دیتی ہیں

اس حل کو سمجھنے کے لیے، یہ دیکھنا مددگار ہے کہ روایتی end-to-end OCR سسٹمز کہاں ناکام ہو جاتے ہیں۔

زیادہ تر جدید OCR پائپ لائنز اپنے ڈیکوڈر کے طور پر ایک بڑے لینگویج ماڈل کا استعمال کرتی ہیں۔ جیسے جیسے ماڈل ایک صفحہ پڑھتا ہے اور متن تیار کرتا ہے، یہ اندرونی نمائندگیوں کو محفوظ کرتا ہے جسے KV cache کہا جاتا ہے—جو بنیادی طور پر 'keys' اور 'values' کی ایک چلتی ہوئی ڈائری ہے جو ماڈل کو یہ یاد رکھنے میں مدد دیتی ہے کہ وہ پہلے کیا کہہ چکا ہے۔ مسئلہ یہ ہے کہ یہ ڈائری آؤٹ پٹ کی ہر نئی لائن کے ساتھ خطی طور پر (linearly) بڑھتی جاتی ہے۔ دس صفحات پروسیس کریں، تو کیش (cache) دس صفحات گہرا ہو جاتا ہے۔ سو صفحات پروسیس کریں، تو یہ لاکھوں ٹوکنز تک بڑھ جاتا ہے، جو VRAM کو ختم کر دیتا ہے اور جنریشن کی رفتار کو انتہائی سست کر دیتا ہے۔

انجینئرز نے اس مسئلے سے نمٹنے کے لیے اسے نظر انداز کرنا ہی بہتر سمجھا۔ انہوں نے دستاویزات کو انفرادی صفحات میں کاٹ دیا، ہر صفحے کو آزادانہ طور پر ماڈل کے ذریعے چلایا، اور ہر مرحلے کے درمیان KV cache کو ری سیٹ کر دیا۔ یہ کام تو چلا لیتا ہے، لیکن یہ ماڈل سے کسی بھی مسلسل تسلسل کو بھی چھین لیتا ہے۔ ایک پیراگراف جو صفحہ تین پر شروع ہوتا ہے اور صفحہ چار پر ختم ہوتا ہے، وہ دو حصوں میں تقسیم ہو جاتا ہے۔ صفحات کے درمیان ٹیبل فارمیٹنگ بکھر جاتی ہے۔ پہلے کے حصوں کے حوالے ٹوٹے ہوئے لنکس میں بدل جاتے ہیں کیونکہ ڈیکوڈر کو اس بات کی کوئی مستقل یادداشت نہیں ہوتی کہ اس سے پہلے کیا آیا تھا۔ ماڈل حقیقت میں دستاویز نہیں پڑھ رہا ہوتا؛ بلکہ وہ صرف الگ الگ فلیش کارڈز دیکھ رہا ہوتا ہے۔

انسانی طریقہ کار: Reference Sliding Window Attention

Baidu کے محققین نے انسانی ادراک (human cognition) سے مدد لے کر اس مسئلے کا حل نکالا۔ کسی کتاب سے کوئی اقتباس ہاتھ سے نقل کرنے کے بارے میں سوچیں۔ آپ پہلے سے نقل کیے گئے ہر جملے کو اپنے ذہن میں لوڈ نہیں رکھتے۔ آپ اصل متن پر ایک نظر ڈالتے ہیں، اپنے لکھے ہوئے آخری چند الفاظ کو دیکھتے ہیں، اور جاری رکھتے ہیں۔ آپ کی ورکنگ میموری بہت چھوٹی ہوتی ہے، لیکن چونکہ اصل متن آپ کے سامنے کھلا رہتا ہے، اس لیے یہ کام آسان ہو جاتا ہے۔

Reference Sliding Window Attention، یا R-SWA، بالکل اسی بصیرت کو باقاعدہ شکل دیتا ہے۔

اس کے اندر، KV cache ایک مقررہ لمبائی والی قطار (queue) بن جاتا ہے۔ جب ماڈل ایک نیا ٹوکن تیار کرتا ہے، تو یہ "reference tokens"—یعنی اصل بصری امیج ایمبیڈنگز اور ابتدائی پرامپٹ—کی مکمل بصارت برقرار رکھتا ہے، لیکن یہ صرف ان آخری 128 ٹوکنز کو دیکھتا ہے جو اس نے خود تیار کیے ہوتے ہیں۔ بس اتنا ہی۔ چاہے ماڈل پہلے صفحے پر ہو یا پچاسویں صفحے پر، اس کی اپنی آؤٹ پٹ ہسٹری کا میموری فٹ پرنٹ ایک ہی جگہ رہتا ہے۔ کیش بڑھتا نہیں ہے۔ یہ دوبارہ استعمال (recycle) ہوتا ہے۔

یہ ایک