生協が組合員から回収する手書きの注文用紙を Azure AI Document Intelligence で読み、商品番号と数量を注文データに転記して、読み取りの怪しい欄を確認に回す
配達担当が回収した手書きの注文用紙を読み取り、商品番号と数量を注文データに転記します。その週の企画に無い番号や、読み取りに自信のない欄だけを事務の確認に回します。
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Make/Power Automate/Python
- 対象業界
- EC/その他/小売
- 対象部門
- 営業
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 人手が足りない/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 配達担当が配達のときに注文用紙を回収し、コースごとの袋に入れてセンターへ持ち帰る
- 事務の担当が袋を開け、組合員コードの順に並べる
- 受注システムの入力画面を開き、組合員コードを打ち込む
- 用紙を見ながら、商品番号と数量を1行ずつ打ち込む
- その週の企画に無い番号でエラーが出たら、カタログをめくって似た番号を探す
- 見つからない、または字が読めないものは付箋を貼り、配達担当に組合員への確認を頼む
- 打ち込みが終わった用紙は、別の担当が画面と読み合わせる(全件はできず、行の多い用紙を中心に)
- 人事務の担当が回収した注文用紙を、センターの複合機でコースごとにまとめてスキャンする
- 自動保存をきっかけに処理が動き、PDFを1枚ずつに分け、向きと解像度を確かめる
- 自動Document Intelligence のカスタム テンプレート モデルが、組合員コード・企画の回・40行の商品番号と数量・「今週は注文しない」の印と、それぞれの信頼度を返す
- 自動組合員コードを組合員の台帳と照らし、企画の回がその週のものかを確かめる
- 自動行ごとに、商品番号をその週の企画の一覧と照らし、数量を購入の上限と照らす
- 自動行ごとに `ok` / `low_confidence` / `not_in_catalog` / `over_limit` / `ambiguous` を付け、`ok` だけの用紙は注文データの取り込みファイルに書き出す
- 人事務の担当が、`ok` 以外の行を、用紙の該当部分の画像と並べて確かめ、直す
- 人確かめても決められない行は、配達担当に組合員への確認を頼む
- 自動確かめた用紙の注文データを取り込みファイルに書き出し、受注システムに取り込む
各工程の詳しい説明を読む
- 配達担当が配達のときに注文用紙を回収し、コースごとの袋に入れてセンターへ持ち帰る
- 事務の担当が袋を開け、組合員コードの順に並べる
- 受注システムの入力画面を開き、組合員コードを打ち込む
- 用紙を見ながら、商品番号と数量を1行ずつ打ち込む
- その週の企画に無い番号でエラーが出たら、カタログをめくって似た番号を探す
- 見つからない、または字が読めないものは付箋を貼り、配達担当に組合員への確認を頼む
- 打ち込みが終わった用紙は、別の担当が画面と読み合わせる(全件はできず、行の多い用紙を中心に)
(a)読み違いは、届いてから分かる。 1と7、4と9、0と6は、急いで書かれた数字ほど見分けにくくなります。番号を1桁読み違えても、それが企画に存在する別の商品の番号なら、受注システムはエラーを出しません。 組合員の手元に違う商品が届き、返品と再配達の手配が発生します。
(b)エラーが出たときの探し方が、担当者ごとに違う。 5番目で似た番号を探すとき、ある担当者は「1桁違い」を探し、別の担当者は「前の週に頼んだ商品」を探します。どちらで探したかは記録に残らず、見つけた番号が正しかったかも分かりません。
(c)締切前の2日間に、打ち込みと確認が重なる。 1枚3分でも、600枚を2日間でさばけば30時間で、事務の担当2名がほぼ丸2日を使います。 7番目の読み合わせは時間が残った分しかできず、忙しい週ほど確認が薄くなります。
(d)数量の書き方がばらつく。 「2」と書く組合員もいれば、「2コ」「正」の字で書く組合員もいます。人が読めば分かりますが、そのまま打ち込むと担当者によって数量の扱いが変わります。
- 【人】 事務の担当が回収した注文用紙を、センターの複合機でコースごとにまとめてスキャンする
- 【自動】 保存をきっかけに処理が動き、PDFを1枚ずつに分け、向きと解像度を確かめる
- 【自動】 Document Intelligence のカスタム テンプレート モデルが、組合員コード・企画の回・40行の商品番号と数量・「今週は注文しない」の印と、それぞれの信頼度を返す
- 【自動】 組合員コードを組合員の台帳と照らし、企画の回がその週のものかを確かめる
- 【自動】 行ごとに、商品番号をその週の企画の一覧と照らし、数量を購入の上限と照らす
- 【自動】 行ごとに
ok/low_confidence/not_in_catalog/over_limit/ambiguousを付け、okだけの用紙は注文データの取り込みファイルに書き出す - 【人】 事務の担当が、
ok以外の行を、用紙の該当部分の画像と並べて確かめ、直す - 【人】 確かめても決められない行は、配達担当に組合員への確認を頼む
- 【自動】 確かめた用紙の注文データを取り込みファイルに書き出し、受注システムに取り込む
7番目が、この設計の分かれ目です。人が見るのは「行」で、「用紙」ではありません。 1枚に8行書かれていて1行だけが怪しければ、人が見るのはその1行です。用紙ごと人に回す設計にすると、ほとんどの用紙に1行は怪しい行があるので、結局全部を見ることになります。
6番目で ok の用紙を人に見せずに流すのは、信頼度・企画の一覧・購入の上限の3つを重ねているからです。 それでも残る読み違いは、第7章で残す返品の記録から拾います。
02今回想定するシステム構成
注文用紙(紙・手書き。組合員コードと企画の回は印字) │ センターの複合機でコースごとにスキャン(300dpi、PDF) ▼【トリガー】Azure Blob Storage の受付のコンテナーへの保存 Python(Azure Functions) ├──▶ ページ分け、向きと解像度の確認 ▼ Azure AI Document Intelligence(カスタム テンプレート モデル) │ 組合員コード・企画の回・40行の商品番号と数量 │ 「今週は注文しない」の選択マーク、フィールドと表のセルの信頼度 ▼ Python ── 組合員の台帳、その週の企画の一覧、購入の上限と照合 │ ① 信頼度の判定 ② 企画の一覧との照合 ③ 数量の上限 ▼ 判定(ok / low_confidence / not_in_catalog / over_limit / ambiguous) ▼ 【事務の担当が ok 以外の行だけ画像と並べて確認】 ▼ 注文データの取り込みファイル → 受注システム
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(カスタム テンプレート モデル) | Google Document AI(Form Parser)。AWS Textract は日本語の手書きを読めないため対象外 |
| 連携 | Python(Azure Functions。保存を起点に読み取りを呼び、結果を照合に渡す) | Power Automate、Make |
| 差異計算 | Python(企画の一覧・購入の上限との照合、行ごとの判定) | Google Apps Script |
| 保管 | Azure Blob Storage(用紙の画像と読み取りの結果) | 社内のファイルサーバー |
| 確認の画面 | 社内の確認用の画面(行ごとに画像の切り出しと読み取りの値を並べる) | 共有のスプレッドシート |
受注システムは新しく足すものではありません。 インターネット注文と同じ取り込みの経路に、確かめた注文データを渡すだけで、直接書き込む経路は作りません。
生成AIは使いません。 商品番号は5桁の数字、数量は1〜2桁の数字で、言い換えや要約の対象がありません。読めない数字を補う仕組みは、そのまま誤配送の仕組みになります。
読み取りの中心は、カスタム テンプレート モデルです。 公式の説明では、テンプレート モデルはレイアウトの手がかりを使って値を取り出し、決まった見た目の様式を持つ、構造のはっきりした文書に向くとされています。注文用紙は生協で1つに決まった様式で、どの組合員の用紙でも、商品番号の枠は同じ位置にあります。 この性質にいちばん合うのがテンプレート モデルです。
テンプレート モデルが扱える項目は、キーと値、選択マーク、表、署名、選択した領域です。 40行の商品番号と数量は表のフィールドとして、「今週は注文しない」は選択マークとして取ります。重なり合うフィールドには対応していないとされているので、1つの枠を2つのフィールドに割り当てないようにラベルを付けます。
日本語の手書きも対象です。 カスタム テンプレート モデルの対応言語の表では、手書きの文字の対応言語に日本語が含まれています。 この構成で読む手書きは数字が中心ですが、数量の欄に「2コ」のような書き込みがあることも想定しておきます。
03どうやって実装するのか
処理の起点を決める
スキャンした PDF が Blob Storage の受付のコンテナーに保存されたことを起点にします。 センターの複合機の保存先を受付のコンテナーにつながるフォルダにしておき、コースごとに1つの PDF にまとめてスキャンします。保存されると Azure Functions の処理が動き、PDF を用紙1枚ずつに分けて読み取りに回します。
夜にまとめて動かすのではなく、保存のたびに動かします。 午前にスキャンしたコースの確認を、午後のスキャンの前に終わらせられることが効きます。
処理が終わった PDF は処理済みのコンテナーへ移します。移すのは、全ページの読み取りと照合が終わったときだけにします。 途中で止まった PDF は受付のコンテナーに残り、残っている数がそのまま未処理の数になります。 夕方には配達のコースの一覧と突き合わせ、PDF が届いていないコースを一覧にします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 注文用紙の PDF | コースごとにまとめてスキャンしたもの。スキャンした日時とコース | Blob Storage の受付のコンテナー |
| 読み取り結果 | 組合員コード、企画の回、40行の商品番号と数量、選択マークの状態、フィールド・単語・表のセルの信頼度 | Azure AI Document Intelligence |
| 組合員の台帳 | 組合員コード、氏名、配達のコースと曜日、紙の注文の利用の有無 | 組合員の台帳(毎晩の書き出し) |
| その週の企画の一覧 | 企画の回、商品番号、商品名、規格、1回あたりの購入の上限 | 受注システムの企画の書き出し |
| 前週までの注文 | 組合員ごとの直近の注文の商品番号と数量 | 受注システムの注文の書き出し |
質を決めるのは、その週の企画の一覧です。 商品番号は企画の回ごとに割り当てが変わることがあり、先週の一覧で照合すると、読み違えた番号が ok になります。
前週までの注文は、確認の材料として画面に出すだけです。 前週の注文から番号を埋めることはしません。
データの取得方法を決める
読み取りは、Azure Functions から Document Intelligence の REST API でカスタム テンプレート モデルを呼びます。API のバージョンは 2024-11-30(v4.0 の GA)に固定します。 カスタム モデルのフィールドに単語の信頼度が含まれるのも、表・行・セルの信頼度が返るのも、このバージョンからとされています。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 組合員コード・企画の回 | テンプレート モデルのフィールド(印字) | 組合員の特定、照合に使う企画の一覧の特定 |
| 商品番号・数量 | 表のフィールド(40行 × 2列) | 注文データの行 |
| 「今週は注文しない」 | 選択マークのフィールド | 注文なしの用紙を分ける |
| フィールドの信頼度 | 各フィールドの confidence | 欄ごとの判定 |
| 単語の信頼度 | ページの単語の confidence | 数字1文字ずつの読みの確からしさ |
| 表・行・セルの信頼度 | 表のフィールドの信頼度 | 確かめる行の絞り込み |
信頼度は2つの層を合わせて見ます。 公式の説明では、フィールドの信頼度は取り出した値の位置についての確からしさを表し、文字そのものの確からしさは単語の信頼度として別に返るとされています。2つのうち低いほうを、その欄の信頼度として扱います。
表の信頼度は、表全体から順に見ます。 公式の説明では、表全体、行、セルの順に上から見ていくことが勧められ、決まった行数の表ではセルの信頼度を見るだけでもかなりのことが分かるとされています。注文用紙は40行の決まった表なので、セルの信頼度を中心に、行の信頼度で行ごとの漏れを補います。
組合員の台帳と企画の一覧は、毎晩の書き出しのファイルを Python で読みます。照合の順は、企画の回が先、商品番号が後です。 企画の回を取り違えると、それ以降の照合がすべてずれます。
AIへ渡す前に整形する
- ページ分けと向きの確認 … コースごとの PDF を1枚ずつに分け、上下が逆のページを直します。裏返しでスキャンされた白紙のページは除きます
- 解像度の確認 … 取り出す文字の高さの下限は、1024×768の画像で12ピクセル(150dpiで約8ポイントの文字)とされています。数量の枠は小さいので、複合機は300dpiに固定します
- 画像の寸法の確認 … 50×50から10,000×10,000ピクセルの間である必要があります
- 様式の確認 … 読み取り結果の文書の種類の信頼度が低い用紙は、古い様式や別の用紙が混ざった可能性があるので、読み取りの結果を使わずに担当へ回します
- 重複の確認 … 同じ組合員・同じ企画の回の用紙が既に処理されていれば、上書きせずに担当に確かめます
2番目を軽く見ないでください。 複合機の既定の設定は文書の読みやすさに合わせてあり、枠の細い線と数字が重なると、数字の一部が線に吸収されます。 1と7の見分けがつかない原因の多くは、組合員の書き方ではなくスキャンの設定です。
4番目は、テンプレート モデルの性質から来ています。 公式の説明では、テンプレート モデルは決まった見た目の様式に頼るため、様式が変わると正確さが下がるとされています。カタログの改訂で用紙の様式が変わった週は、古い用紙と新しい用紙が混ざります。
AIに処理させる
させるのは、注文用紙の決まった枠に書かれた数字を読み、欄ごとの信頼度を返すことだけです。 企画の一覧との照合、数量の上限、行ごとの判定は、Python が決まった規則で行います。
| 読むもの | 読み方 | 決められないときの扱い |
|---|---|---|
| 組合員コード | 印字の数字をそのまま | 台帳に無ければ用紙ごと ambiguous |
| 企画の回 | 印字の数字をそのまま | その週の回でなければ用紙ごと担当へ |
| 商品番号 | 手書きの5桁を文字列のまま | 5桁でない、または信頼度が低ければ low_confidence |
| 数量 | 手書きの数字を文字列のまま | 数字以外の文字があれば ambiguous |
| 「今週は注文しない」 | 選択マークの状態 | 印があるのに商品番号も書かれていれば ambiguous |
Python が行う行ごとの判定は、次の順で決めます。
| 順 | 条件 | 判定 |
|---|---|---|
| 1 | 商品番号も数量も空欄 | 行として扱わない |
| 2 | 片方だけが空欄 | ambiguous |
| 3 | 商品番号か数量の信頼度が基準を下回る | low_confidence |
| 4 | 商品番号がその週の企画の一覧に無い | not_in_catalog |
| 5 | 数量がその商品の購入の上限を超える | over_limit |
| 6 | 上のどれにも当たらない | ok |
3番目を4番目より先に置くのが、この判定の要です。 信頼度が低い番号を先に照らすと、たまたま企画にある番号に読めた行が ok になります。
not_in_catalog の行には、候補を並べます。 読み取った番号と1桁だけ違う、その週の企画の番号を最大3つまで出し、それぞれの商品名を添えます。選ぶのは担当で、候補を自動で採用することはしません。 第3章の(b)の探し方の違いを、候補の出し方として1つにそろえます。
| させないこと | 理由 |
|---|---|
| 読めない番号を企画の番号に寄せる | 組合員が頼んでいない商品が届く |
| 前週の注文から番号や数量を埋める | 毎週同じものを頼むとは限らない |
| 「2コ」「正」を数に直して確定させる | 書き方の解釈は担当がそろえて決める |
| 購入の上限を超えた数量を上限に丸める | 組合員の意図が分からないまま数量が変わる |
| 信頼度の付け直し | 読み取りが返した値をそのまま使う |
4行目は、善意から起こりやすい失敗です。 上限が3の商品に「5」と書かれていても、「3」の読み違いか、上限を知らずに書いたのかは用紙を見ないと決められません。
指示内容を固定する
この構成では生成AIを使わないため、プロンプトの代わりにテンプレート モデルの学習の指示と、ラベル付けの決まりを示します。
【見本の集め方】
- 現行の様式の注文用紙を、実際に組合員が書いたものから集める
- ラベル付けした見本は最低5枚。できれば30枚程度を、次のばらつきが入るように選ぶ
・行が1〜2行だけの用紙と、40行近く埋まった用紙
・数字を枠からはみ出して書いた用紙、二重線で書き直した用紙
・「今週は注文しない」に印がある用紙
・鉛筆で書かれた薄い用紙、ボールペンで書かれた用紙
- スキャンの設定は本番と同じ300dpiにそろえる
【ラベルの決まり】
- member_code ...... 組合員コードの印字の枠
- issue_no ......... 企画の回の印字の枠
- no_order ......... 「今週は注文しない」のチェック欄(選択マーク)
- order_lines ...... 表のフィールド。40行固定。列は item_no と qty
- item_no .......... 商品番号の5つの枠をまとめて1つの値として囲む
- qty .............. 数量の枠。枠の外へはみ出した書き込みも含めて囲む
- 1つの枠を2つのフィールドに割り当てない(重なり合うフィールドは使えない)
- 空欄の行もラベルの対象にし、値が無いことを学ばせる
【学習と評価】
- 学習のモード(buildMode)は template
- 学習の結果の推定の正確さは80%以上を目安にする。
注文は届け先と請求に直結するので、100%に近づくまで見本を足す
- 様式の改訂があったら、新しい様式で5枚以上の見本を作り、学習し直す
「空欄の行もラベルの対象にする」を外さないでください。 公式の説明では、任意の項目の空欄について、学習の見本に空欄がどのくらい含まれるかによって、値が無いという予測の信頼度も変わるとされています。注文用紙は40行のうち大半が空欄なので、ここを外すと空欄の扱いが不安定になります。
判定の基準値は、処理の側の設定として持ちます。 初期値は、商品番号の信頼度の下限0.90(フィールドと単語の低いほう)、数量の下限0.85とし、最初の1か月で、直した行の信頼度の分布と返品の記録を見て見直します。
出力形式を固定する
用紙1枚ごとに、次の形のJSONを作ります。
{
"sheet_id": "2026-W42-C07-0153",
"member_code": "1048831",
"issue_no": "42",
"no_order": false,
"sheet_status": "has_review | all_ok | no_order | form_mismatch",
"lines": [
{ "row": 1, "item_no": "31207", "qty": "2",
"item_conf": 0.98, "qty_conf": 0.97,
"check": "ok", "item_name": "", "candidates": [] },
{ "row": 2, "item_no": "47195", "qty": "1",
"item_conf": 0.71, "qty_conf": 0.95,
"check": "low_confidence", "item_name": "",
"candidates": ["17195", "41195"] }
],
"reviewed_by": "",
"reviewed_at": ""
}
1つ目の理由は、行ごとに check を持てることです。 用紙の単位ではなく行の単位で判定を持つので、確認の画面には ok 以外の行だけを出せます。
2つ目は、読み取った値と直した値を分けて残せることです。 item_no は読み取ったままの値で、担当が直したら別の項目に書き、元の値は消しません。 どの数字がどの数字に読み違えられやすいかは、この差から分かります。candidates は担当が選ぶための材料で、item_no に自動で入ることはありません。
取り込みファイルには、確かめ終わった行だけを、受注システムの取り込みの形式(組合員コード、企画の回、商品番号、数量)で書き出します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 複合機 → Blob Storage | 複合機の保存先を受付のコンテナーにつながるフォルダにする | コースごとの PDF を置く |
| Azure Functions | Blob Storage への保存を起点に動く | ページ分け、読み取りの呼び出し、照合 |
| Azure AI Document Intelligence | REST API(2024-11-30) | テンプレート モデルで読み取る |
| 組合員の台帳・企画の一覧 | 毎晩の書き出しのファイルを読む | 照合の元 |
| 確認の画面 | 判定の JSON と画像の切り出しを表示 | 担当が行ごとに確かめる |
| 受注システム | 既存の取り込みの経路 | 確かめた注文データだけを取り込む |
受注システムへは、取り込みファイルを渡すところまでにします。 取り込みの操作は担当が行い、取り込んだ件数と、用紙の数・行の数が合っているかを取り込みの画面で確かめます。 自動で取り込む経路を作ると、照合の設定を誤った週にそのまま誤った注文が発注まで進みます。
組合員の台帳と企画の一覧は読むだけです。 台帳に無い組合員コードが出ても書き足さず、担当が確かめます。
人が確認する
人が見るのは ok 以外の行と、用紙ごと回された用紙だけです。 ok だけの用紙は、コースごとの件数と行の数を一覧で流し見ます。
- 用紙ごと回されたものを先に見る …
form_mismatch(古い様式・別の用紙)と、組合員コードが台帳に無いもの。多くはスキャンの取り違えか、様式の切り替えの週の混在です low_confidenceの行を、画像の切り出しと並べて見る … 数字が読めれば直し、読めなければ配達担当への確認に回しますnot_in_catalogの行を、候補と並べて見る … 候補の商品名と、前週の注文を見て決めます。決めきれなければ、候補を採用せずに確認に回しますover_limitとambiguousの行を見る … 数量の書き方の解釈は、生協で決めた扱い(「正」の字の数え方など)に従います- 直した内容を記録する … どの行を、何から何に直したかを残します
3番目で「決めきれなければ確認に回す」を守ってください。 候補が1つしかなく、前週も同じ商品を頼んでいると採用したくなりますが、組合員に聞くほうが返品より安く済みます。 発注の締切に間に合わない行は、その週の注文から外し、組合員に伝えます。
目標は、2,400枚をならして1枚1分です。 確認の要る行が用紙の3割前後に1行ずつ出るという想定で、それより多い週は、スキャンの設定か、企画の一覧の取り込みを疑います。
例外に対処する
| 起きること | 対応 |
|---|---|
| 古い様式の用紙が混ざる | 文書の種類の信頼度が低ければ form_mismatch。読み取りの結果を使わず、担当が手で打つ |
| 別の週の企画の回が印字されている | 前の週の用紙の出し忘れ。その週の注文として扱わず、担当に回す |
| 1枚の用紙が2ページにまたがる | 組合員が2枚目を付けた場合。組合員コードで結び、2枚目は担当が確かめる |
| 用紙のコピーに書かれている | 印字の組合員コードが読めないことがある。台帳と照らして、無ければ用紙ごと担当へ |
| 商品番号が4桁や6桁 | 書き漏れか書き過ぎ。low_confidence として担当へ |
| 「今週は注文しない」に印があり、商品番号も書かれている | ambiguous。どちらを優先するかは組合員に確かめる |
| 数字が枠の外に書かれている | テンプレート モデルの枠の外の書き込みは取れないことがある。空欄と出た行に書き込みが無いかを、画像の縮小表示で流し見る |
| Document Intelligence が応答しない | PDF を受付のコンテナーに残す。処理済みへ移すのは成功したときだけ |
| 同じ用紙が二度スキャンされる | 組合員コードと企画の回で照合し、二重に作らない |
下から3行目は、テンプレート モデルの性質から来ています。 枠の位置に頼って読むので、枠を大きくはみ出して書かれた数字は、どのフィールドにも入らないことがあります。 空欄と出た行の数が、用紙の見た目と合わないときは疑います。
記録を残す
- 元の PDF と、用紙1枚ごとの画像、スキャンした日時とコース
- Document Intelligence が返した JSON の全文と、使ったモデルの ID と API のバージョン
- 行ごとの判定(
check、信頼度、candidates)と、照合に使った企画の一覧の版 - 担当が直した記録 … どの行を、何から何に直したか。確認した担当と日時
- 配達担当に確認を頼んだ行と、その結果
- 届けた後に返品・交換になった注文と、その行の判定の記録
3つ目で企画の一覧の版を残すのは、欠品で商品が週の途中で差し替わることがあるためです。 版が残っていないと、ok だった理由を後から説明できません。
最後の行が、この構成の精度を測るいちばん確かな物差しです。 ok で流した行から返品が出たら、その行の信頼度と、読み取った数字と、正しい数字の組み合わせを見ます。同じ組み合わせが続くなら、下限の値か学習の見本を見直します。
04実装レベルの3段階
最小構成では週600枚はさばけません。 1枚ずつ Studio で読ませるので、モデルがこの用紙を読めるかを確かめる段階です。 半自動化で、1枚3分が1.5分程度になります。 読み取りは自動になりますが、企画の一覧との照合は担当が受注システムのエラーを見ながら行うので、第3章の(b)の探し方の違いが残ります。 本格構成で照合と候補の提示が自動になり、1分になるのがこの記事の想定です。 段階を飛ばさないでください。 半自動化の一覧を1か月見ると、信頼度の下限をどこに置けばよいかが分かります。
05工数削減シミュレーション
導入後 2,400件 × 1分 ÷ 60 = 40 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 宅配の共同購入・個人宅配で、紙の注文用紙を使い続けている組合員がおり、供給センターの事務が用紙を見ながら商品番号と数量を打ち込んでいる地域の生協。注文用紙の様式が生協で決まっていて、毎週同じ枠に商品番号と数量を書く形になっている場合。注文の締切から発注の締切までの時間が短く、打ち込みが毎週の残業になっている場合。
- 注文用紙がマークシートで、専用の読み取りの機械が問題なく動いている場合。紙で注文する組合員が数十世帯で、打ち込みが負担になっていない場合。注文用紙の様式が配送の地域ごとにばらばらな場合(先に様式をそろえる必要があります)。なお、読み取れない注文を組合員に確かめるか、前週と同じ注文とみなすかといった判断は、この構成では代替できません。
07最小構成で試す方法
- 先週回収した注文用紙から50枚を選ぶ(うち10枚は、打ち込みのときに迷った用紙を入れる)
- その50枚の、受注システムに入った注文を書き出しておく(これを正解とする)
- Document Intelligence Studio で、そのうち30枚にラベルを付けてテンプレート モデルを学習させる
- 残りの20枚を Studio で読み取らせ、商品番号と数量と信頼度を書き出す
- 書き出した値と正解を1行ずつ突き合わせ、読み違えた行の信頼度を見る
30枚は、空欄の多い用紙と行の多い用紙を混ぜてください。 学習の見本が行の多い用紙に偏ると、空欄の行で信頼度の低い値を返すようになります。
| 出てきた内容 | 判断 |
|---|---|
| 読み違えた行が、すべて信頼度の低い側にあった | 照合の仕組みを作る段階に進む |
| 信頼度が高いのに読み違えた行がある | 見本を足して学習し直す。数字の組み合わせを記録する |
| 空欄の行で値を返す | 空欄の行のラベルが足りない |
| 数字の一部が欠けて読まれる | スキャンの設定が先。 解像度と濃さを見直す |
2行目が出たら、その数字の組み合わせを必ず記録してください。 信頼度が高いまま起きる読み違いは、下限の値を上げても拾えません。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
読み違えた番号が企画にあり、ok になる | 信頼度で落としてから照合する。 順を逆にしない |
| 先週の企画の一覧で照合してしまう | 用紙に印字された企画の回で、照合する一覧を選ぶ |
| 空欄の行で値を返す | 空欄の行もラベルの対象にして学習させる |
| フィールドの信頼度は高いのに数字が違う | フィールドの信頼度は位置の確からしさ。 単語の信頼度と合わせて見る |
| 1と7、4と9が読み違えられる | 300dpi に固定し、薄い鉛筆の用紙を見本に入れる |
| 枠をはみ出した数字が取れない | 空欄と出た行の数を用紙の見た目と比べる |
| 様式の切り替えの週に精度が落ちる | 文書の種類の信頼度で古い様式を分ける。新しい様式で学習し直す |
| 候補を自動で採用したくなる | 候補は担当が選ぶ。 決めきれなければ組合員に聞く |
| 上限を超えた数量を丸めてしまう | over_limit として担当へ回す |
| 「2コ」「正」の扱いが担当ごとに違う | 生協で扱いを決め、確認の画面に書いておく |
| 受注システムへ自動で取り込みたくなる | 取り込みファイルまでにし、件数を確かめて人が取り込む |
上の4行が、この構成の失敗のほとんどです。 どれも「信頼度」と「照合」のどちらか片方だけに頼ったときに起きます。2つの物差しを順に当てる設計になっているかで、運用に乗るかが決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 組合員コード、注文した商品と数量、配達のコースです。注文の中身からは、家族構成、食事の制限、健康の状態がうかがえることがあります。 用紙の余白に、組合員が配達担当への連絡を書き込んでいることもあります。
- 読み取りに渡す範囲を、注文の枠に限る … テンプレート モデルは決まった枠だけをフィールドとして返しますが、ページ全体の文字も読み取りの結果に含まれます。余白の書き込みは、保存の対象から外すか、閲覧できる担当を限ります
- 処理する場所を決める … Document Intelligence のリソースを作る地域を、生協の情報の取り扱いの決まりに照らして選びます。国内の地域(東日本)を選べるかを最初に確かめます。 Blob Storage も同じ地域にそろえます
- 確認の画面の閲覧を、事務の担当に限る … 注文の履歴とあわせて見られる画面なので、閲覧の権限を絞ります
- 組合員への確認の記録を残す … 配達担当や電話で確かめた内容は、誰が、いつ、何を確かめたかを残します。問い合わせへの答えの根拠になります
- 見本の用紙の扱いを決める … 学習に使った見本は、学習の後に保管するか削除するかを決めます
- 自動で注文を確定させない … 読み取りと照合の結果は、取り込みファイルを作るところまでです。注文の確定は担当の操作で行います
誤りが起きた場合のリスクは、頼んでいない商品を届けることと、頼んだ商品を届けないことの2つです。 前者は読み違いを ok として流すと起き、後者は確認の要る行を確認しないまま注文から外すと起きます。前者は信頼度と照合の順で防ぎ、後者は確認に回した行を週ごとに数えて防ぎます。
10まず何から始めるか
1週目:企画の一覧の書き出しをそろえる
受注システムから、企画の回、商品番号、商品名、購入の上限を、毎週決まった形で書き出せるようにします。照合の質はここで決まります。あわせて、「2コ」「正」の字など数量の書き方の扱いを、事務の担当で1枚の紙にまとめます。
2週目:50枚で試す
先週の注文用紙から50枚を選び、30枚で Document Intelligence Studio のテンプレート モデルを学習させ、20枚を読み取らせます。受注システムに入った注文と1行ずつ突き合わせ、読み違えた行の信頼度を最優先で見ます。
3週目:信頼度の下限と、スキャンの設定を決める
読み違えた行が信頼度のどこに集まっているかを見て、商品番号と数量の下限の初期値を決めます。数字の一部が欠けて読まれる用紙があれば、複合機の解像度と濃さを見直します。
4週目:スキャンから一覧までをつなぐ
Blob Storage への保存を起点に読み取りを呼び、信頼度で行を分けて一覧に書き出すところまで作ります。この時点では照合はせず、担当は今までどおり打ち込みながら一覧と見比べます。
2か月目: 企画の一覧との照合と、候補の提示を足します。確認の要る行の数を週ごとに数えます。3か月目以降: 確認の画面と取り込みファイルの書き出しを足し、1枚3分が何分になったかを実測します。ok で流した行から出た返品を毎月見て、下限の値と学習の見本を見直す流れができた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
カスタム テンプレート モデルがレイアウトの手がかりで値を取り出し、決まった見た目の様式を持つ構造のはっきりした文書に向くこと。キーと値・選択マーク・表・署名・選択した領域に対応し、重なり合うフィールドには対応しないこと。様式が変わると正確さが下がり、様式ごとに5枚以上の見本で学習すること。入力の条件(PDF と TIFF は最大2,000ページ、F0 は最初の2ページ、S0 は500MB、画像は50×50〜10,000×10,000ピクセル、文字の高さの下限が1024×768の画像で12ピクセル)。学習の上限がテンプレート モデルで500ページ・50MBであること。学習のモードが template であること | Microsoft Learn: Custom template document model | 2026-10-15 |
| カスタム テンプレート モデル・カスタム ニューラル モデルの手書きの文字の対応言語に日本語が含まれること | Microsoft Learn: Language and locale support for custom models | 2026-10-15 |
| 信頼度が0〜1の推定の確率であること。2024-11-30 の API でカスタム モデルのフィールドの信頼度に単語の信頼度が含まれ、表・行・セルの信頼度が返ること。フィールドの信頼度が値の位置についての確からしさを表すこと。表は全体・行・セルの順に見ること、決まった行数の表ではセルの信頼度で多くが分かること。空欄の信頼度が見本の空欄の多さに左右されること。テンプレート モデルの学習で推定の正確さが出て、80%以上を目指し、扱いの重いものでは100%に近い値を勧めること。文書の種類の信頼度が低いときは様式の違いを示すこと | Microsoft Learn: Interpret and improve model accuracy and confidence scores | 2026-10-15 |
注文用紙の様式、購入の上限、数量の書き方の扱いは、各生協の決まりに従ってください。 本記事は Microsoft Learn で確認できた範囲の仕様だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1702)についてのご相談はこちらから。
