カテゴリ
画像認識
ステータス
稼働中技術スタック
モデル
従来のOCRは文書の種類ごとにテンプレートを必要とする。この実験では、テンプレートに基づく抽出を、レイアウトと意味をそのまま理解するビジョンLLMへ置き換えた。レシート、請求書、税務書類をアップロードすれば、項目名、値、確信度、バウンディングボックスの座標を含む整ったJSONが返る。テンプレートを一度も定義することなく。
8種類、計500点の実文書でGPT-4o VisionとClaude Visionを検証した。レシート120点、請求書100点、税務書類80点、名刺60点、銀行の取引明細50点、発注書40点、契約書30点、配送ラベル20点である。正解は項目名、値、バウンディングボックスを人手で付与した。比較の基準にはAWS TextractとGoogle Document AIを置いた。抽出の質は項目単位のF1で測り、1文書あたりの処理時間とコストも記録した。
GPT-4o VisionとClaude Visionが文書の理解を担う。FastAPIが抽出APIを提供し、一括アップロードには非同期処理で対応する。Pydanticが出力スキーマを強制し、抽出された項目を検証する。ReactとCanvas APIが元の文書の上にバウンディングボックスを重ねて表示し、確認を助ける。
この実験から得られた、もっとも重要な知見です。
テンプレートなしで項目精度96%
GPT-4o Visionはテンプレートの設定ゼロで、すべての文書種類にわたって項目単位のF1で96%を記録した。レシートではTextractと同等で、変わったレイアウトでは大きく上回った。
ビジョンLLMは傾いた文書にも強い
従来のOCRと違い、ビジョンモデルは30度まで傾いて撮影された文書でも90%以上の精度を保った。同じ入力に対してTextractの精度は67%まで落ちた。
出力スキーマが幻覚を抑える
Pydanticの応答スキーマと項目単位の検証を使うことで、幻覚による架空の項目は8%から1.2%へ減った。出力の構造を固定すると、モデルはデータを作り出しにくくなる。
中規模ならコストも見合う
1文書$0.03で、ページ単価ではTextractの2倍になるが、テンプレート開発の工数はゼロになる。損益が分かれるのは文書種類が50前後で、それを超えるとテンプレートの保守のほうが高くつく。
文書はFastAPIのバックエンドへアップロードされ、向きの検出とコントラストの正規化といった前処理を経て、出力スキーマを指定した抽出プロンプトとともにビジョンモデルへ送られる。応答はPydanticのスキーマで検証する。確信度は抽出を2回実行して項目の一致を比べることで算出し、バウンディングボックスの座標は空間的な位置に絞った2度目のビジョンプロンプトで求めて、最終結果に添える。
8カテゴリ、500点の文書で項目単位のF1は96%。1文書あたりの平均処理時間は1.8秒、平均コストは$0.03。テンプレートの保守は不要。確信度の判定は抽出誤りの89%を、人による確認へ正しく回した。
検証を進めるうえで解決が必要だった技術的な課題です。
バウンディングボックスの精度
ビジョンモデルが返すのはおおまかな位置の説明で、ピクセル座標ではない。予測された領域を切り出して絞った抽出を再実行する二次パイプラインを作り、座標を5px以内の精度まで詰めた。
複数ページの文書の扱い
3ページ以上にわたる請求書は、1枚の画像としての文脈長を超えた。ページ単位で抽出し、項目の重複を除いてページをまたぐ参照(「次ページに続く」明細など)を解決するマージ処理を実装した。