見出し画像

Baidu Unlimited OCR完全解説:R-SWAで実現する長文書一括解析

はじめに — OCRの長文書問題とは

50ページの契約書をOCRにかけたら、途中でメモリ不足で処理が止まってしまった——。エンドツーエンドOCRモデルを実務で使ったことがある人なら、一度はこんな経験をしたことがあると思う。

従来のTransformerベースOCRモデルには、長文書を処理する際に3つの根本的な課題があった。

  1. KV Cacheの線形増加:出力トークンが増えるごとにKV Cacheが蓄積され、メモリ使用量が際限なく膨れ上がる

  2. 生成速度の低下:メモリ負荷に伴い、トークン生成速度が徐々に低下する

  3. ページ単位のループ処理:多くの実装ではページごとに推論を繰り返すfor-loopアプローチを取らざるを得ず、文脈の一貫性が損なわれる

これらの課題を一挙に解決したのが、Baiduが2026年6月22日にオープンソース公開した Baidu Unlimited OCRだ。その中核技術であるReference Sliding Window Attention(R-SWA)の仕組みから、ベンチマーク結果、実際のセットアップ方法までを詳しくレポートしてみたい。

Baidu Unlimited OCRの全体像

Unlimited OCR は、DeepSeek OCRをベースに継続学習(continue-training)によって開発された、エンドツーエンドの文書解析モデルだ。

項目 仕様
開発元 Baidu Inc.
公開日 2026年6月22日
ベースモデル DeepSeek OCR
総パラメータ数 3B(うち500Mがアクティブ)
アーキテクチャ DeepEncoder + MoEデコーダ
最大コンテキスト長 32K
ライセンス MIT
GitHub Stars 13,900+(公開3週間)

Unlimited OCRとは?
Baiduが開発したエンドツーエンドの文書解析モデル。Reference Sliding Window Attention(R-SWA)を導入し、KV Cacheのサイズを一定に保つことで、40ページ以上の文書を1回のフォワードパスで解析できる。標準的な32Kコンテキスト長の範囲内で、数十ページの文書を一度に処理することが可能。

公開からわずか2日でGitHub上で4,000スターを突破し、現在では13,900以上のスターを獲得。Hugging Face Spacesでのオンラインデモ、vLLM・SGLangによる推論、Baidu Cloud APIなど、エコシステムも急速に拡大している。

中核技術① — Reference Sliding Window Attention(R-SWA)

人間の「ソフトフォーゲッティング」に着想を得たアテンション機構

R-SWAの最大のインスピレーションは、人間が本を書き写すときの記憶の仕組みにある。

本を写す人間は、これまでに書き終えたすべての文字を正確に覚えているわけではない。むしろ、元の原稿(参照情報) と 直近に書き写した数文字 だけを見ながら作業を進めている。古い書き写しの記憶は自然と「忘れ」ていく——これが人間の効率的な長期作業を支えている。

従来のTransformerのFull Attentionは、生成したすべてのトークンに等しくアテンドする。これが長文書処理におけるメモリ爆発の原因だった。R-SWAは、この「人間のソフトフォーゲッティング」を機械学習のアテンション機構として定式化したものだ。

R-SWAの動作原理

R-SWAは、KV Cacheを2つの領域に分割する。

領域 対象 保持ポリシー
参照トークン(Reference) 画像トークン + プロンプトトークン 常に全量を保持(evictしない)
ワーキングメモリ(Working Memory) 出力トークン(生成テキスト) 直近128トークンのみ保持、古いものは破棄

新しいトークンが生成されるたびに、KV Cacheはキューとして動作する。容量は「参照トークン数(m)+ ウィンドウサイズ(n、デフォルト128)」で固定されており、最も古い出力トークンのKVが自動的に追い出される(eviction)。

これにより、出力トークン数Tがどんなに増えても、KV Cacheのサイズは m + n で一定となる。数式で表せば:

Cache Size(T) = m + min(n, T) ≤ m + n

Tがnを超えると、キャッシュ比率(Cache Size / T)はゼロに漸近する。これが「KV Cacheがフラット」と言われる所以だ。

従来手法との比較

|項目|従来のTransformer(Full Attention)|従来のSliding Window Attention(SWA)|Unlimited OCR(R-SWA)|
|:----|:----|:----|:----|
|KV Cacheの成長|出力トークン数に比例して線形増加|ウィンドウサイズで一定|一定(参照トークン数 + ウィンドウサイズ)|
|参照情報の保持|全トークンにアテンド(メモリ爆発)|ウィンドウ外の参照情報が消失|参照トークンは常に全量保持|
|40ページ処理時のメモリ|爆発的に増加(実用的でない)|メモリは一定だが精度劣化|2ページ時と同等のメモリ使用量|
|推論速度|出力が長いほど低下|一定速度|一定速度|
|40ページ時の編集距離|実用的でない|徐々に劣化|0.11以下|

従来のSliding Window Attention(SWA)もKV Cacheを一定に保てるが、参照情報(画像トークン)までもがウィンドウの状態遷移に巻き込まれて劣化する問題があった。R-SWAは参照トークンを状態遷移から完全に除外することで、元の文書の視覚的忠実度を永久に保持する。これがR-SWAの決定的な差別化ポイントだ。

中核技術② — DeepEncoderとMoEデコーダ

Unlimited OCRのアーキテクチャは、大きく分けてDeepEncoderとMoEデコーダの2つのコンポーネントから構成される。

DeepEncoder(約380Mパラメータ)

DeepEncoderは、2つのVision Transformerを組み合わせたハイブリッドな画像エンコーダである。

  • SAM-ViT:ウィンドウアテンションを用いて局所的な視覚特徴を抽出

  • CLIP-ViT:グローバルアテンションを用いて画像全体の文脈を捉える

このデュアルエンコーダにより、16倍のトークン圧縮が実現されている。具体的には、1024×1024ピクセルの入力画像がわずか256トークンに圧縮される。これにより、プリフィル段階でのKV Cacheフットプリントを劇的に削減しながら、光学テキスト特徴の抽出精度を維持している。

DeepEncoderは5つの解像度モードをサポートしており、用途に応じて選択できる。

|モード|base_size|image_size|crop_mode|用途|
|gundam(推奨)|1024|640|True|単一画像(高精度)|
|base|1024|1024|False|マルチページ・PDF|

MoEデコーダ(3B総パラメータ / 500Mアクティブ)

デコーダはMixture-of-Experts(MoE)アーキテクチャを採用しており、総パラメータ3Bのうち、実際の推論時に活性化されるのは500Mのみである。これにより、軽量な推論を維持しながらも、大規模モデルに匹敵する表現力を確保している。

最大の変更点は、すべてのアテンション層をR-SWAに置き換えたことである。これにより、デコーダ全体を通じてKV Cacheが一定に保たれ、長文書処理時のパフォーマンス劣化が完全に解消されている。

ベンチマーク結果 — 精度と速度の両立

Unlimited OCRは、OmniDocBenchベンチマークにおいて、従来のDeepSeek OCRを大きく上回る結果を記録している。

OmniDocBench v1.5 総合スコア

|モデル|総合スコア|DeepSeek OCR比|
|Unlimited OCR|93.23|+6.22pt|
|DeepSeek OCR|87.01|—

OmniDocBench v1.6 総合スコア

|モデル|総合スコア|
|Unlimited OCR|93.92(SOTA)|

カテゴリ別パフォーマンス

|カテゴリ|指標|Unlimited OCR|DeepSeek OCR|
|テキスト認識|編集距離|0.038|0.073|
|数式認識|CDM|92.61|—|
|テーブル認識|TEDS|90.93|—|
|読み順|編集距離|0.045|—|

速度比較

|条件|Unlimited OCR|DeepSeek OCR|改善率|
|ベースモード|5,580 TPS|4,950 TPS|+12.7%|
|6,000トークン出力時|一定速度|顕著に低下|+35%高速|

特に注目すべきは、出力トークン数が増えても処理速度が全く低下しない点である。6,000トークン出力時の比較では、DeepSeek OCRが顕著な速度低下を示すのに対し、Unlimited OCRは一定の速度を維持し、結果的に35%の高速化を達成している。

主なユースケース

1. 全書籍の一括文字起こし

40ページ超の書籍やマニュアルを1回の推論で解析できる。従来のようにページごとに分割して処理する必要がなく、文脈の一貫性が保たれる。

2. 文書解析パイプライン

テキスト認識だけでなく、表構造の認識(TEDS 90.93)、数式の認識(CDM 92.61)、読み順の解析までを同時に実行できる。契約書レビューや学術論文のメタデータ抽出などに最適だ。

3. 高スループットバッチ処理

SGLangサーバーを立ち上げることで、複数の文書を並列処理できる。infer.pyの--concurrencyオプションで同時実行数を指定可能で、大量の文書を効率的に処理できる。

4. 将来の応用可能性

論文の著者らは、R-SWAがOCRに限らない汎用的なパーシングアテンション機構であると指摘している。ASR(音声認識)や翻訳など、参照情報を保持しつつ長い出力を生成するタスクへの応用が期待される。

Unlimited OCRのセットアップと実行方法

必要環境

  • GPU:8GB以上のVRAM(BF16推論時)

  • Python:3.12.3以上

  • CUDA:12.9以上(推奨)

方法1:Hugging Face Transformers(最も簡単)

pip install torch==2.10.0 torchvision==0.25.0 transformers==4.57.1 \
  Pillow==12.1.1 matplotlib==3.10.8 einops==0.8.2 addict==2.4.0 \
  easydict==1.13 pymupdf==1.27.2.2 psutil==7.2.2
import torch
from transformers import AutoModel, AutoTokenizer

model_name = 'baidu/Unlimited-OCR'

tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModel.from_pretrained(
    model_name,
    trust_remote_code=True,
    use_safetensors=True,
    torch_dtype=torch.bfloat16,
)
model = model.eval().cuda()

# 単一画像(gundamモード:高精度)
model.infer(
    tokenizer,
    prompt='<image>document parsing.',
    image_file='your_image.jpg',
    output_path='./output',
    base_size=1024, image_size=640, crop_mode=True,
    max_length=32768,
    no_repeat_ngram_size=35, ngram_window=128,
    save_results=True,
)

方法2:PDFの一括処理

import os
import tempfile
import fitz  # PyMuPDF

def pdf_to_images(pdf_path, dpi=300):
    doc = fitz.open(pdf_path)
    tmp_dir = tempfile.mkdtemp(prefix='pdf_ocr_')
    mat = fitz.Matrix(dpi / 72, dpi / 72)
    paths = []
    for i, page in enumerate(doc):
        out = os.path.join(tmp_dir, f'page_{i+1:04d}.png')
        page.get_pixmap(matrix=mat).save(out)
        paths.append(out)
    doc.close()
    return paths

# マルチページ解析(baseモードのみ対応)
model.infer_multi(
    tokenizer,
    prompt='<image>Multi page parsing.',
    image_files=pdf_to_images('your_doc.pdf', dpi=300),
    output_path='./output',
    image_size=1024,
    max_length=32768,
    no_repeat_ngram_size=35, ngram_window=1024,
    save_results=True,
)

方法3:SGLangサーバー(本番運用向け)

# 環境セットアップ
uv venv --python 3.12
source .venv/bin/activate
uv pip install wheel/sglang-0.0.0.dev11416+g92e8bb79e-py3-none-any.whl
uv pip install kernels==0.11.7 pymupdf==1.27.2.2

# サーバー起動
python -m sglang.launch_server \
    --model baidu/Unlimited-OCR \
    --served-model-name Unlimited-OCR \
    --attention-backend fa3 \
    --page-size 1 \
    --mem-fraction-static 0.8 \
    --context-length 32768 \
    --enable-custom-logit-processor \
    --disable-overlap-schedule \
    --skip-server-warmup \
    --host 0.0.0.0 \
    --port 10000

方法4:vLLM(Docker)

# CUDA 13.0環境
docker pull vllm/vllm-openai:unlimited-ocr

# Hopper GPU(CUDA 12.9)
docker pull vllm/vllm-openai:unlimited-ocr-cu129

詳細なレシピは vLLM Recipes を参照

オンラインデモ

コードを書かずに試したい場合は、Hugging Face Spacesでホストされているオンラインデモが利用可能。

現時点の制限と今後の展望

制限事項

Unlimited OCRは革新的なモデルだが、いくつかの制限も存在する。

  1. 32Kコンテキストによる制約 「Unlimited」という名称だが、実際には標準的な32Kの最大コンテキスト長に制限されている。真の「無制限」を実現するには、さらなるコンテキスト拡張が必要である。

  2. 長いプリフィル時間 ページ数が増えるとプリフィル(画像エンコード)時間が蓄積される。これはR-SWAの対象外であり、改善の余地がある。

  3. マルチページモードの解像度制限 マルチページ処理(infer_multi)はbaseモード(1024×1024)のみ対応しており、gundamモード(640pxクロップ)の高精度処理は単一画像に限定される。

  4. コミュニティの成長途上 GitHub上でのコントリビュータは現時点で1名であり、コミュニティ駆動の開発はまだ初期段階にある。

今後のロードマップ

論文では、以下の今後の開発目標が示されている[2][6]

  • 128Kコンテキストへの拡張:より長い文書を1パスで処理可能に

  • プリフィルプールの構築:オンデマンドチャンク取得によるプリフィル時間の短縮

  • 自動ページめくり機能:モデルが自律的に次のページを認識して読み進める

また、Baiduは2026年7月に大規模モデル分野の技術専門家である孫天祥氏をBMU(Basic Model Research Department)の責任者として迎え入れており、基礎モデル周辺の組織体制を強化している。

まとめ

Baidu Unlimited OCRは、「モデルを大きくする」のではなく「記憶の仕方を変える」ことで、長文書OCRの根本的な問題を解決した。

R-SWA(Reference Sliding Window Attention) は、人間の「ソフトフォーゲッティング」に着想を得た新しいアテンション機構であり、KV Cacheを一定に保つことで、出力が長くなってもメモリ使用量と処理速度が全く劣化しない。このアプローチはOCRに限らず、ASRや翻訳など、長い出力を生成するあらゆるタスクに応用可能な汎用性を持つ。

OmniDocBench v1.5で93.23(DeepSeek OCR比+6.22pt)、v1.6で93.92(SOTA)というベンチマーク結果は、精度面でも従来手法を凌駕していることを示している。

MITライセンスで完全にオープンソース化されており、Hugging Face Transformers、vLLM、SGLangと複数の推論バックエンドをサポート。GPU 8GB以上の環境があれば、今日からすぐに使い始めることができる。

参考リンク
GitHubリポジトリ
arXiv論文
Hugging Faceモデル
Hugging Face Spaces(デモ)
vLLM Recipe
ModelScope
Baidu Wiki(英語)

※記事は2026年7月10日現在での情報です。


いいなと思ったら応援しよう!