以前、「AI-OCRはそれっぽく間違う」という話を書きました。自作の書類読み取りAPIを、Mistralという海外のAIと同じ写真・同じ条件で読み比べてみた話です。今回はその続編です。
■ 前回の弱点
前回選んだのは、読み取りが「難しい書類」でした。2行に分かれたレシートの明細や、ぎっしり詰まった価格表です。
ただ、あの記事にはひとつ弱点がありました。実際のお仕事の現場から届くのは、難しい「書類」ではなく、難しい「写真」なんです。
納品書は倉庫の床で、横向きのまま撮られます。レシートはポケットの中でシワになります。複写伝票は束のまま、上から受領印が押された状態で撮られます。夜のバックヤードで、防犯モニターの灯りだけを頼りに、片手で撮られることもあります。
デモで見る書類はいつもまっすぐで、明るくて、シワひとつありません。現場の写真はその逆です。
■ 何をどう測ったか
そこで、まさにそういう写真を7枚追加して、全部を測り直しました。
・書類14種類・チェック項目769個
・同じ写真、同じ項目リスト、同じ採点方法
・3つの方式に、それぞれ3回ずつ読ませる
比べた3つの方式は、①うちのAPI ②Mistral OCR ③写真をそのまま大規模AIに渡して「この項目を抜き出して」と頼む方式(以下、ビジョンAI)です。今回はうちのAPIを、お客様が実際に使うのと同じ公開の窓口経由で測りました。つまり、今日登録した方でも同じ数字を再現できる条件です。
■ 結果
正しく読めた項目の割合です。
・うちのAPI: 89.2%
・Mistral OCR: 69.3%
・ビジョンAI: 66.8%
もうひとつ、地味ですが大事な数字があります。同じ写真を、何も変えずに3回読ませたときの「答えのブレ」です。
・うちのAPI: 3回で6項目だけ変わった
・Mistral OCR: 106項目変わった
・ビジョンAI: 53項目変わった
毎晩自動で書類を処理する使い方を考えると、このブレは精度と同じくらい効いてきます。昨日と今日で答えが変わるシステムは、どこが本当の変化でどこがゆらぎなのか、人間が見分けられなくなるからです。
ちなみに、いちばんきれいな印刷の表では、3方式ともほぼ満点で並びました。「文字を読む力」自体には、もう大きな差はないんです。差がつくのは、書類の構造が複雑なときと、写真の条件が悪いときでした。
■ 一番驚いたこと: 横向きの写真
今回いちばん驚いたのは、横向きに撮られた書類で、ビジョンAIの点数が2割前後まで落ちたことです(今回の2枚で0.217と0.130)。同じ写真を、OCRを間に挟む方式は普通に読めています(0.611〜0.872)。
理由は仕組みにあります。OCRには「文字を読む前に、ページの向きを検出してまっすぐに直す」という工程があります。写真を直接AIに渡す方式には、その工程がありません。横倒しの画像がそのまま入ってくる。人間なら首を傾ければ済む話ですが、AIはページの大半を読み落としました。
写真2枚の結果なので「ビジョンAIは常にこうだ」とまでは言いません。ただ、3回読ませて3回ともこうなった、というのは事実として書いておきます。
■ ¥711が4つ印字されたレシート
今回の写真の中に、面白い1枚がありました。セブン-イレブンのレシートで、711という数字が8箇所に出てくるんです。合計が¥711、電子マネーの支払額も¥711、売上票の金額も¥711、税額の行にも¥711。さらに、お店の電話番号の末尾が0711、レジの時刻が07:11、日付が7月11日、伝票番号の中にも711。
このレシートに「合計」「支払額」「請求金額」の3項目をお願いすると、正しく読めたAIは、同じ「¥711」を3回返してきます。値だけを見ても、どれがどの行から来たのか、絶対に分かりません。
区別できる情報はひとつだけ。「ページのどこから読んだか」という位置です。うちのAPIは3回の実行すべてで、3つの項目それぞれに正しい行の位置を付けて返しました。位置を返さないAIには、そもそも「どの行を読んだか」を言う場所がありません。合っていても間違っていても、返ってくるデータの見た目が同じなんです。
前回の記事で「AIに座標を作らせない」という設計の話をしましたが、その設計が何のためにあるのか、この1枚が一番わかりやすく見せてくれました。
■ 正直な話: それでも通り抜ける間違い
うまくいった話ばかりだと宣伝になってしまうので、うまくいかなかった話も書きます。
うちのAPIには、AIが読んだ値と、OCRがページ上で実際に見た文字を、独立した「2つの目」で突き合わせる検証機能があります。2つの目が食い違えば「ここは確認してください」という印が付きます。
ところが今回のような悪条件の写真では、すり抜けた間違いの大半が「2つの目が、同じ間違い方で一致してしまった」ケースでした。眩しさで白く飛んだ文字や、ブレて溶けた文字は、どちらの目にも同じように間違って見えるからです。突き合わせという仕組みの性質上、「合意された間違い」は捕まえられません。
だから「確認してください」の印は、人の確認をなくす魔法ではありません。確認する場所を769箇所から数十箇所に絞るための道具です。金額の桁チェックや合計の検算のような業務ルールは、その上に重ねて使うのが正解だと考えています。
■ 今回の写真、ぜんぶお見せします
夜、防犯モニターの灯りだけで撮られた納品書です。うちのAPI 0.831、Mistral OCR 0.488、ビジョンAI 0.441でした。
束のまま横向きに撮られた複写伝票。受領印も押されたままです。0.833 / 0.611 / 0.130。緑の枠は、うちのAPIが実際に返してきた「読んだ位置」です。
手書きにしか見えない印刷の水産伝票。0.971 / 0.790 / 0.743。明細6行の金額と合計に、それぞれの行の位置が付いて返ってきました。
単価の下に小さな税表記が重なる食材伝票。0.804 / 0.686 / 0.824 — 実はこの1枚だけ、ビジョンAIがうちより上でした。負けは負けなので、そのまま書いておきます。
どの写真も、取引先の名前や連絡先はこちらでモザイク処理しています。
■ まとめ
前回の結論は「モデルの新しさより、間違いにどう気づけるかの設計が大事」でした。今回、写真の条件を現場に近づけてみて、その結論はむしろ強まりました。
・きれいな書類では、どの方式もほぼ満点。差はつかない
・差がつくのは、回転・シワ・夜撮りのような「現場の写真」
・そして値が同じなら、最後に頼れるのは「どこから読んだか」という位置の情報
読んでいただきありがとうございました。紙の書類の読み取り・データ化の自動化について、「うちのこのひどい写真、読めますか?」というご相談も歓迎です。プロフィールからお気軽にどうぞ。