
はじめに
請求書の明細表をOCRによって自動で読み取ることができると、経理業務自動化の実現に役立ちます。 ところが実際には、多様なフォーマットの存在や OCR の誤読が積み重なり、AIモデルとルールベース後処理だけでは思った以上に精度が出ない、という壁にぶつかることがあります。 AI モデルそのものの改修となると、学習データの追加やモデル更新など、時間もコストも必要になります。また、ルールベース後処理を増やし続けるのは、将来の保守を重くする心配がつきまといます。 そこで、「大規模言語モデル(LLM)を後処理に加えたら、より柔軟に・より構造的に・まるで人間が行うように誤りを補正できるのではないか」という発想のもと、既存処理に GPT による補正ステップを追加し、精度改善ができるか検証しました。
LLM による後処理の追加
今回の検証では、ルールベース処理の“あと”に GPT による補正ステップを入れています。 使うのは画像入力に対応した gpt-4.1。表画像と OCR 結果(CSV)を突き合わせ、表構造と内容の整合性を取る役目を担います。
追加した処理の流れ
具体的にGPT が担うのは次のような作業です。
- 明細表の画像と既存処理の OCR 結果(CSV)を受け取る
- 画像と CSV を突き合わせ、
- 行・列のズレ修正
- 分割/結合ミスの調整
- 欠損・誤認文字の補正
- 修正済み CSV を返却
座標情報の扱いは精度を安定させるのが難しく、今回は見送りましたが、将来的には実装したい部分です。
GPT に与えたプロンプト
今回の補正処理は、次のような指示文(抜粋)を与えて実施しました。 表構造の統一、セル内容の整理、誤認識文字の補正など、発生しやすいゆがみを吸収するよう工夫しています。
refine_table_prompt = """表のOCR結果が次のようにCSV形式のテキストで与えられています。 {} 同時にOCR対象となった表の画像も与えられています。 表の画像を参照しながら、CSV形式のテキストを修正して下さい。 その際、以下の条件に従って修正を行って下さい。 条件: 1. 画像内の表の構造に基づいてCSV形式の行や列の構造を修正して下さい。 2. すべての行で同じ列数になるように修正して下さい。 3. 「||」は改行箇所を示しています。セル内の改行は「||」で表現してください。 4. 誤って複数行が1つのセルに入っている場合は、適切に分割してください。 5. ~ """
検証結果
検証データ 165 件 を使い、
- 既存処理のみ
- GPT 補正を追加した処理
の比較を行いました。 結果として、 38 件で明確な精度向上が確認されました。
特に目視では、
- 列境界の誤りが正しく補正される
- 1 件の明細データが複数行に分離される誤りの統合
- 誤った行分割の修復
など、「人が見たらこう直したい」という形にかなり近づく改善が見られました。
一方でデメリットもあり、
- コスト:検証データでは 1 リクエストあたり0.4~0.6 円(明細表の内容による)
- 処理時間:1〜5 秒 程度の追加(これも明細表の内容に依存)
後処理ルールをメンテナンスし続けるよりは負担が軽い?ものの、低コストの明細表読み取り実現やリアルタイム処理には少し工夫が必要かと思われます。
まとめ
LLM を既存の OCR パイプラインに組み合わせることで、“ルールで吸収しにくい構造的なズレ” を補正でき、一定の精度向上が確認できました。 特に、
- 多様な書式の請求書を扱う
- ルールのメンテが重くなっている
といった課題に対して、相性の良い手法かと思います。 一方で、「コストと処理時間の増加」という課題もあるため、実運用にはもうひと工夫が要りそうです。
今後は、座標情報を扱えるように処理を改修したり、より高性能なモデル(gpt-5.1のような推論モデル)を利用したりすることで、明細表読み取り処理をより優れたものにしていければと考えています。