1. はじめに
Document AI は、ドキュメントやメールなどの非構造化データを理解、分析、利用しやすくするドキュメント理解ソリューションです。
Document AI Workbench でアップトレーニングを使用すると、特殊なドキュメント タイプ用のラベル付きサンプルを追加して新しいモデル バージョンを作成することで、ドキュメント処理の精度を高めることができます。
このラボでは、Invoice パーサー プロセッサの作成、アップトレーニング用のプロセッサの構成、サンプル ドキュメントへのラベル付け、プロセッサのアップトレーニングを行います。
このラボでは、架空の配管会社の請求書をランダムに生成して使用します。
前提条件
この Codelab は、Document AI の他の Codelab の内容に基づいて作成されています。
このラボを始める前に、次の Codelab を完了しておくことをおすすめします。
- Document AI(Python)を使用した光学式文字認識(OCR)
- Document AI(Python)を使用したフォーム解析
- Document AI(Python)を使用した特殊プロセッサ
- Python による Document AI プロセッサの管理
- Document AI: 人間参加型
学習内容
- Invoice パーサー プロセッサのアップトレーニングを構成する。
- アノテーション ツールを使用して、Document AI トレーニング データにラベルを付ける。
- 新しいモデル バージョンをトレーニングする。
- 新しいモデル バージョンの精度を評価する。
必要なもの
2. 設定する
この Codelab は、入門編の Codelabにある Document AI の設定手順を完了していることを前提としています
先に進む前に、次のステップを完了してください。
3. プロセッサを作成する
まず、このラボで使用する Invoice パーサー プロセッサを作成する必要があります。
- コンソールで、Document AI の概要ページに移動します。
- [Create Processor] をクリックし、[Specialized] まで下にスクロール(または検索バーに「Invoice Parser」と入力して)、[Invoice Parser] を選択します。
codelab-invoice-uptraining
(または覚えている名前)を付けて、最も近いリージョンをリストから選択します。
- [作成] をクリックして、プロセッサを作成します。プロセッサの概要ページが表示されます。
4. データセットを作成する
プロセッサをトレーニングするために、トレーニング データとテストデータを含むデータセットを作成します。このデータセットを使用して、抽出してほしいエンティティをプロセッサに学習させます。
データセットを保存するため、Cloud Storage に新しいバケットを作成します。注: 現在ドキュメントが保存されているバケットは使用しないでください。
- Cloud Shell を開いて次のコマンドを実行し、バケットを作成します。または、Cloud コンソールで新しいバケットを作成します。このバケット名を保存しておいてください。あとで必要になります。
export PROJECT_ID=$(gcloud config get-value project)
gsutil mb -p $PROJECT_ID "gs://${PROJECT_ID}-uptraining-codelab"
- [データセット] タブに移動して、[データセットの作成] をクリックします。
- ステップ 1 で作成したバケットの名前を [宛先のパス] フィールドに貼り付けます(
gs://
は除いてください)。
- データセットが作成されるまで待ちます。作成されると、データセットの管理ページに移動します。
5. テスト ドキュメントをインポートする
次に、請求書の PDF サンプルをデータセットにインポートします。
- [ドキュメントのインポート] をクリックします。
- このラボで使用するサンプル PDF が用意されています。次のリンクをコピーして [転送元のパス] ボックスに貼り付けます。[データ分割] は「未割り当て」のままにしておきます。[インポート] をクリックします。
cloud-samples-data/documentai/codelabs/uptraining/pdfs
- ドキュメントがインポートされるまで待ちます。こちらのテストでは 1 分ほどで完了しました。
- インポートが完了すると、データセット管理 UI にドキュメントが表示されます。これをクリックして、ラベル付けコンソールを開きます。
6. テスト ドキュメントにラベルを付ける
次に、抽出したいエンティティのテキスト要素とラベルを指定します。このラベルは、特定のドキュメント構造を解析して正しいタイプを識別するモデルのトレーニングで使用します。
- ラベル付けコンソールが次のように表示されます。
- [テキストを選択] をクリックします。「McWilliam Piping International Piping Company」というテキストをハイライト表示します。ラベル
supplier_name
を割り当てます。テキスト フィルタでラベル名を検索することもできます。
- 「14368 Pipeline Ave Chino, CA 91710」というテキストをハイライト表示します。ラベル
supplier_address
を割り当てます。
- 「10001」というテキストをハイライト表示します。ラベル
invoice_id
を割り当てます。
- 「2020-01-02」というテキストを強調ラベル
due_date
を割り当てます。
- [境界ボックス] に切り替えますツールです。「ナックルカプラー」というテキストをハイライト表示します。ラベル
line_item/description
を割り当てます。
- テキスト「9」をハイライト表示ラベル
line_item/quantity
を割り当てます。
- 「74.43」というテキストをハイライト表示します。ラベル
line_item/unit_price
を割り当てます。
- 「669.87」というテキストをハイライト表示します。ラベル
line_item/amount
を割り当てます。
- 次の 2 つの広告申込情報について、前の 4 つのステップを繰り返します。完了すると、次のようになります。
- 「1,419.57」というテキストをハイライト表示します。(小計の横)をクリックして、ラベル「
net_amount
」を割り当てます。
- 「113.57」というテキストをハイライト表示します。(税金の横)をクリックし、ラベル
total_tax_amount
を割り当てます。
- 「1,533.14」というテキストをハイライト表示します。(合計の横)をクリックし、ラベル
total_amount
を割り当てます。
- 「$」の 1 つをハイライト表示してくださいラベル
currency
を割り当てます。
- 完了後のラベル付きドキュメントは次のようになります。ラベルを調整するには、ドキュメントの境界ボックスをクリックするか、左側のサイドメニューでラベル名 / 値をクリックします。ラベル付けが完了したら [保存] をクリックします。
- ラベルと値の完全なリスト
ラベル名 | テキスト |
| McWilliam Piping International Piping Company |
| 14368 Pipeline Ave Chino, CA 91710 |
| 10001 |
| 2020-01-02 |
| ナックル カプラー |
| 9 |
| 74.43 |
| 669.87 |
| PVC パイプ 12 インチ |
| 7 |
| 15.90 |
| 111.30 |
| Copper パイプ |
| 7 |
| 91.20 |
| 638.40 |
| 1,419.57 |
| 113.57 |
| 1,533.14 |
| $ |
7. ドキュメントをトレーニング セットに割り当てる
データセット管理コンソールに戻りました。ラベル付きのドキュメントとラベルなしのドキュメントの数と、アクティブなラベルの数が変更されています。
- このドキュメントをトレーニング セットかテストセットのいずれかに割り当てる必要があります。ドキュメントをクリックします。
- [セットに割り当て] をクリックし、[トレーニング] をクリックします。
- データ分割の数字が変更されています。
8. 事前にラベル付けされたデータをインポートする
Document AI のアップトレーニングでは、トレーニング セットとテストセットの両方で少なくとも 10 個のドキュメントと、各セットのラベルごとに 10 個のインスタンスが必要です。
最適なパフォーマンスを得るには、各セットに 50 個以上のドキュメントと、各ラベルに 50 個のインスタンスを含めることをおすすめします。一般に、トレーニング データが多いほど精度が高くなります。
100 個のドキュメントに手動でラベルを付けると時間がかかるので、このラボでは、事前にラベル付けしたドキュメントをインポートできます。
事前にラベル付けしたドキュメント ファイルは Document.json
形式でインポートできます。この中には、プロセッサを呼び出して人間参加型(HITL)で精度を検証した結果が含まれている場合があります。
- [ドキュメントのインポート] をクリックします。
- 次の Cloud Storage パスをコピーして貼り付け、トレーニング セットに割り当てます。
cloud-samples-data/documentai/codelabs/uptraining/training
- [別のバケットを追加] をクリックします。次の Cloud Storage パスをコピーして貼り付け、テストセットに割り当てます。
cloud-samples-data/documentai/codelabs/uptraining/test
- [インポート] をクリックして、ドキュメントがインポートされるのを待ちます。処理するドキュメントの数が多いため、前回よりも処理に時間がかかります。こちらのテストでは 6 分ほどかかりました。このページを離れて、後で戻ってくることもできます。
- 完了すると、ドキュメント管理ページにドキュメントが表示されます。
9. ラベルを編集
この例で使用しているサンプル ドキュメントには、Invoice パーサーでサポートされるすべてのラベルが含まれているわけではありません。トレーニングの前に、使用していないラベルを非アクティブとしてマークする必要があります。アップトレーニングの前に、同様の手順でカスタムラベルを追加することもできます。
- 左下隅にある [ラベルを管理] をクリックします。
- ラベル管理コンソールが表示されます。
- チェックボックスと [無効] / [有効にする] ボタンを使用して、次のラベルのみを [有効] に設定します。
currency
due_date
invoice_id
line_item/amount
line_item/description
line_item/quantity
line_item/unit_price
net_amount
supplier_address
supplier_name
total_amount
total_tax_amount
- 完了すると、コンソールは次のようになります。完了したら [保存] をクリックします
- [戻る] 矢印をクリックして、データセット管理コンソールに戻ります。インスタンスがないラベルは「無効」とマークされています。
10. 省略可: 新しくインポートしたドキュメントに自動的にラベルを付ける
すでにデプロイされているプロセッサ バージョンでラベルなしドキュメントをインポートする場合は、自動ラベル付けを使用してラベル付けの時間を短縮できます。
- [トレーニング] タブで、[ドキュメントのインポート] をクリックします。
- 次の のパスをコピーして貼り付けます。このディレクトリには、ラベルのない請求書の PDF が 5 つ含まれています。[データ分割] プルダウン リストから [トレーニング] を選択します。
cloud-samples-data/documentai/Custom/Invoices/PDF_Unlabeled
- [自動ラベル付け] セクションで、[自動ラベル付けを使用したインポート] チェックボックスをオンにします。
- ドキュメントのラベル付けを行う既存のプロセッサ バージョンを選択します。
- 例:
pretrained-invoice-v1.3-2022-07-15
- [インポート] をクリックして、ドキュメントがインポートされるのを待ちます。このページを離れて、後で戻ってくることもできます。
- 完了すると、ドキュメントは [トレーニング] ページの [自動的にラベル付け] セクションに表示されます。
- ラベル付きとマークしないと、トレーニングやテストで自動ラベル付けのドキュメントを使用できません。[自動的にラベル付け] セクションに移動して、自動的にラベル付けされたドキュメントを表示します。
- 最初のドキュメントを選択して、ラベル付けのコンソールを開きます。
- ラベル、境界ボックス、値が正しいことを確認します。除外されている値にラベルを付けます。
- 完了したら、[ラベル付きとしてマーク] を選択します。
- 自動的にラベル付けされたドキュメントごとにラベルを確認します。その後、[トレーニング] ページに戻り、そのデータをトレーニングに使用します。
11. モデルをアップトレーニングする
これで、Invoice パーサーのトレーニングを開始する準備ができました。
- [新しいバージョンをトレーニング] をクリックします。
- バージョンに名前を付けます。
codelab-uptraining-test-1
のように覚えやすいものにします。ベース バージョンは、この新しいバージョンの構築のベースとなるモデル バージョンです。新しいプロセッサを使用している場合は、[Google Pretrained Next with Uptraining] のみを選択してください。
- (省略可)[ラベルの統計データを表示] を選択して、データセット内のラベルに関する指標を確認することもできます。
- [トレーニングを開始] をクリックして、アップトレーニング プロセスを開始します。データセット管理ページにリダイレクトされます。右側にトレーニングのステータスが表示されます。トレーニングには数時間かかります。このページを離れて、後で戻ってくることもできます。
- バージョン名をクリックすると、[バージョンの管理] ページに移動します。このページには、トレーニング ジョブのバージョン ID と現在のステータスが表示されます。
12. 新しいモデル バージョンをテストする
トレーニング ジョブが完了したので(こちらのテストでは 1 時間ほどかかりました)、新しいモデル バージョンをテストし、そのモデルを使って予測を取得できます。
- [バージョンの管理] ページに移動します。ここには、現在のステータスと F1 スコアが表示されています。
- このモデル バージョンを使用する前にデプロイする必要があります。右側の縦のドットをクリックして、[バージョンをデプロイ] を選択します。
- ポップアップ ウィンドウから [デプロイ] を選択します。バージョンがデプロイされるまで待ちます。完了するまでに数分かかります。デプロイされたら、このバージョンをデフォルト バージョンに設定できます。
- デプロイが完了したら、[評価] タブに移動します。次に、[Version] プルダウンをクリックして、新しく作成したバージョンを選択します。
- このページでは、ドキュメント全体の F1 スコア、適合率、再現率などの評価指標と、個々のラベルを確認できます。これらの指標の詳細については、AutoML のドキュメントをご覧ください。
- 次のリンク先から PDF ファイルをダウンロードします。これは、トレーニング セットまたはテストセットに含まれていないサンプル ドキュメントです。
- [テスト ドキュメントをアップロード] をクリックして、PDF ファイルを選択します。
- 抽出されたエンティティは次のようになります。
13. まとめ
これで、Document AI を使用して Invoice パーサーのアップトレーニングが完了しました。これで、このプロセッサを使用して、他の専用プロセッサの場合と同様に請求書を解析できるようになりました。
プロセッサのレスポンスを処理する方法については、専用プロセッサの Codelab をご覧ください。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにする手順は次のとおりです。
- Cloud コンソールで、[リソースの管理] ページに移動します。
- プロジェクト リストでプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
リソース
- Document AI Workbench のドキュメント
- ドキュメントの将来 - YouTube 再生リスト
- Document AI のドキュメント
- Document AI Python クライアント ライブラリ
- Document AI のサンプル
ライセンス
この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。