Tech Learning Daily

2026-07-25 (Sat) — 第 9 号
AI が毎朝届ける、ソフトウェア技術の基礎解説
AI 🌿 基礎 ⏱ 約 7 分

「精度 94% の OCR」を製品機能にするとき、UI は何を設計すべきか?

「導入した OCR、精度は 94% だそうです」——ベンダーの資料にそう書いてあったとして、その数字だけを見て「なら残り 6% だけ気をつければいい」と安心できるだろうか。実はその数字は目の前の 1 枚の請求書がどちらの側に転ぶかを何も教えてくれない。この「今読んだ 1 件がどれだけ怪しいか」をどう UI に落とし込むかが、AI-OCR をプロダクトに組み込むときの設計の本体になる。

🎯 3 行まとめ
  • 「精度」はデータセット全体に対する平均的な評価指標であり、目の前の 1 件がどれだけ当たっていそうかを示す confidence score とは別の軸の数字だ
  • confidence score を項目単位で持つことで、全件を人が見直すのではなく「怪しい箇所だけ」にレビューを集中させる UI が組める
  • しきい値をどこに置くかで運用コストが変わり、マルチモーダル LLM の登場で「OCR 単体の文字認識」から「レイアウトごと理解する」へと前提が移りつつある

「精度 94%」の中身 ― 精度と confidence score は別の指標

OCR ベンダーが提示する精度(accuracy)は、テスト用のデータセット全体に対してモデルがどれだけ正しく認識できたかを表す平均的な評価指標だ。一方、実際にプロダクトが 1 枚の書類を処理するときに欲しいのは「この 1 件のこの項目は、どれくらい信頼できるか」という個別の判断材料であり、これはconfidence score(抽出結果 1 つ 1 つに対してモデルが持つ、その場での自信の度合いを 0〜1 や 0〜100% で表した値)という別の指標が担う。

Azure Document Intelligence のドキュメントでは、confidence 0.95 は「20 回中 19 回は正しいと期待できる」水準として説明されている。つまり同じ「精度 94%」のモデルでも、書類ごと・項目ごとに confidence は 99% のこともあれば 60% のこともあり、平均値の 94% という数字だけでは、目の前の 1 件がどちらに近いかは分からない。

文書画像 → OCR → 項目ごとに confidence
 日付   conf .98 → 自動採用
 金額   conf .61 → 人がレビュー
 取引先 conf .99 → 自動採用

レビュー画面は「全部見る」のではなく「怪しい所だけ見る」ように作る

confidence score が項目単位で手に入るということは、レビュー担当者が書類を最初から最後まで読み直す必要はなく、confidence が低い項目だけに注意を向ければよいということでもある。AI の出力を自動で確定させず、一定の条件下で人の確認・修正を挟む設計をヒューマンインザループ(human-in-the-loop)と呼ぶ。Amazon Textract と Amazon A2I(Amazon Augmented AI)の組み合わせでは、活性化条件(activation condition)としてキーバリューの confidence がしきい値を下回ったときにだけ人のレビューを発生させる設定ができる(なお A2I は 2026-07-30 以降 AWS が新規顧客の受け付けを終了する予定のサービスだが、既存顧客は継続利用でき、この activation condition という考え方自体は他の文書処理サービスにも共通する)。

{
    "Conditions": [
        {
            "ConditionType": "ImportantFormKeyConfidenceCheck",
            "ConditionParameters": {
                "ImportantFormKey": "*",
                "KeyValueBlockConfidenceLessThan": 60,
                "WordBlockConfidenceLessThan": 90
            }
        }
    ]
}

この設定を入れると、キーバリューブロックの confidence が 60 未満、または配下の単語ブロックの confidence が 90 未満の項目を含む書類だけが、人による確認が必要な書類・項目だけを集めた待ち行列であるレビューキューに送られ、confidence の高い大半の書類はそのまま自動で流れる。逆にこの活性化条件を設定しないと、モデルの出力はすべてそのまま自動採用される設計になり、低 confidence の項目が誰にも見られないまま下流の処理に流れ込む。

🍱 たとえるなら

大量の答案を採点する場面を思い浮かべてほしい。先生が全問を自分の目で採点し直すのではなく、AI 採点器が「自信を持って正解と判定できた問題」はそのまま合格にし、「判定に迷った問題」だけを先生の机に回す。先生は答案の束全体ではなく、回されてきた一部の問題だけに集中して目を通せばよい。confidence score に基づくレビューキューは、この「迷った問題だけを人に回す」仕組みをドキュメント処理に持ち込んだものだ。

しきい値をどこに置くか ― 業務の重さで変えるべき数字

しきい値を高く(例えば confidence 99 未満で全部レビュー)設定すると、大半の書類が人のレビューに回ってしまい、自動化によるコスト削減効果がほとんど残らない。逆に低く設定しすぎると、実際には誤読している項目が人の目を通らずに下流の会計処理や請求処理に紛れ込む。Azure のドキュメントは、カスタムモデルの精度目標として一般的には 80% 以上を、財務や医療記録のように誤りの許容度が低い書類では 100% に近い水準を目安に挙げ、そうした重要度の高いワークフローには人のレビュー段階を追加することを勧めている。しきい値は業務の重さに応じて個別に決める設計判断であり、一律の正解値があるわけではない。

加えて confidence は 1 段階の数字ではない。Azure のテーブル抽出では、テーブル全体・行・セルという階層それぞれに confidence が付き、あるセルの confidence が高くても、それが属する行全体としては低いということが起こる。個々のセルだけを見て「全部高いから大丈夫」と判断すると、行やテーブル単位の構造的な誤り(列のズレなど)を見落とす。

マルチモーダル LLM への移行で前提はどう変わるか

従来の OCR パイプラインは、画像から文字を認識する処理と、認識結果からどの値がどの項目かを組み立てる処理が別々のステップになっていることが多い。これに対してマルチモーダル LLM(画像とテキストを同時に扱える大規模言語モデル)は、書類の画像とレイアウトの文脈をまとめて 1 つのモデルで処理する。文字がかすれていても、周囲の文脈から「ここは金額の欄だから数字のはずだ」と推論できる点は、文字単体の認識に頼る従来型 OCR にはない強みだ。

ただしこの強みは万能ではない。マルチモーダル LLM を画像解像度別に評価した研究では、300 ppi 相当の高解像度では従来の OCR とほぼ同等の精度が出る一方、150 ppi を下回る低解像度では認識精度が従来の OCR 手法を下回ると報告されている。スマホで急いで撮った書類の写真は、この低解像度側に転びやすい。実運用では従来の OCR を完全に置き換えるのではなく、OCR の出力をマルチモーダル LLM に後処理として通し、誤読の訂正やテーブル構造の再構築に使うハイブリッドな構成が現実的な選択肢になっている。

💼 実務でどう出会うか

経費精算や請求書処理の SaaS に AI-OCR 機能を組み込むときも、AWS Textract や Azure Document Intelligence のような API を直接使うときも、直面する設計課題は同じだ。ベンダーが提示する精度の数字をそのまま信じて「自動で流すか、全部人が見るか」の二択にするのではなく、confidence score をどの粒度で受け取れるか、しきい値をどこに置くか、レビューキューの UI をどう作るかを、業務の許容誤差に合わせて個別に設計する必要がある。

⌨️ 手を動かす(5 分)

手元の OCR エンジンでも、項目ごとに confidence がばらつくことを実際に確認できる。tesseract は文字や単語ごとの confidence を TSV 形式で出力できる。

brew install tesseract
screencapture -i sample.png   # テキストが写った範囲を対話的にスクショ
tesseract sample.png stdout tsv | awk -F'\t' '$12!="" {print $11, $12}'

1 列目が confidence(0〜100)、2 列目が認識された単語だ。フォントが小さい・背景と紛らわしい・かすれている箇所ほど confidence が低く出るのが確認でき、同じ画像の中でも項目によって数字が大きくばらつくことが分かるはずだ。

🙅 よくある誤解
  • 「精度 94%」なら 94% は自動で流し、残り 6% だけ人が見ればいい — どの書類・どの項目がその 6% に当たるかは事前に分からず、confidence score という別の指標で書類ごとに都度判定しないと、危うい箇所を特定できない。
  • confidence score が低い = 文字認識自体のミス — 実際には文字は正しく読めていてもレイアウト検出やフィールドの紐付けが外れているケースもあり、要因は 1 つではない。
  • マルチモーダル LLM に置き換えれば OCR の課題は解決する — 低解像度の画像では認識精度が従来の OCR を下回る場合があり、従来の OCR と組み合わせるハイブリッド構成が現実的な選択肢になっている。
📖 用語ミニ辞典
精度(accuracy)
テストデータセット全体に対してモデルがどれだけ正しく認識できたかを表す平均的な評価指標。
confidence score
個々の抽出結果に対して、モデルがその場でどれだけ自信を持っているかを 0〜1 や 0〜100% で表した値。
ヒューマンインザループ
AI の出力を自動で確定させず、一定の条件下で人が確認・修正する工程を挟む設計。
マルチモーダル LLM
画像とテキストなど複数の種類の入力をまとめて扱える大規模言語モデル。
レビューキュー
人による確認が必要と判定された書類・項目だけを集めた待ち行列。
🔗 もっと深く
最近の記事

freee はなぜ、経理の自動化を一気に AI エージェントまで進めなかったのか?

freee の経理自動化はルールベースの自動登録 → AI-OCR → LLM エージェント(freee-mcp)と裁量を段階的に広げてきた。裁量が広がるほど権限制御・監査ログが必須になる設計判断を解説。
AI🌿 基礎⏱ 約 8 分2026-07-25

「トークン」「推論」「コンテキストウィンドウ」、LLM の中で結局何が起きているのか?

LLM は文章を BPE でトークン化し、次の 1 トークンの確率を逐次予測する自己回帰生成で文章を作る。Attention の計算量と KV キャッシュのメモリがコンテキストウィンドウに上限がある理由を解説。
AI🌿 基礎⏱ 約 7 分2026-07-25

コンテナはなぜ VM より「軽い」のか? 手放しているものは何か

VM はカーネルごとゲスト OS を積むがコンテナはホストカーネルを共有し名前空間と cgroup で区切るだけ。軽さの理由と、カーネル共有ゆえの隔離の弱さ、Mac の Docker Desktop が裏で VM を使う理由を解説。
Container🌿 基礎⏱ 約 7 分2026-07-25

Deployment の manifest、`replicas` の下に並ぶ設定は何をしているのか?

maxSurge/maxUnavailable のデフォルト 25% がロールアウト中の可用性とキャパシティを両側から縛り、readinessProbe と livenessProbe は失敗時の挙動が別物であることを、実際の YAML 断片で解説。
Container🌿 基礎⏱ 約 8 分2026-07-19