FormTrainingAsyncClient クラス

  • java.lang.Object
    • com.azure.ai.formrecognizer.training.FormTrainingAsyncClient

public final class FormTrainingAsyncClient

このクラスは、Form Recognizer Azure Cognitive Service に接続するための非同期クライアントを提供します。

このクライアントは、次の操作を行う非同期メソッドを提供します。

  1. カスタム モデルをトレーニングする: メソッドを使用して、ビジネス固有のフォームやドキュメントからデータを分析および抽出するカスタム モデルを beginTraining(String trainingFilesUrl, boolean useTrainingLabels) トレーニングします。
  2. カスタム モデルのコピー: メソッドを使用して、カスタム Form Recognizer モデルをターゲット Form Recognizer リソースにbeginCopyModelコピーします。
  3. カスタム モデルの一覧表示: メソッドと listCustomModels() メソッドをそれぞれ使用して、すべてのカスタム モデルにgetCustomModel(String modelId)関する情報を取得します。
  4. ポーリングとコールバック: サービスをポーリングして分析操作の状態をチェックしたり、分析が完了したときに通知を受信するためのコールバックを登録したりするメカニズムが含まれています。

メモ: このクライアントでは、 以下のみがサポートされます V2_1 。 新しいサービス バージョン DocumentModelAdministrationClientDocumentModelAdministrationAsyncClientを使用することをお勧めします。

API バージョン 2022-08-31 以降を使用するには、 移行ガイド を参照してください。

サービス クライアントは、開発者が Azure Form Recognizerを使用するための対話のポイントです。 FormTrainingClient は同期サービス クライアントであり、 FormTrainingAsyncClient 非同期サービス クライアントです。 このドキュメントに示す例では、認証に DefaultAzureCredential という名前の資格情報オブジェクトを使用します。これは、ローカルの開発環境や運用環境など、ほとんどのシナリオに適しています。 さらに、運用環境での認証には マネージド ID を 使用することをお勧めします。 さまざまな認証方法と、それに対応する資格情報の種類の詳細については、 Azure Identity のドキュメントを参照してください

サンプル: DefaultAzureCredential を使用して FormTrainingAsyncClient を構築する

次のコード サンプルは、'DefaultAzureCredentialBuilder' を使用して を構成する の作成 FormTrainingAsyncClientを示しています。

FormTrainingAsyncClient client = new FormTrainingClientBuilder()
     .endpoint("{endpoint}")
     .credential(new DefaultAzureCredentialBuilder().build())
     .buildAsyncClient();

さらに、クライアントの作成に使用 AzureKeyCredential する次のコード サンプルを参照してください。

FormTrainingAsyncClient formTrainingAsyncClient = new FormTrainingClientBuilder()
     .credential(new AzureKeyCredential("{key}"))
     .endpoint("{endpoint}")
     .buildAsyncClient();

メソッドの概要

修飾子と型 メソッドと説明
PollerFlux<FormRecognizerOperationResult,CustomFormModelInfo> beginCopyModel(String modelId, CopyAuthorization target)

このリソース (ソース) に格納されているカスタム モデルを、ユーザー指定のターゲット Form Recognizer リソースにコピーします。

PollerFlux<FormRecognizerOperationResult,CustomFormModelInfo> beginCopyModel(String modelId, CopyAuthorization target, Duration pollInterval)

このリソース (ソース) に格納されているカスタム モデルを、ユーザー指定のターゲット Form Recognizer リソースにコピーします。

PollerFlux<FormRecognizerOperationResult,CustomFormModel> beginCreateComposedModel(List<String> modelIds)

アカウント内の既存のモデルの指定された一覧から構成済みモデルを作成します。

PollerFlux<FormRecognizerOperationResult,CustomFormModel> beginCreateComposedModel(List<String> modelIds, CreateComposedModelOptions createComposedModelOptions)

アカウント内の既存のモデルの指定された一覧から構成済みモデルを作成します。

PollerFlux<FormRecognizerOperationResult,CustomFormModel> beginTraining(String trainingFilesUrl, boolean useTrainingLabels)

カスタム モデルを作成してトレーニングします。

PollerFlux<FormRecognizerOperationResult,CustomFormModel> beginTraining(String trainingFilesUrl, boolean useTrainingLabels, TrainingOptions trainingOptions)

カスタム モデルを作成してトレーニングします。

Mono<Void> deleteModel(String modelId)

指定したカスタム モデルを削除します。

Mono<Response<Void>> deleteModelWithResponse(String modelId)

指定したカスタム モデルを削除します。

Mono<AccountProperties> getAccountProperties()

フォーム認識エンジン アカウントのアカウント情報を取得します。

Mono<Response<AccountProperties>> getAccountPropertiesWithResponse()

Http 応答を使用して、フォーム認識エンジン アカウントのアカウント情報を取得します。

Mono<CopyAuthorization> getCopyAuthorization(String resourceId, String resourceRegion)

ターゲット Form Recognizer リソースにカスタム モデルをコピーするための承認を生成します。

Mono<Response<CopyAuthorization>> getCopyAuthorizationWithResponse(String resourceId, String resourceRegion)

ターゲット Form Recognizer リソースにカスタム モデルをコピーするための承認を生成します。

Mono<CustomFormModel> getCustomModel(String modelId)

指定したカスタム モデル ID の詳細情報を取得します。

Mono<Response<CustomFormModel>> getCustomModelWithResponse(String modelId)

Http 応答を使用して、指定したカスタム モデル ID の詳細情報を取得します。

FormRecognizerAsyncClient getFormRecognizerAsyncClient()

新しい FormRecognizerAsyncClient オブジェクトを作成します。

PagedFlux<CustomFormModelInfo> listCustomModels()

Form Recognizer アカウントの各モデルの情報を一覧表示します。

メソッドの継承元: java.lang.Object

メソッドの詳細

beginCopyModel

public PollerFlux beginCopyModel(String modelId, CopyAuthorization target)

このリソース (ソース) に格納されているカスタム モデルを、ユーザー指定のターゲット Form Recognizer リソースにコピーします。

これは、ソース Form Recognizer リソース (コピー対象のモデル) で呼び出す必要があります。 ターゲット パラメーターは、ターゲット リソースの メソッドからの出力から getCopyAuthorization(String resourceId, String resourceRegion) 指定する必要があります。

サービスは実行時間の長い操作の取り消しをサポートせず、取り消しサポートがないことを示すエラー メッセージを返します。

Code sample

String resourceId = "target-resource-Id";
 String resourceRegion = "target-resource-region";
 String copyModelId = "copy-model-Id";
 formTrainingAsyncClient.getCopyAuthorization(resourceId, resourceRegion)
     .flatMapMany(copyAuthorization -> formTrainingAsyncClient.beginCopyModel(copyModelId, copyAuthorization))
     .flatMap(AsyncPollResponse::getFinalResult)
     .subscribe(customFormModelInfo ->
         System.out.printf("Copied model has model Id: %s, model status: %s, training started on: %s,"
             + " training completed on: %s.%n",
         customFormModelInfo.getModelId(),
         customFormModelInfo.getStatus(),
         customFormModelInfo.getTrainingStartedOn(),
         customFormModelInfo.getTrainingCompletedOn()));

Parameters:

modelId - ターゲット Form Recognizer リソースにコピーするモデルのモデル識別子
target - ターゲット Form Recognizer リソースへのコピー承認。 コピー承認は、ターゲット リソースの の呼び出しから生成できます。 getCopyAuthorization(String resourceId, String resourceRegion)

Returns:

PollerFlux<T,U>コピー モデル操作が完了、失敗、または取り消されるまでポーリングする 。 完了した操作は、コピーしたモデル CustomFormModelInfoを返します。

beginCopyModel

public PollerFlux beginCopyModel(String modelId, CopyAuthorization target, Duration pollInterval)

このリソース (ソース) に格納されているカスタム モデルを、ユーザー指定のターゲット Form Recognizer リソースにコピーします。

これは、ソース Form Recognizer リソース (コピー対象のモデル) で呼び出す必要があります。 ターゲット パラメーターは、ターゲット リソースの メソッドからの出力から getCopyAuthorization(String resourceId, String resourceRegion) 指定する必要があります。

サービスは実行時間の長い操作の取り消しをサポートせず、取り消しサポートがないことを示すエラー メッセージを返します。

Code sample

String resourceId = "target-resource-Id";
 String resourceRegion = "target-resource-region";
 String copyModelId = "copy-model-Id";
 formTrainingAsyncClient.getCopyAuthorization(resourceId, resourceRegion)
     .flatMapMany(copyAuthorization -> formTrainingAsyncClient.beginCopyModel(copyModelId, copyAuthorization,
         Duration.ofSeconds(5)))
     .flatMap(AsyncPollResponse::getFinalResult)
         .subscribe(customFormModelInfo ->
             System.out.printf("Copied model has model Id: %s, model status: %s, training started on: %s,"
                 + "training completed on: %s.%n",
             customFormModelInfo.getModelId(),
             customFormModelInfo.getStatus(),
             customFormModelInfo.getTrainingStartedOn(),
             customFormModelInfo.getTrainingCompletedOn()));

Parameters:

modelId - ターゲット Form Recognizer リソースにコピーするモデルのモデル識別子
target - ターゲット Form Recognizer リソースへのコピー承認。 コピー承認は、ターゲット リソースの の呼び出しから生成できます。 getCopyAuthorization(String resourceId, String resourceRegion)
pollInterval - 操作の状態に対する各ポーリング間の期間。 何も指定しない場合は、既定値の 5 秒が使用されます。

Returns:

PollerFlux<T,U>コピー モデル操作が完了、失敗、または取り消されるまでポーリングする 。 完了した操作は、コピーしたモデル CustomFormModelInfoを返します。

beginCreateComposedModel

public PollerFlux beginCreateComposedModel(List modelIds)

アカウント内の既存のモデルの指定された一覧から構成済みモデルを作成します。

この操作は、リストが無効な、既存ではないモデル ID、または重複する ID で構成されている場合に失敗します。 この操作は現在、ラベルを使用してトレーニングされたカスタム モデルでのみサポートされています。

サービスは実行時間の長い操作の取り消しをサポートせず、取り消しサポートがないことを示すエラー メッセージを返します。

Code sample

String labeledModelId1 = "5f21ab8d-71a6-42d8-9856-ef5985c486a8";
 String labeledModelId2 = "d7b0904c-841f-46f9-a9f4-3f2273eef7c9";
 formTrainingAsyncClient.beginCreateComposedModel(Arrays.asList(labeledModelId1, labeledModelId2))
     // if training polling operation completed, retrieve the final result.
     .flatMap(AsyncPollResponse::getFinalResult)
     .subscribe(customFormModel -> {
         System.out.printf("Model Id: %s%n", customFormModel.getModelId());
         System.out.printf("Model Status: %s%n", customFormModel.getModelStatus());
         System.out.printf("Is this a composed model: %s%n",
             customFormModel.getCustomModelProperties().isComposed());
         customFormModel.getSubmodels()
             .forEach(customFormSubmodel -> customFormSubmodel.getFields()
                 .forEach((key, customFormModelField) ->
                     System.out.printf("Form type: %s Field Text: %s Field Accuracy: %f%n",
                         key, customFormModelField.getName(), customFormModelField.getAccuracy())));
     });

Parameters:

modelIds - 構成済みモデルを形成するモデル ID の一覧。

Returns:

PollerFlux<T,U>作成されたモデルの作成操作を、完了、失敗、または取り消されるまでポーリングする 。 完了した操作は、作成 CustomFormModelされた を返します。

beginCreateComposedModel

public PollerFlux beginCreateComposedModel(List modelIds, CreateComposedModelOptions createComposedModelOptions)

アカウント内の既存のモデルの指定された一覧から構成済みモデルを作成します。

この操作は、リストが無効な、既存ではないモデル ID、または重複する ID で構成されている場合に失敗します。 この操作は現在、ラベルを使用してトレーニングされたカスタム モデルでのみサポートされています。

サービスは実行時間の長い操作の取り消しをサポートせず、取り消しサポートがないことを示すエラー メッセージを返します。

Code sample

String labeledModelId1 = "5f21ab8d-71a6-42d8-9856-ef5985c486a8";
 String labeledModelId2 = "d7b0904c-841f-46f9-a9f4-3f2273eef7c9";
 formTrainingAsyncClient.beginCreateComposedModel(Arrays.asList(labeledModelId1, labeledModelId2),
     new CreateComposedModelOptions()
         .setModelName("my composed model name"))
     .setPollInterval(Duration.ofSeconds(5))
     // if training polling operation completed, retrieve the final result.
     .flatMap(AsyncPollResponse::getFinalResult)
     .subscribe(customFormModel -> {
         System.out.printf("Model Id: %s%n", customFormModel.getModelId());
         System.out.printf("Model Status: %s%n", customFormModel.getModelStatus());
         System.out.printf("Model display name: %s%n", customFormModel.getModelName());
         System.out.printf("Is this a composed model: %s%n",
             customFormModel.getCustomModelProperties().isComposed());

         customFormModel.getSubmodels()
             .forEach(customFormSubmodel -> customFormSubmodel.getFields()
                 .forEach((key, customFormModelField) ->
                     System.out.printf("Form type: %s Field Text: %s Field Accuracy: %f%n",
                         key, customFormModelField.getName(), customFormModelField.getAccuracy())));
     });

Parameters:

modelIds - 構成済みモデルを形成するモデル ID の一覧。
createComposedModelOptions - 構成済みモデルの作成時に渡す構成可能 CreateComposedModelOptions

Returns:

PollerFlux<T,U>作成されたモデルの作成操作を、完了、失敗、または取り消されるまでポーリングする 。 完了した操作は、コピーしたモデル CustomFormModelを返します。

beginTraining

public PollerFlux beginTraining(String trainingFilesUrl, boolean useTrainingLabels)

カスタム モデルを作成してトレーニングします。 モデルは、次のコンテンツの種類であるドキュメントを使用してトレーニングされます - "application/pdf"、"image/jpeg"、"image/png"、"image/tiff"。 他のコンテンツの種類は無視されます。

サービスは実行時間の長い操作の取り消しをサポートせず、取り消しサポートがないことを示すエラー メッセージを返します。

独自のトレーニング データ セットの構築については、 こちらを 参照してください。

Code sample

String trainingFilesUrl = "{SAS-URL-of-your-container-in-blob-storage}";
 boolean useTrainingLabels = true;
 formTrainingAsyncClient.beginTraining(trainingFilesUrl, useTrainingLabels)
     // if training polling operation completed, retrieve the final result.
     .flatMap(AsyncPollResponse::getFinalResult)
     .subscribe(customFormModel -> {
         System.out.printf("Model Id: %s%n", customFormModel.getModelId());
         System.out.printf("Model Status: %s%n", customFormModel.getModelStatus());
         customFormModel.getSubmodels()
             .forEach(customFormSubmodel -> customFormSubmodel.getFields()
                 .forEach((key, customFormModelField) ->
                     System.out.printf("Form type: %s Field Text: %s Field Accuracy: %f%n",
                         key, customFormModelField.getName(), customFormModelField.getAccuracy())));
     });

Parameters:

trainingFilesUrl - 外部からアクセス可能な Azure ストレージ BLOB コンテナー URI (できれば Shared Access Signature Uri) である source URL パラメーター。
useTrainingLabels - モデルをトレーニングするためのラベル付きファイルの使用を指定するブール値。

Returns:

PollerFlux<T,U>トレーニング モデル操作が完了、失敗、または取り消されるまでポーリングする 。 完了した操作は、トレーニング済 CustomFormModelみの を返します。

beginTraining

public PollerFlux beginTraining(String trainingFilesUrl, boolean useTrainingLabels, TrainingOptions trainingOptions)

カスタム モデルを作成してトレーニングします。

モデルは、'application/pdf'、'image/jpeg'、'image/png'、'image/tiff' のコンテンツ タイプのドキュメントを使用してトレーニングされます。その他の種類のコンテンツは無視されます。

独自のトレーニング データ セットの構築については、 こちらを 参照してください。

このサービスは、実行時間の長い操作の取り消しをサポートせず、取り消しサポートがないことを示すエラー メッセージを返します。

Code sample

String trainingFilesUrl = "{SAS-URL-of-your-container-in-blob-storage}";
 TrainingFileFilter trainingFileFilter = new TrainingFileFilter().setSubfoldersIncluded(true).setPrefix("Invoice");

 formTrainingAsyncClient.beginTraining(trainingFilesUrl, true,
     new TrainingOptions()
         .setTrainingFileFilter(trainingFileFilter)
         .setPollInterval(Duration.ofSeconds(5)))
     // if training polling operation completed, retrieve the final result.
     .flatMap(AsyncPollResponse::getFinalResult)
     .subscribe(customFormModel -> {
         System.out.printf("Model Id: %s%n", customFormModel.getModelId());
         System.out.printf("Model Status: %s%n", customFormModel.getModelStatus());
         customFormModel.getSubmodels().forEach(customFormSubmodel ->
             customFormSubmodel.getFields().forEach((key, customFormModelField) ->
                 System.out.printf("Form Type: %s Field Text: %s Field Accuracy: %f%n",
                     key, customFormModelField.getName(), customFormModelField.getAccuracy())));
     });

Parameters:

trainingFilesUrl - 外部からアクセス可能な Azure ストレージ BLOB コンテナー URI (できれば Shared Access Signature Uri)。
useTrainingLabels - モデルをトレーニングするためのラベル付きファイルの使用を指定するブール値。
trainingOptions - モデルのトレーニング時に渡される可能性がある追加の構成可能 TrainingOptions

Returns:

PollerFlux<T,U>トレーニング モデル操作が完了、失敗、または取り消されるまでポーリングする 。 完了した操作は、トレーニング済 CustomFormModelみの を返します。

deleteModel

public Mono deleteModel(String modelId)

指定したカスタム モデルを削除します。

Code sample

String modelId = "{model_id}";
 formTrainingAsyncClient.deleteModel(modelId)
     .subscribe(ignored -> System.out.printf("Model Id: %s is deleted%n", modelId));

Parameters:

modelId - UUID 文字列形式モデル識別子。

Returns:

空の Mono。

deleteModelWithResponse

public Mono> deleteModelWithResponse(String modelId)

指定したカスタム モデルを削除します。

Code sample

String modelId = "{model_id}";
 formTrainingAsyncClient.deleteModelWithResponse(modelId)
     .subscribe(response -> {
         System.out.printf("Response Status Code: %d.", response.getStatusCode());
         System.out.printf("Model Id: %s is deleted.%n", modelId);
     });

Parameters:

modelId - UUID 文字列形式モデル識別子。

Returns:

Response<T>状態コードと HTTP ヘッダーを含む 。

getAccountProperties

public Mono getAccountProperties()

フォーム認識エンジン アカウントのアカウント情報を取得します。

Code sample

formTrainingAsyncClient.getAccountProperties()
     .subscribe(accountProperties -> {
         System.out.printf("Max number of models that can be trained for this account: %d%n",
             accountProperties.getCustomModelLimit());
         System.out.printf("Current count of trained custom models: %d%n",
             accountProperties.getCustomModelCount());
     });

Returns:

要求されたアカウント情報の詳細。

getAccountPropertiesWithResponse

public Mono> getAccountPropertiesWithResponse()

Http 応答を使用して、フォーム認識エンジン アカウントのアカウント情報を取得します。

Code sample

formTrainingAsyncClient.getAccountPropertiesWithResponse()
     .subscribe(response -> {
         System.out.printf("Response Status Code: %d.", response.getStatusCode());
         AccountProperties accountProperties = response.getValue();
         System.out.printf("Max number of models that can be trained for this account: %d%n",
             accountProperties.getCustomModelLimit());
         System.out.printf("Current count of trained custom models: %d%n",
             accountProperties.getCustomModelCount());
     });

Returns:

Response<T>要求されたアカウント情報の詳細を格納している 。

getCopyAuthorization

public Mono getCopyAuthorization(String resourceId, String resourceRegion)

ターゲット Form Recognizer リソースにカスタム モデルをコピーするための承認を生成します。

Parameters:

resourceId - モデルのコピー先となるターゲット Form Recognizer リソースの Azure リソース ID。
resourceRegion - ターゲット Form Recognizer リソースの場所。 Cognitive Services でサポートされている有効な Azure リージョン名。 Code sample
 String resourceId = "target-resource-Id";
 String resourceRegion = "target-resource-region";
 formTrainingAsyncClient.getCopyAuthorization(resourceId, resourceRegion)
     .subscribe(copyAuthorization ->
         System.out.printf("Copy Authorization for model id: %s, access token: %s, expiration time: %s, "
                 + "target resource Id; %s, target resource region: %s%n",
             copyAuthorization.getModelId(),
             copyAuthorization.getAccessToken(),
             copyAuthorization.getExpiresOn(),
             copyAuthorization.getResourceId(),
             copyAuthorization.getResourceRegion()
         ));
 

Returns:

CopyAuthorizationリソース間でのモデルのコピーを承認するために使用できる 。

getCopyAuthorizationWithResponse

public Mono> getCopyAuthorizationWithResponse(String resourceId, String resourceRegion)

ターゲット Form Recognizer リソースにカスタム モデルをコピーするための承認を生成します。 これはターゲット リソース (モデルのコピー先) によって呼び出され、出力はターゲット パラメーターとして に beginCopyModel(String modelId, CopyAuthorization target)渡すことができます。

Parameters:

resourceId - モデルのコピー先となるターゲット Form Recognizer リソースの Azure リソース ID。
resourceRegion - ターゲット Form Recognizer リソースの場所。 Cognitive Services でサポートされている有効な Azure リージョン名。 Code sample
 String resourceId = "target-resource-Id";
 String resourceRegion = "target-resource-region";
 formTrainingAsyncClient.getCopyAuthorizationWithResponse(resourceId, resourceRegion)
     .subscribe(copyAuthorization ->
         System.out.printf("Copy Authorization response status: %s, for model id: %s, access token: %s, "
                 + "expiration time: %s, target resource Id; %s, target resource region: %s%n",
         copyAuthorization.getStatusCode(),
         copyAuthorization.getValue().getModelId(),
         copyAuthorization.getValue().getAccessToken(),
         copyAuthorization.getValue().getExpiresOn(),
         copyAuthorization.getValue().getResourceId(),
         copyAuthorization.getValue().getResourceRegion()
     ));
 

Returns:

Response<T>リソース間でのモデルのCopyAuthorizationコピーを承認するために使用できる を含む 。

getCustomModel

public Mono getCustomModel(String modelId)

指定したカスタム モデル ID の詳細情報を取得します。

Code sample

String modelId = "{model_id}";
 formTrainingAsyncClient.getCustomModel(modelId).subscribe(customFormModel -> {
     System.out.printf("Model Id: %s%n", customFormModel.getModelId());
     System.out.printf("Model Status: %s%n", customFormModel.getModelStatus());
     customFormModel.getSubmodels()
         .forEach(customFormSubmodel -> customFormSubmodel.getFields()
             .forEach((key, customFormModelField) ->
                 System.out.printf("Form Type: %s Field Text: %s Field Accuracy: %f%n",
                     key, customFormModelField.getName(), customFormModelField.getAccuracy())));

 });

Parameters:

modelId - UUID 文字列形式モデル識別子。

Returns:

指定したモデルの詳細情報。

getCustomModelWithResponse

public Mono> getCustomModelWithResponse(String modelId)

Http 応答を使用して、指定したカスタム モデル ID の詳細情報を取得します。

Code sample

String modelId = "{model_id}";
 formTrainingAsyncClient.getCustomModelWithResponse(modelId).subscribe(response -> {
     System.out.printf("Response Status Code: %d.", response.getStatusCode());
     CustomFormModel customFormModel = response.getValue();
     System.out.printf("Model Id: %s%n", customFormModel.getModelId());
     System.out.printf("Model Status: %s%n", customFormModel.getModelStatus());
     customFormModel.getSubmodels()
         .forEach(customFormSubmodel -> customFormSubmodel.getFields()
             .forEach((key, customFormModelField) ->
                 System.out.printf("Form Type: %s Field Text: %s Field Accuracy: %f%n",
                     key, customFormModelField.getName(), customFormModelField.getAccuracy())));
 });

Parameters:

modelId - UUID 文字列形式モデル識別子。

Returns:

Response<T>要求された を格納している CustomFormModel

getFormRecognizerAsyncClient

public FormRecognizerAsyncClient getFormRecognizerAsyncClient()

新しい FormRecognizerAsyncClient オブジェクトを作成します。 新しい FormTrainingAsyncClient では、 と同じ要求ポリシー パイプラインが使用されます FormTrainingAsyncClient

Returns:

新しい FormRecognizerAsyncClient オブジェクト。

listCustomModels

public PagedFlux listCustomModels()

Form Recognizer アカウントの各モデルの情報を一覧表示します。

Code sample

formTrainingAsyncClient.listCustomModels()
     .subscribe(customModel ->
         System.out.printf("Model Id: %s, Model status: %s, Created on: %s, Last updated on: %s.%n",
             customModel.getModelId(),
             customModel.getStatus(),
             customModel.getTrainingStartedOn(),
             customModel.getTrainingCompletedOn()));

Returns:

適用対象