300페이지 분량의 법률 서면이나 제본된 연례 보고서를 대부분의 OCR 파이프라인에 넣으면, 소프트웨어는 조용히 이를 조각조각 나눕니다. 1페이지 처리, 메모리 비우기. 2페이지 처리, 메모리 비우기. 시스템이 마지막의 증거물 섹션에 도달할 때쯤이면, 서론에서 얻었을지도 모를 모든 문맥은 이미 사라진 뒤입니다. 각주는 맥락을 잃고, 페이지를 가로지르는 표는 구조가 깨집니다. 여러 페이지에 걸쳐 이어지는 헤더는 잘못 분류됩니다. 그 결과, 사람이 일일이 다시 조립해야 하는 짜깁기된 텍스트 파일이 만들어집니다.
Baidu는 이러한 워크플로우가 근본적으로 잘못되었다고 생각합니다. 그들의 해답은 Unlimited OCR입니다. 이는 일반적으로 발생하는 GPU 메모리 폭발 없이, 거대한 다중 페이지 문서를 단 한 번의 순전파(forward pass)로 처리하도록 설계된 아키텍처입니다. 핵심은 메모리를 하드 드라이브처럼 다루는 것이 아니라 인간의 작업 기억(working memory)처럼 다루는 새로운 어텐션 메커니즘입니다. 즉, 소스 자료는 눈앞에 계속 두고, 방금 쓴 내용은 기억하며, 먼 과거의 내용은 서서히 잊게 만드는 방식입니다.
왜 긴 문서는 표준 OCR을 망가뜨리는가
해결책을 이해하려면 기존의 엔드투엔드(end-to-end) OCR 시스템이 어디에서 무너지는지 살펴보는 것이 도움이 됩니다.
대부분의 현대적인 OCR 파이프라인은 디코더로 대규모 언어 모델(LLM)을 사용합니다. 모델이 페이지를 읽고 텍스트를 생성할 때, 'KV 캐시'라고 불리는 내부 표현을 저장합니다. 이는 모델이 이미 말한 내용을 추적하는 데 도움을 주는 키(key)와 값(value)의 일종의 진행형 일기입니다. 문제는 이 일기가 새로운 출력 줄이 생길 때마다 선형적으로 늘어난다는 점입니다. 10페이지를 처리하면 캐시는 10페이지 깊이가 됩니다. 100페이지를 처리하면 수십만 개의 토큰으로 부풀어 올라 VRAM을 잡아먹고 생성 속도를 현저히 떨어뜨립니다.
엔지니어들은 이 문제를 단순히 '처리하지 않음'으로써 대응해 왔습니다. 문서를 단일 페이지로 자르고, 각 페이지를 모델에 독립적으로 실행한 뒤, 매 단계마다 KV 캐시를 초기화하는 방식입니다. 이렇게 하면 시스템은 돌아가지만, 모델로부터 연속적인 흐름을 완전히 빼앗게 됩니다. 3페이지에서 시작해 4페이지에서 끝나는 단락은 중간에 잘려 나갑니다. 페이지를 넘나드는 표 형식은 무너집니다. 디코더가 이전에 무엇이 나왔는지에 대한 지속적인 기억이 없기 때문에 이전 섹션에 대한 참조는 깨진 링크가 됩니다. 모델은 실제로 문서를 읽고 있는 것이 아니라, 일련의 고립된 플래시카드를 넘기고 있는 것에 불과합니다.
인간의 비결: Reference Sliding Window Attention
Baidu의 연구원들은 인간의 인지 능력에서 힌트를 얻어 이 문제에 접근했습니다. 책의 한 구절을 수기로 옮겨 적는 상황을 생각해 보십시오. 이전에 복사한 모든 문장을 머릿속에 담아두지는 않습니다. 원문을 힐끗 보고, 방금 쓴 마지막 몇 단어를 확인한 뒤 계속 써 내려갑니다. 작업 기억은 작지만, 원문이 눈앞에 계속 펼쳐져 있기 때문에 작업은 수월하게 진행됩니다.
Reference Sliding Window Attention, 즉 R-SWA는 바로 이 직관을 공식화한 것입니다.
내부적으로 KV 캐시는 고정된 길이의 큐(queue)가 됩니다. 모델이 새로운 토큰을 생성할 때, "참조 토큰(reference tokens)"—즉, 원래의 시각적 이미지 임베딩과 초기 프롬프트—에 대해서는 완전한 가시성을 유지하지만, 자신이 직접 생성한 마지막 128개의 토큰만 되돌아봅니다. 그게 전부입니다. 모델이 1페이지에 있든 50페이지에 있든, 자체 출력 이력의 메모리 점유율은 일정하게 유지됩니다. 캐시는 늘어나지 않습니다. 재사용될 뿐입니다.
이것은
