اگر یک لایحه حقوقی ۳۰۰ صفحهای یا یک گزارش سالانه صحافیشده را در اکثر خط لولههای OCR قرار دهید، نرمافزار بیصدا آن را به تکههای کوچک تقسیم میکند. صفحه اول، پردازش، تخلیه حافظه. صفحه دوم، پردازش، تخلیه حافظه. تا زمانی که سیستم به پیوستهای انتهای سند برسد، هر زمینهای که ممکن بود از مقدمه استخراج کرده باشد، مدتهاست که از بین رفته است. پانویسها از متن اصلی جدا و معلق میشوند. جداول که در صفحات مختلف تقسیم شدهاند، ساختار خود را از دست میدهند. سرتیترهایی که در صفحات متوالی ادامه مییابند، اشتباه برچسبگذاری میشوند. نتیجه، یک فایل متنی بههمدوختهشده است که یک انسان باید دوباره آن را بازسازی کند.
Baidu فکر میکند این گردش کار اساساً معیوب است. پاسخ آنها Unlimited OCR است؛ معماریای که برای دریافت اسناد حجیم و چندصفحهای در یک گذر مستقیم (forward pass) واحد، بدون انفجار حافظه GPU که معمولاً پس از آن رخ میدهد، طراحی شده است. ترفند کار، یک مکانیزم توجه جدید است که با حافظه نه مانند یک هارد دیسک، بلکه بیشتر مانند حافظه کاری انسان برخورد میکند: منبع اصلی را مقابل خود نگه دارید، آنچه را که همین الان نوشتید به یاد بیاورید و اجازه دهید گذشتههای دور محو شوند.
چرا اسناد طولانی، OCR استاندارد را از کار میاندازند
برای درک راه حل، بهتر است ببینیم سیستمهای OCR سرتاسری (end-to-end) مرسوم کجا از هم میپاشند.
اکثر خط لولههای OCR مدرن از یک مدل زبانی بزرگ به عنوان رمزگشای (decoder) خود استفاده میکنند. همانطور که مدل یک صفحه را میخواند و متن تولید میکند، بازنماییهای داخلی به نام KV cache را ذخیره میکند؛ در واقع یک دفترچه خاطرات جاری از کلیدها و مقادیر (keys and values) که به مدل کمک میکند آنچه را که قبلاً گفته است دنبال کند. مشکل اینجاست که این دفترچه خاطرات با هر خط جدید از خروجی، به صورت خطی رشد میکند. ده صفحه را پردازش کنید، حافظه پنهان به اندازه ده صفحه عمیق میشود. صد صفحه را پردازش کنید، این حافظه به صدها هزار توکن متورم میشود، VRAM را میبلعد و سرعت تولید متن را تا حد بسیار کندی کاهش میدهد.
مهندسان با نادیده گرفتن سادهی این مشکل، با آن مقابله کردهاند. آنها اسناد را به صفحات تکی تقسیم میکنند، هر صفحه را به طور مستقل از طریق مدل عبور میدهند و KV cache را بین هر مرحله بازنشانی (reset) میکنند. این کار باعث میشود سیستم همچنان کار کند، اما رشتهی پیوستگی مدل را نیز از بین میبرد. پاراگرافی که در صفحه سه شروع شده و در صفحه چهار تمام میشود، دو نیم میشود. قالببندی جداول در صفحات مختلف از هم میپاشد. ارجاع به بخشهای قبلی به لینکهای شکسته تبدیل میشود، زیرا رمزگشا هیچ حافظه پایداری از آنچه قبلاً آمده است ندارد. مدل در واقع سند را نمیخواند؛ بلکه مجموعهای از فلشکارتهای ایزوله را انجام میدهد.
ترفند انسانی: Reference Sliding Window Attention
محققان Baidu با الگوبرداری از شناخت انسانی به این مسئله حمله کردند. به کپی کردن دستی یک بخش از یک کتاب فکر کنید. شما تمام جملاتی را که قبلاً کپی کردهاید در ذهن خود نگه نمیدارید. نگاهی به منبع میاندازید، به چند کلمه آخر که نوشتهاید نگاه میکنید و ادامه میدهید. حافظه کاری شما کوچک است، اما چون متن اصلی مقابل شما باز است، انجام این کار بدون زحمت است.
Reference Sliding Window Attention، یا R-SWA، دقیقاً همین شهود را فرموله میکند.
در لایههای زیرین، KV cache به یک صف با طول ثابت تبدیل میشود. وقتی مدل یک توکن جدید تولید میکند، دید کامل خود را نسبت به «توکنهای مرجع» (reference tokens) — یعنی visual image embeddings اصلی و پرامپت اولیه — حفظ میکند، اما فقط به ۱۲۸ توکن آخر که خودش تولید کرده است نگاه میکند. همین و بس. چه مدل در صفحه اول باشد و چه در صفحه پنجاه، میزان اشغال حافظه مربوط به تاریخچه خروجی خودش ثابت میماند. حافظه پنهان رشد نمیکند؛ بلکه بازیافت میشود.
این یک
