0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Reductoとは:テンプレOCRが表で壊れる問題をAgentic OCRはどう読み直すか

0
Posted at

請求書や経費精算PDF、申請書をAIに読ませたら、表の数字がぐちゃぐちゃに崩れて返ってきた——文書AIを一度でも触ったことがあるなら、覚えのある場面だろう。犯人は長年使われてきたテンプレート型のOCR(光学的文字認識)で、レイアウトが少し崩れるだけで表が壊れる。

この層を、VLM(視覚言語モデル)で何度も読み直すAgentic OCRで置き換えようとするのが、米国の文書AI基盤Reductoだ。本稿が追うのは製品紹介ではなく、テンプレOCRがなぜ表で壊れ、Agentic OCRが公式の明言する範囲でどう読み直すのか、という仕組みだ。文書をAIに読ませる仕事なら、明日の設計に効くはずだ。

表が真っ先に壊れる——テンプレOCRの出力はこう崩れる

従来のテンプレート型OCRは、「この罫線の内側が表だ」とページのレイアウトを事前の決め打ちで読む。想定どおりなら高速で安いが、手書きの追記や入れ子のセルなど、現実の文書は揃わない。

最初に壊れるのが表だ。「品目・数量・金額」の3列なら、本来「ノートPC / 2 / 198,000」と1行で読めるべきところが、レイアウト検出を外すと値だけが一列に流れ込み、「どの金額がどの品目か」が分からなくなる。わずかな検出ミスが下流へ次々に伝わり(error cascade、誤りの連鎖)、表の多い財務・医療・法務の文書ほど崩れ方が露骨になる。

読んで、見直して、直す——Agentic OCRの「多パス」

テンプレOCRが「一度読んで終わり」なのに対し、Agentic OCRは出した結果をAI自身がレビューし、直して検証するループを回す。

文書AIは3層に分けると見通しがよい。文字を起こすOCR、ページの構造や意味まで読むVLM、「次に何をすべきか」まで踏み込むAgentic OCR——Reductoはこの3層目だ。公式ドキュメントによれば、自社モデルと最先端のVLMの専門モデル群をパイプライン化し、複数のパスで誤りを反復的に自己訂正する(agentic multipass)。大づかみには「レイアウト検出 → VLMのレビュー/修正 → 検証」を何度か繰り返す流れだ。

ただしReductoは商用クローズドで、各パスの中身や内部構成は非公開だ。だから仕組みの説明は、公式が明言する大枠にとどめる。

欲しい構造を「注文票」で渡し、出所まで返してもらう

開発者には何が嬉しいのか。ポイントは2つだ。

1つ目は、出力が最初から構造化JSONである点。抽出(Extract)では、欲しいフィールドの名前・型・説明を JSON Schema で宣言するだけで、それに合う値が返る——例を見せずに済む、スキーマ駆動の抽出だ。テンプレートを作る代わりに注文票(スキーマ)を1枚渡せば、VLMが該当値を探して返す。

2つ目はvisual grounding(視覚的な裏づけ)。抽出した各値に「何ページ目の、どの矩形(バウンディングボックス)から来たか」が紐づいて返る。請求書の合計金額なら 23278.62 という値に「3ページ目・その矩形の座標」が付く。だから「この金額はこのセルから来た」と人が原本と突き合わせて監査できる。VLMはもっともらしい誤り(hallucination)を起こしうるからこそ、怪しい値だけ原本で確かめられるこの裏づけが効く。

下は、請求書から合計金額と明細をスキーマ駆動で抽出し、各値の出所も取り出す概念コードだ(Reducto公式のPython SDK。正確なAPI名・型は文末の公式ドキュメントを参照)。

from pathlib import Path
from reducto import Reducto

# クライアントは環境変数 REDUCTO_API_KEY を自動で読む
client = Reducto()

# (1) 文書をアップロードしてファイル参照を得る
upload = client.upload(file=Path("invoice.pdf"))

# (2) 取り出したい構造を JSON Schema で宣言する = スキーマ駆動のゼロショット抽出
#     フィールド名と description が、VLM が値を探す手がかりになる
schema = dict(
    type="object",
    properties=dict(
        invoice_total=dict(type="number", description="請求書の合計金額(通常は末尾)"),
        line_items=dict(type="array", items=dict(type="string"), description="明細行の品目名"),
    ),
)

# (3) instructions=「何を取り出すか」/ settings=「どう動かすか」で引数を分ける
#     settings.citations を有効にすると各値の出所(ページ・版面座標)が返る = visual grounding
result = client.extract.run(
    input=upload.file_id,
    instructions=dict(schema=schema, system_prompt="これは請求書です。金額は正確に。"),
    settings=dict(citations=dict(enabled=True)),
)

# result.result はフィールド名をキーにした辞書。各値は .value / .citations を持つオブジェクト
field = result.result["invoice_total"]
print(field.value)                   # 例: 23278.62
print(field.citations[0].bbox.page)  # 値が見つかったページ番号

引数は instructions(何を取り出すか)と settings(どう動かすか)に分かれ、戻り値は辞書アクセスと属性アクセスが混ざる——いずれもコード内のコメントの通りだ。テンプレートを書く代わりにスキーマを1枚書くだけで、出力に監査証跡が付く。

規制の厳しい現場が選ぶ理由——医療Anteriorの導入事例

分かりやすいのが医療のAnteriorだ。保険給付の可否を事前に審査する「事前承認(prior authorization)」を自動化するこの会社は、99%超の精度と1分未満のSLA(応答時間の保証)で医療文書を構造化していると公表する。事前承認では給付要件と患者記録を突き合わせるため、表が崩れて要件を1つ読み違えるだけで判断が狂う。多パスで取りこぼしを減らし、visual groundingで「この要件は記録のここにある」と出所をたどれることが、審査の信頼性に直結する。

法務AIのHarvey(1,300以上の組織)、運用資産1兆ドル超のBenchmarkも採用を公開している。第三者の事例では、サーバーレスGPU基盤のModalが推論移行でP90レイテンシ(応答が遅い方から1割の値)を3分の1に削減したと報告する(出所はReducto創業者の発言)。これらは海外企業の事例だが、あなたが扱う申請書のような「表が崩れると困る文書」でも刺さりどころは同じだ。

過信しないための補助線——どこまでが「確かめられた話」か

数値の確からしさには注意がいる。Harveyの1,300組織もAnteriorの99%超も、Reductoと顧客側の公表値で、第三者検証はModalの事例にほぼ限られる。累計処理ページ数も出典で10億〜30億ページ超と揺れる。これらは「実測された業界標準」ではなく「提供側が示す到達点」として読みたい。仕組みの新しさと、その裏づけの確からしさは、分けて受け止めたい。

最後に——「宣言して、裏づけを取る」文書処理へ

Agentic OCRは、文書を多パスで読み直し、結果をスキーマ駆動の構造化JSONで返し、各値にページ上の座標の裏づけ(visual grounding)を付ける。テンプレートを作る代わりに「欲しい構造を宣言し、出所の裏づけを取る」——これが、表を真っ先に壊していた従来手法との分かれ目だ。崩れた表に泣かされた経験があるなら、手元のどの文書から、まず任せてみたいだろうか。

参考文献

  1. Reducto 公式ドキュメント(Parse/Extract・citations の仕様) - https://docs.reducto.ai/
  2. Reducto API Quickstart(Parse のSDK 例・レスポンス構造) - https://docs.reducto.ai/quickstart
  3. Reducto Extract(スキーマ駆動抽出・citations の有効化) - https://docs.reducto.ai/extract
  4. Reducto 顧客事例(Harvey/Anterior/Benchmark 等の実名と引用) - https://reducto.ai/customers
  5. Reducto Series B 発表(公式ブログ・調達と規模) - https://reducto.ai/blog/reducto-series-b-funding
  6. Reducto Raises $75M Series B(PR Newswire) - https://www.prnewswire.com/news-releases/reducto-raises-75m-series-b-to-define-the-future-of-ai-document-intelligence-302581462.html
  7. Modal: Reducto case study(レイテンシ3x・コールドブート短縮・スケール) - https://modal.com/blog/reducto-case-study
  8. LandingAI: OCR to Agentic Document Extraction(ADE の三本柱・進化) - https://landing.ai/blog/ocr-to-agentic-document-extraction-a-look-into-the-evolution-of-document-intelligence
  9. Firecrawl: Best PDF parsers(no-OCR/VLM 潮流・テンプレOCR の限界) - https://www.firecrawl.dev/blog/best-pdf-parsers
  10. LlamaIndex: Best Vision Language Models(OCR/VLM/Agentic OCR の3層整理) - https://www.llamaindex.ai/insights/best-vision-language-models
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?