プロセッサ バージョンのトレーニング、アップトレーニング、評価を行うには、ドキュメントのラベル付きデータセットが必要です。
このページでは、データセットの作成方法、ドキュメントのインポート方法、スキーマの定義方法について説明します。 インポートしたドキュメントにラベルを付ける方法については、ドキュメントにラベルを付けるをご覧ください。
このページは、トレーニング、アップトレーニング、評価をサポートするプロセッサをすでに 作成していることを前提としています。プロセッサがサポートされている場合は、コンソールに [トレーニング]タブが表示されます。 Google Cloud
データセットのストレージ オプション
データセットを保存するには、次の 2 つのオプションから選択できます。
- Google が管理
- Cloud Storage のカスタム ロケーション
特別な要件(CMEK 対応フォルダのセットにドキュメントを保持するなど)がない限り、Google 管理のストレージ オプションを使用することをおすすめします。 データセットを作成したら、プロセッサのデータセット ストレージ オプションを変更することはできません。
Cloud Storage のカスタム ロケーションのフォルダまたはサブフォルダは、空の状態から開始し、厳密に読み取り専用として扱う必要があります。内容を手動で変更すると、データセットが使用できなくなり、データが失われる可能性があります。Google 管理のストレージ オプションにはこのリスクはありません。
ストレージ ロケーションをプロビジョニングする手順は次のとおりです。
Google が管理するストレージ(推奨)
新しいプロセッサを作成するときに、詳細オプションを表示します。

デフォルトのラジオボタン グループ オプションを [Google が管理] のストレージのままにします。

[作成] を選択します。

データセットが正常に作成され、データセットのロケーションが [Google が管理するロケーション] であることを確認します。

カスタム ストレージ オプション
詳細オプションをオンまたはオフに設定します。

[独自のストレージ ロケーションを指定する] を選択します。

入力コンポーネントから Cloud Storage フォルダを選択します。

[作成] を選択します。

Dataset API オペレーション
このサンプルでは、
processors.updateDataset
メソッドを使用してデータセットを作成する方法を示します。データセット リソースはプロセッサ内のシングルトン リソースです。つまり、リソース作成 RPC はありません。代わりに、updateDataset RPC を使用して設定できます。Document AI には、データセット ドキュメントをユーザーが指定した Cloud Storage バケットに保存するか、Google に自動的に管理させるかを選択するオプションがあります。
リクエストのデータを使用する前に、次のように置き換えます。
LOCATION: Your processor location
PROJECT_ID: Your Google Cloud project ID
PROCESSOR_ID The ID of your custom processor
GCS_URI: Your Cloud Storage URI where dataset documents are stored
指定されたバケット
次の手順に沿って、指定した Cloud Storage バケットを使用してデータセット リクエストを作成します。
HTTP メソッド
PATCH https://LOCATION-documentai.googleapis.com/v1beta3/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/datasetリクエスト JSON:
{
"name":"projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/dataset"
"gcs_managed_config" {
"gcs_prefix" {
"gcs_uri_prefix": "GCS_URI"
}
}
"spanner_indexing_config" {}
}Google が管理
Google が管理するデータセットを作成する場合は、次の情報を更新します。
HTTP メソッド
PATCH https://LOCATION-documentai.googleapis.com/v1beta3/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/datasetリクエスト JSON:
{
"name":"projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/dataset"
"unmanaged_dataset_config": {}
"spanner_indexing_config": {}
}リクエストを送信するには、Curl を使用します。
リクエスト本文を request.json という名前のファイルに保存します。次のコマンドを実行します。
CURL
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-documentai.googleapis.com/v1beta3/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/dataset"次のような JSON レスポンスが返されます。
{
"name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID"
}ドキュメントのインポート
新しく作成したデータセットは空です。ドキュメントを追加するには、[ドキュメントのインポート] を選択し、データセットに追加するドキュメントを含む 1 つ以上の Cloud Storage フォルダを選択します。
Cloud Storage が別の Google Cloud プロジェクトにある場合は、Document AI がそのロケーションからファイルを読み取れるようにアクセス権を付与してください。具体的には、
ストレージ オブジェクト閲覧者 ロールを
Document AI のコアサービス エージェント
service-{project-id}@gcp-sa-prod-dai-core.iam.gserviceaccount.com に付与する必要があります。詳細については、
サービス エージェントをご覧ください。

次に、次のいずれかの割り当てオプションを選択します。
- トレーニング: トレーニング セットに割り当てます。
- テスト: テストセットに割り当てます。
- 自動分割: トレーニング セットとテストセットのドキュメントをランダムにシャッフルします。
- 未割り当て: トレーニングや評価では使用されません。後で手動で割り当てることができます。
割り当ては後でいつでも変更できます。
[インポート] を選択すると、Document AI はサポートされているすべての
ファイル形式と JSON
Document ファイルを
データセットにインポートします。JSON Document
ファイルの場合、Document AI はドキュメントをインポートし、その entities
をラベル インスタンスに変換します。
Document AI は、インポート フォルダを変更したり、インポート完了後にフォルダから読み取ったりしません。
ページ上部の [アクティビティ] を選択して [アクティビティ] パネルを開きます。このパネルには、正常にインポートされたファイルとインポートに失敗したファイルが一覧表示されます。
プロセッサの既存のバージョンがある場合は、[ドキュメントのインポート] ダイアログで [自動ラベル付けを使用したインポート] チェックボックスをオンにできます。ドキュメントは、インポート時に以前のプロセッサを使用して自動的にラベル付けされます。 ラベル付きとマークしないと、自動ラベル付けされたドキュメントでトレーニングやアップトレーニングを行ったり、テストセットで使用したりすることはできません。自動ラベル付けされたドキュメントをインポートしたら、手動で確認して修正します。次に、[保存] を選択して修正を保存し、ドキュメントをラベル付きとしてマークします。その後、必要に応じてドキュメントを割り当てることができます。自動ラベル付けをご覧ください。
ドキュメントのインポート RPC
このサンプルでは、dataset.importDocuments メソッドを使用してドキュメントをデータセットにインポートする方法を示します。
リクエストのデータを使用する前に、次のように置き換えます。
LOCATION: Your processor location
PROJECT_ID: Your Google Cloud project ID
PROCESSOR_ID: The ID of your custom processor
GCS_URI: Your Cloud Storage URI where dataset documents are stored
DATASET_TYPE: The dataset type to which you want to add documents. The value should be either `DATASET_SPLIT_TRAIN` or `DATASET_SPLIT_TEST`.
TRAINING_SPLIT_RATIO: The ratio of documents which you want to autoassign to the training set.
トレーニング データセットまたはテストデータセット
トレーニング データセットまたはテストデータセットにドキュメントを追加する場合は、次の操作を行います。
HTTP メソッド
POST https://LOCATION-documentai.googleapis.com/v1beta3/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/dataset/importDocumentsリクエスト JSON:
{
"batch_documents_import_configs": {
"dataset_split": DATASET_TYPE
"batch_input_config": {
"gcs_prefix": {
"gcs_uri_prefix": GCS_URI
}
}
}
}トレーニング データセットとテストデータセット
トレーニング データセットとテストデータセット間でドキュメントを自動分割する場合は、次の操作を行います。
HTTP メソッド
POST https://LOCATION-documentai.googleapis.com/v1beta3/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/dataset/importDocumentsリクエスト JSON:
{
"batch_documents_import_configs": {
"auto_split_config": {
"training_split_ratio": TRAINING_SPLIT_RATIO
},
"batch_input_config": {
"gcs_prefix": {
"gcs_uri_prefix": "gs://test_sbindal/pdfs-1-page/"
}
}
}
}リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
CURL
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-documentai.googleapis.com/v1beta3/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/dataset/importDocuments"次のような JSON レスポンスが返されます。
{
"name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID"
}ドキュメントの削除 RPC
このサンプルでは、dataset.batchDeleteDocuments メソッドを使用してデータセットからドキュメントを削除する方法を示します。
リクエストのデータを使用する前に、次のように置き換えます。
LOCATION: Your processor location
PROJECT_ID: Your Google Cloud project ID
PROCESSOR_ID: The ID of your custom processor
DOCUMENT_ID: The document ID blob returned by <code>ImportDocuments</code> request
ドキュメントを削除する
HTTP メソッド
POST https://LOCATION-documentai.googleapis.com/v1beta3/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/dataset/batchDeleteDocumentsリクエスト JSON:
{
"dataset_documents": {
"individual_document_ids": {
"document_ids": DOCUMENT_ID
}
}
}リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
CURL
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-documentai.googleapis.com/v1beta3/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/dataset/batchDeleteDocuments"次のような JSON レスポンスが返されます。
{
"name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID"
}ドキュメントをトレーニング セットまたはテストセットに割り当てる
[データの分割] でドキュメントを選択し、 トレーニング セット、テストセット、未割り当てのいずれかに割り当てます。

テストセットに関するおすすめの方法
テストセットの品質によって、評価の品質が決まります。
テストセットは、プロセッサ開発サイクルの開始時に作成し、ロックして、プロセッサの品質を長期にわたって追跡できるようにする必要があります。
テストセットには、ドキュメント タイプごとに少なくとも 100 個のドキュメントを用意することをおすすめします。テストセットが、 開発中のモデルで使用するドキュメントのタイプを代表していることを確認することが重要です。
テストセットは、頻度に関して本番環境のトラフィックを代表するものである必要があります。たとえば、W2 フォームを処理していて、70% が 2020 年、30% が 2019 年のフォームであると予想される場合、テストセットの約 70% は W2 2020 ドキュメントで構成する必要があります。このようなテストセットの構成により、プロセッサのパフォーマンスを評価する際に、各ドキュメント サブタイプに適切な重要度が与えられます。 また、国際的なフォームから個人の名前を抽出する場合は、テストセットにターゲットとするすべての国のフォームが含まれていることを確認してください。
トレーニング セットに関するおすすめの方法
テストセットにすでに含まれているドキュメントは、トレーニング セットに含めないでください。
テストセットとは異なり、最終的なトレーニング セットは、ドキュメントの多様性や頻度に関して、顧客の使用状況を厳密に表す必要はありません。 ラベルによっては、他のラベルよりもトレーニングが難しい場合があります。そのため、トレーニング セットをこれらのラベルに偏らせることで、パフォーマンスが向上する可能性があります。
最初は、どのラベルが難しいかを判断する方法はありません。テストセットで説明したのと同じアプローチを使用して、ランダムにサンプリングされた小さな初期トレーニング セット から始める必要があります。この初期トレーニング セットには、アノテーションを付ける予定のドキュメントの総数の約 10% が含まれている必要があります。その後、プロセッサの品質を繰り返し評価し(特定のエラーパターンを探す)、トレーニング データを追加できます。
プロセッサ スキーマを定義する
データセットを作成したら、ドキュメントをインポートする前または後にプロセッサ スキーマを定義できます。
プロセッサの schema は、ドキュメントから抽出するラベル(名前や住所など)を定義します。
[スキーマを編集] を選択し、必要に応じてラベルを作成、編集、有効化、無効化します。
完了したら、必ず [保存] を選択してください。

スキーマラベルの管理に関する注意事項:
スキーマラベルを作成したら、スキーマラベルの名前を編集することはできません。
スキーマラベルは、トレーニング済みのプロセッサ バージョンがない場合にのみ編集または削除できます。編集できるのは、データ型とオカレンス タイプのみです。
ラベルを無効にしても、予測には影響しません。処理リクエストを送信すると、プロセッサ バージョンはトレーニング時に有効だったすべてのラベルを抽出します。
データスキーマを取得する
このサンプルでは、データセットの
getDatasetSchema
を使用して現在のスキーマを取得する方法を示します。DatasetSchema はシングルトン リソースであり、データセット リソースを作成すると自動的に作成されます。
リクエストのデータを使用する前に、次のように置き換えます。
LOCATION: Your processor location
PROJECT_ID: Your Google Cloud project ID
PROCESSOR_ID: The ID of your custom processor
データスキーマを取得する
HTTP メソッド
GET https://LOCATION-documentai.googleapis.com/v1beta3/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/dataset/datasetSchemaCURL
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-documentai.googleapis.com/v1beta3/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/dataset/datasetSchema"次のような JSON レスポンスが返されます。
{
"name": "projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/dataset/datasetSchema",
"documentSchema": {
"entityTypes": [
{
"name": $SCHEMA_NAME,
"baseTypes": [
"document"
],
"properties": [
{
"name": $LABEL_NAME,
"valueType": $VALUE_TYPE,
"occurrenceType": $OCCURRENCE_TYPE,
"propertyMetadata": {}
},
],
"entityTypeMetadata": {}
}
]
}
}ドキュメント スキーマを更新する
このサンプルでは、
dataset.updateDatasetSchema
を使用して現在のスキーマを更新する方法を示します。次の例は、データセット スキーマを 1 つのラベルに更新するコマンドを示しています。既存のラベルを削除または更新するのではなく、新しいラベルを追加する場合は、最初に getDatasetSchema を呼び出して、そのレスポンスで適切な変更を加えます。
リクエストのデータを使用する前に、次のように置き換えます。
LOCATION: Your processor location
PROJECT_ID: Your Google Cloud project ID
PROCESSOR_ID: The ID of your custom processor
LABEL_NAME: The label name which you want to add
LABEL_DESCRIPTION: Describe what the label represents
DATA_TYPE: The type of the label. You can specify this as string, number, currency, money, datetime, address, boolean.
OCCURRENCE_TYPE: Describes the number of times this label is expected. Pick an enum value.
スキーマの更新
HTTP メソッド
PATCH https://LOCATION-documentai.googleapis.com/v1beta3/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/dataset/datasetSchemaリクエスト JSON:
{
"document_schema": {
"entityTypes": [
{
"name": $SCHEMA_NAME,
"baseTypes": [
"document"
],
"properties": [
{
"name": LABEL_NAME,
"description": LABEL_DESCRIPTION,
"valueType": DATA_TYPE,
"occurrenceType": OCCURRENCE_TYPE,
"propertyMetadata": {}
},
],
"entityTypeMetadata": {}
}
]
}
}リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
CURL
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-documentai.googleapis.com/v1beta3/projects/PROJECT_ID/locations/LOCATION/processors/PROCESSOR_ID/dataset/datasetSchema"ラベル属性を選択する
データの種類
Plain text: 文字列値。Number: 数値(整数または浮動小数点)。Money: 金額。ラベル付けの際は、通貨記号を含めないでください。- エンティティが抽出されると、
google.type.Moneyに正規化されます。
- エンティティが抽出されると、
Currency: 通貨記号。Datetime: 日付または時刻の値。- エンティティが抽出されると、
ISO 8601テキスト形式に正規化されます。
- エンティティが抽出されると、
Address- ロケーション アドレス。- エンティティが抽出されると、正規化され、EKG で強化されます。
Checkbox-trueまたはfalseのブール値。Signature-normalized_value.signature_valueのtrueまたはfalseのブール値。署名が存在するかどうかを示します。deriveメソッドをサポートしています。mention_text-has_signedのDetectedまたは空の""ブール値。署名が存在するかどうかを示します。deriveメソッドをサポートしています。normalized_value.text-has_signedのDetectedまたは空の""ブール値。署名が存在するかどうかを示します。deriveメソッドをサポートしています。normalized_value.boolean_valueは入力されません。
メソッド
- エンティティが
extractedの場合、textAnchor、type、mentionText、 およびpageAnchorフィールド が入力されます。 - エンティティが
derivedの場合、派生値がドキュメント テキストに存在しないことがあります。textAnchorフィールドとpageAnchor.pageRefs[].bounding_polyフィールドは入力されません。
オカレンス
特定のタイプのドキュメントにエンティティが常に表示されることが予想される場合は、REQUIRED を選択します。そのような予想がない場合は、OPTIONAL を選択します。
同じドキュメントに同じ
値が複数回表示される場合でも、エンティティに 1 つの値が含まれることが予想される場合は、ONCEを選択します。エンティティに複数の値が含まれることが予想される場合は、MULTIPLE を選択します。
親ラベルと子ラベル
親子ラベル(表形式エンティティとも呼ばれます)は、テーブル内のデータにラベルを付けるために使用されます。次の表には 3 行と 4 列が含まれています。

親子ラベルを使用して、このようなテーブルを定義できます。この例では、親ラベル line-item はテーブルの行を定義します。
親ラベルを作成する
[スキーマを編集] ページで、[ラベルを作成] を選択します。
[これは親ラベルです] チェックボックスをオンにして、他の情報を入力します。 テーブル内のすべての行をキャプチャするために繰り返せるように、親ラベルのオカレンスは
optional_multipleまたはrequire_multipleである必要があります。[保存] を選択します。

親ラベルが [スキーマを編集] ページに表示され、その横に [子ラベルを追加] オプションが表示されます。
子ラベルを作成するには
[スキーマを編集] ページの親ラベルの横にある [子ラベルを追加] を選択します。
子ラベルの情報を入力します。
[保存] を選択します。
追加する子ラベルごとに繰り返します。
子ラベルは、[スキーマを編集] ページの親ラベルの下にインデントされて表示されます。

親子ラベルはプレビュー機能であり、テーブルでのみサポートされています。 ネストの深さは 1 に制限されています。つまり、子エンティティに他の子エンティティを含めることはできません。
ラベル付きドキュメントからスキーマラベルを作成する
事前にラベル付けされた Document JSON ファイルをインポートして、スキーマラベルを自動的に作成します。
Document のインポートが進行中の場合、新しく追加された
スキーマラベルがスキーマ エディタに追加されます。[スキーマを編集] を選択して、新しいスキーマラベルのデータ型とオカレンス タイプを確認または変更します。確認したら、スキーマラベルを選択して [有効にする] を選択します。
サンプル データセット
Document AI Workbench の使用を開始する際に役立つように、複数のドキュメント タイプのラベル付きとラベルなしのサンプル
Document JSON ファイルを含む
パブリック Cloud Storage バケットにデータセットが用意されています。
これらは、ドキュメント タイプに応じて、アップトレーニングまたはカスタム エクストラクタに使用できます。
gs://cloud-samples-data/documentai/Custom/
gs://cloud-samples-data/documentai/Custom/1040/
gs://cloud-samples-data/documentai/Custom/Invoices/
gs://cloud-samples-data/documentai/Custom/Patents/
gs://cloud-samples-data/documentai/Custom/Procurement-Splitter/
gs://cloud-samples-data/documentai/Custom/W2-redacted/
gs://cloud-samples-data/documentai/Custom/W2/
gs://cloud-samples-data/documentai/Custom/W9/