OpenAI の Decisions API に書類画像(英語)を見せて、OCR 結果の誤りを見つけさせてみた

OpenAI の Decisions API に書類画像(英語)を見せて、OCR 結果の誤りを見つけさせてみた

VLM で書類から抽出した値の検証精度を確かめるため、OpenAI の Decisions API と Cloudflare の Clef を比較してみました。注入した36件の誤りをすべて検出できたものの、正しい値を誤りと判定する誤検知が5件発生。出力確率の特性や処理速度の違いについて、実測データをまとめています。
2026.10.11

こんにちは、けーまです。

VLM で書類から値を抽出するとき、VLM 自身に「この値は正しいか」を聞いても、誤読した値に高い確信度を返してしまうことがあります。
Cloudflare の Clef に書類画像(英語)を見せて、OCR 結果の誤りを見つけさせてみた | DevelopersIO では、Cloudflare の Clef に書類画像と抽出結果を渡して「この値は画像どおりか」を判定させ、仕込んだ誤り36件をすべて検出できました。

OpenAI の Decisions API(モデルは gpt-6-luna)でも、画像を入力として受け取って yes の確率を返す質問ができます。
そこで今回は、Clef の検証で使ったものと同じ英語の書類3枚・同じ質問を Decisions API に渡し、誤りの検出数や誤検知の傾向を Clef と比較してみました。

1. 検証の条件

データは Clef の検証と同じものを使いました。
英語の見積書・請求書・領収書(3枚・計91項目)を Claude Haiku 4.5 で抽出した結果に対して、3パターンの誤り(各12件・計36件)を注入しています。

  • 桁の変更(12件):金額や日付の数字を1桁だけ変える($1,150.00 → $1,160.00、09/18/2026 → 09/19/2026)

  • 似た文字への変更(12件):OCR で混同しやすい文字に差し替える(0 → O、1 → l、m → rn)

  • 別の値への置き換え(12件):文脈として不自然ではない別の単語に置き換える(SAMPLE MART → FRESH MARKET、Service → Hardware)

判定方法も Clef の検証と揃えています。
書類画像1枚と抽出結果を渡し、項目ごとに predicate(yes の確率を返す質問)で「この値は画像に印字されたとおりか」を問い合わせます。
確率 0.5 未満を「誤り」と判定し、比較対象は clef・clef-flash(2026年10月4日の実測値)としました。

Decisions API へのリクエストは次の形です(質問は1問だけ抜粋しています)。
コメントは説明用なので、実際に送る JSON には含めていません。

{
  "model": "gpt-6-luna",
  "input": [{
    "role": "user",
    "content": [
      // 判断の前提(OCR システムが請求書画像を読み取り、キーと値を抽出した。画像と照合せよ)と抽出結果
      {"type": "input_text", "text": "{\"task\": \"An OCR system read the attached invoice image and produced these key-value pairs. Verify them against the image.\", \"extracted\": {\"invoice_no\": \"INV-2026-0042\", ...}}"},
      {"type": "input_image", "image_url": "data:image/png;base64,..."}
    ]
  }],
  "questions": [{
    "type": "predicate", // yes/no の質問。yes の確率を返す
    "name": "field__invoice_no",
    // 抽出された invoice_no の値は、書類画像に印字された文字列と一字一句一致しているか
    "instructions": "Is the extracted value of \"invoice_no\" (\"INV-2026-0042\") exactly what is printed in the document image, character for character?"
  }]
}

Clef の noul は、Decisions API では predicate に相当します

請求書のサンプル画像
検証に使った請求書

2. 結果

2.1 誤りを見つけられたか

各モデルは項目ごとに「値が画像どおりである確率」を返します。
この確率が 0.5 未満となった項目を「誤り」と判定し、次の2つの観点で件数を集計しました。

  • 誤りの検出:注入した誤り36件のうち、正しく「誤り」と判定できた件数

  • 誤検知:本来は正しい値なのに「誤り」と判定してしまった件数

条件 誤りの検出(36件中) 誤検知(237件中)
Decisions API 36 5
clef 36 0
clef-flash 36 3

Decisions API でも、注入した誤りを36件すべて検出できました。
一方で、正しい値を誤りと判定してしまった誤検知は5件あり、clef(0件)や clef-flash(3件)よりも多くなっています。

書類 版 項目 抽出した値(画像どおり正しい値) Decisions API の確率
請求書 誤りなし bill_to_attn Accounts Payable 0.35
請求書 B bill_to_attn Accounts Payable 0.07
見積書 A item4_category Software 0.46
見積書 A tax_rate 8% 0.47
見積書 A note Prices are valid for 30 days from the quote date. 0.36

請求書の bill_to_attn は、画像上では「Attn: Accounts Payable」と印字されています。
抽出値には「Attn:」を含めていなかったため、Decisions API は「一字一句一致しているか」という指示を厳密に解釈し、不一致と判定したようです。

注入した36件の一致確率は次のとおりです。
値が低いほど、モデルが「画像と一致していない」と強く判断していることを示します。

注入した誤り36件の一致の確率(クリックすると展開します)
書類 版 項目 正しい値 注入した値 パターン Decisions API clef clef-flash
見積書 A item1_unit_price $1,150.00 $1,160.00 桁 0.00 0.02 0.02
見積書 A tax $431.12 $431.72 桁 0.00 0.23 0.05
見積書 A quote_no Q-2026-0187 Q-2026-O187 似た文字 0.05 0.06 0.10
見積書 A item3_amount $435.00 $435.0O 似た文字 0.00 0.02 0.16
見積書 A item4_name Office suite license Project management tool 置き換え 0.00 0.02 0.02
見積書 A item6_category Service Hardware 置き換え 0.00 0.01 0.03
見積書 B date 09/18/2026 09/19/2026 桁 0.00 0.02 0.03
見積書 B item3_qty 3 5 桁 0.00 0.03 0.02
見積書 B total $5,820.12 $5,82O.12 似た文字 0.00 0.07 0.10
見積書 B item1_name Laptop computer Laptop cornputer 似た文字 0.00 0.03 0.08
見積書 B item2_amount $840.00 $1,240.00 置き換え 0.00 0.03 0.11
見積書 B note Prices are valid for 30 days from the quote date. Prices include free shipping. 置き換え 0.00 0.02 0.02
請求書 A invoice_no INV-2026-0042 INV-2026-0045 桁 0.00 0.02 0.02
請求書 A item2_qty 5 6 桁 0.00 0.06 0.03
請求書 A vendor_address_line2 Columbus, OH 43004 Columbus, OH 43OO4 似た文字 0.01 0.05 0.04
請求書 A bill_to_address_line1 88 Innovation Way B8 Innovation Way 似た文字 0.00 0.13 0.04
請求書 A bill_to_name Example Robotics Inc. Example Logistics LLC 置き換え 0.00 0.03 0.02
請求書 A payment_terms Net 30 Due on receipt 置き換え 0.00 0.02 0.02
請求書 B due_date 10/15/2026 10/16/2026 桁 0.00 0.08 0.02
請求書 B amount_due $1,234.50 $1,284.50 桁 0.00 0.07 0.04
請求書 B po_number PO-7781 PO-778l 似た文字 0.00 0.07 0.08
請求書 B vendor_email billing@sample-supply.example billing@sarnple-supply.example 似た文字 0.00 0.03 0.03
請求書 B item3_description Pallet wrap film Bubble wrap roll 置き換え 0.00 0.03 0.02
請求書 B shipping $14.37 $0.00 置き換え 0.00 0.02 0.02
領収書 A item2_price 3.49 3.48 桁 0.00 0.11 0.02
領収書 A time 14:32 14:52 桁 0.00 0.04 0.01
領収書 A receipt_no #0815 #O815 似た文字 0.08 0.07 0.13
領収書 A total 28.94 2B.94 似た文字 0.00 0.04 0.01
領収書 A item4_name APPLES 2LB BANANAS 3LB 置き換え 0.00 0.03 0.01
領収書 A store_name SAMPLE MART FRESH MARKET 置き換え 0.00 0.02 0.01
領収書 B date 09/21/2026 09/27/2026 桁 0.00 0.03 0.01
領収書 B item5_price 11.99 17.99 桁 0.00 0.03 0.01
領収書 B store_address_line2 Portland, OR 97201 Portland, OR 972O1 似た文字 0.02 0.06 0.05
領収書 B payment_card VISA ****0000 VISA ****OOOO 似た文字 0.02 0.09 0.12
領収書 B item1_name MILK 1GAL ORANGE JUICE 置き換え 0.00 0.02 0.01
領収書 B subtotal 28.94 31.50 置き換え 0.00 0.03 0.01

2.2 確率の分かれ方

誤りの項目(36件)と正しい項目(237件)に出力された確率のばらつきは次のとおりです。
下位5%と上位5%は、確率を昇順に並べたときの下から5%と95%にあたる値です。

条件 対象 最小 下位5% 中央値 上位5% 最大
Decisions API 誤り 0.0 0.0 0.0 0.028 0.08
Decisions API 正しい値 0.07 0.718 1.0 1.0 1.0
clef 誤り 0.012 0.016 0.030 0.112 0.227
clef 正しい値 0.622 0.769 0.914 0.974 0.983
clef-flash 誤り 0.009 0.012 0.023 0.122 0.162
clef-flash 正しい値 0.166 0.645 0.940 0.973 0.981

1項目を1点として、モデルごとに並べると次のようになります。
なお、次の3つのグラフは、検証結果のデータをもとに Claude に作成してもらったものです。

Decisions API が出力した確率の分布
Decisions API:誤りは 0.0 付近、正しい値は 1.0 付近に固まる

clef が出力した確率の分布
clef:誤りは 0.0〜0.2 台、正しい値は 0.6〜0.9 台に散らばる

clef-flash が出力した確率の分布
clef-flash:clef に近い分かれ方だが、正しい値の一部が 0.5 を下回る

Decisions API の出力した確率はかなり両極端に寄っていました。
誤りの36件中31件はちょうど 0.0、正しい値の237件中123件はちょうど 1.0 になっており、Clef のように 0.9 台や 0.0 台へ緩やかに散らばる形にはなりませんでした。
ただその一方で、正しい値の下位5%は 0.718 と、Clef と同程度に低い値も一部出ています。

しきい値を変更した際の結果は次のとおりです。

しきい値 Decisions API:検出 Decisions API:誤検知 clef:検出 clef:誤検知 clef-flash:検出 clef-flash:誤検知
0.1 36/36 1/237 33/36 0/237 31/36 0/237
0.3 36/36 1/237 36/36 0/237 36/36 2/237
0.5 36/36 5/237 36/36 0/237 36/36 3/237
0.7 36/36 10/237 36/36 5/237 36/36 18/237
0.8 36/36 16/237 36/36 23/237 36/36 50/237

Decisions API は誤りの確率がすべて 0.08 以下に収まっていたため、しきい値を 0.1 まで下げても36件すべてを検出できました。

2.3 時間と費用

リクエストは書類1枚につき1回行い、画像1枚とその書類に含まれる全項目の質問(21〜38問)をまとめて送信しています。
所要時間は日本国内から REST API を呼び出した際の実測値で、費用は1ドル150円換算です。

条件 1回あたりの時間(中央値) 9回の合計時間 1回あたりの入力トークン 9回の費用合計
Decisions API 0.638秒(638ms) 7.02秒 約10,160 $0.0078(約1.16円)
clef 1.737秒(1,737ms) 14.46秒 約5,280 $0.0103(約1.55円)
clef-flash 0.953秒(953ms) 8.69秒 約5,280 $0.0039(約0.58円)

Decisions API は検証した3モデルの中で最もレスポンスが速く、clef の約3分の1の時間で処理が終わりました。
入力トークン数は Clef と同内容でも約1.9倍に増えたものの、トークン単価が clef($0.24)より安いため、総費用としては clef の約4分の3に収まっています。

3. まとめ

Decisions API は英語の書類画像をそのまま読み込ませて、OCR の抽出結果が正しいかどうかをチェックすることはできそうです。

ただ、出力される確率が 0.0 付近と 1.0 付近に極端に張り付く傾向がある点は、運用上少し気になるところです。


AI白書2026 配布中

クラスメソッドが独自に行なったAI診断調査をもとに、企業のAI活用の現在地を調査レポートとしてまとめました。企業規模別の活用度傾向に加え、規模を超えてAI活用を進める企業に共通する取り組みまで、自社の現在地を捉えるためのヒントにぜひ。

AI白書2026

無料でダウンロードする

この記事をシェアする

DevelopersIO 2026

関連記事