すべてのプロダクト
Search
ドキュメントセンター

Intelligent Speech Interaction:POP API オペレーションを使用したカスタム言語モデルの作成

最終更新日:Oct 28, 2026

POP API オペレーションを使用して、クライアントから訓練データセットとカスタム言語モデルを管理します。これには、データセットの作成、モデルのトレーニング、デプロイが含まれます。

前提条件

POP API オペレーションを呼び出す前に、以下の準備を完了してください。

  • Intelligent Speech Interaction を有効化します。詳細については、「カスタム言語モデル」をご参照ください。

  • 認証のために AccessKey ID と AccessKey Secret を作成します。詳細については、「アカウントの準備」をご参照ください。

  • プロジェクトを作成し、その現在のモデルを、カスタム言語モデルのトレーニングに使用するベースモデルに設定します。

API エンドポイント

POP API オペレーションを呼び出すには、以下のエンドポイント情報を使用します。

プロパティ

値

リージョン ID

ap-southeast-1

ドメイン名

nls-slp.ap-southeast-1.aliyuncs.com

プロトコル

HTTPS

API バージョン

2018-11-20

訓練コーパス

制限事項

  • Intelligent Speech Interaction の無料版または有料版をご利用のアカウントは、この機能を無料で利用できます。

  • トレーニングデータとして、ドメイン固有のテキストを使用します。訓練テキストが認識対象の音声に近いほど、改善効果は大きくなります。

  • コーパスは、バイトオーダーマーク (BOM) なしの UTF-8 でエンコードされたテキストファイルとして保存します。ファイルサイズは 10 MB を超えることはできません。

  • 各アカウントは最大 10 個のモデルを作成でき、各モデルは最大 10 個のデータセットを使用できます。

  • 各アカウントは最大 100 個のデータセットを作成できます。各データセットは 10 MB を超えることはできません。

  • 強調したい文またはキーワードを 1 行に 1 つ配置します。各行は 500 文字を超えることはできません。

  • 数字は発音どおりに記述します。たとえば、「58.9元」は「五十八点九元」という中国語の単語に置き換えます。

  • 5 つ以上の単語を含む文を少なくとも 1 つ含める必要があります。

  • 句読点は、コンマ、ピリオド、疑問符、感嘆符のみを使用し、各文を句読点で終える必要があります。タイトルマークや引用符など、その他の句読点は削除してください。

  • 合計データセットサイズが 10 MB 未満の場合、通常 5 分以内に有効になります。より大きなデータセットは、通常 30 分以内に有効になります。

最適化の推奨事項

正確に認識されないキーワードについては、そのキーワードまたはそれを含む文を複数行 (10 行など) にわたって繰り返します。認識精度が十分に向上しない場合は、さらに繰り返しを追加してください。

説明
  • まず、不明瞭な発音や低い音声品質に起因する認識問題を排除してください。

  • 同じ発音の他のコンテンツの精度を低下させないように、認識テストを通じて訓練コーパスを調整してください。

ワークフロー

カスタム言語モデルを作成してデプロイするには、次の手順に従います。

  1. 訓練コーパスを準備し、サービスがアクセスできる OSS の HTTP または HTTPS URL にアップロードします。CreateAsrLmData を呼び出して訓練データセットを作成し、データセットのステータスが `Ready` に変わるまでポーリングします。

  2. CreateAsrLmModel を呼び出してカスタム言語モデルを作成します。次に、AddDataToAsrLmModel を呼び出して、1 つ以上の訓練データセットをモデルに追加します。

  3. TrainAsrLmModel を呼び出してトレーニングを開始します。トレーニングが完了すると、モデルはデフォルトで自動的にデプロイされ、ステータスが `Deployed` に変わります。

訓練データセットのステータス

Training dataset state transitions.

ステータス

説明

Fetching

指定された URL からコーパスデータをインポートしています

FetchingFailed

インポートに失敗しました。URL が OSS ファイルの有効な HTTP または HTTPS URL であることを確認してください

Ready

コーパスデータが正常にインポートされました

カスタム言語モデルのステータス

Custom linguistic model state transitions during creation, training, deployment, and undeployment.

ステータス

説明

Empty

モデルは作成されましたが、まだトレーニングされていません

Training

トレーニング中です

TrainingFailed

トレーニングに失敗しました

Ready

トレーニング済みですが、デプロイされていません

Deploying

デプロイまたはデプロイ解除が進行中です

Deployed

デプロイされ、アクティブです

API リファレンス

訓練データセットは訓練コーパスであり、コンソールでアップロードされたコーパスに相当します。すべての成功したオペレーションは、HTTP ステータスコード 200 を返します。

訓練データセットのオペレーション

CreateAsrLmData

指定された URL から訓練コーパスをインポートして、訓練データセットを作成します。

リクエストパラメーター:

パラメーター

タイプ

必須

説明

Name

String

はい

訓練データセットの名前

Url

String

はい

訓練コーパスファイルの URL。OSS ファイルの HTTP URL と HTTPS URL のみがサポートされています

Description

String

いいえ

訓練データセットの説明

レスポンス例:

{
    "RequestId": "C71B7CAA-18D6-4012-AC3D-425BA1CB****",
    "DataId": "9934e10f19044282825508cbc7c8****"
}

レスポンスパラメーター:

パラメーター

タイプ

説明

RequestId

String

リクエスト ID

DataId

String

作成された訓練データセットの ID。この ID は、`AddDataToAsrLmModel` などの後続のオペレーションで使用します

説明

このオペレーションを呼び出した後、ステータスが `Ready` に変わるまで `GetAsrLmData` でデータセットのステータスをポーリングします。`Ready` ステータスは、コーパスのインポートが成功したことを示します。

GetAsrLmData

訓練データセットの詳細をクエリします。

リクエストパラメーター:

パラメーター

タイプ

必須

説明

DataId

String

はい

クエリする訓練データセットの ID

レスポンス例:

{
    "Data": {
        "Name": "TestTrainingDataset",
        "Status": "Ready",
        "Md5": "38fc072ac60796a84ce1a0b13f78****",
        "Description": "The training dataset is created by using the API.",
        "Url": "https://aliyun-nls.oss-ap-southeast-1.aliyuncs.com/asr/fileASR/SLP/SLPTest.txt",
        "CreateTime": "2019-02-11 14:40:35",
        "UpdateTime": "2019-02-11 14:40:35",
        "Id": "9934e10f19044282825508cbc7c8****",
        "Size": 5991
    },
    "RequestId": "C88130E6-F3B5-4F3E-9BF5-9C617DDD****"
}

レスポンスパラメーター:

パラメーター

タイプ

説明

RequestId

String

リクエスト ID

Data

Object

訓練データセットの詳細 (下記参照)

Data オブジェクト:

パラメーター

タイプ

説明

Id

String

データセット ID (`CreateAsrLmData` によって返される `DataId` と同じ)

Name

String

データセット名

Description

String

データセットの説明

Size

Integer

データセットのサイズ (バイト単位)

Md5

String

データセットの MD5 ハッシュ

Url

String

作成時に指定されたコーパスファイルの URL

Status

String

データセットのステータス。有効な値:`Fetching`、`FetchingFailed`、`Ready`

CreateTime

String

作成時刻

UpdateTime

String

最終更新時刻

ErrorMessage

String

エラーメッセージ (失敗した場合にのみ返されます)

DeleteAsrLmData

訓練データセットを削除します。

リクエストパラメーター:

パラメーター

タイプ

必須

説明

DataId

String

はい

削除する訓練データセットの ID

レスポンス例:

{
    "RequestId": "7130914d32a3441db06747523675d9ff"
}
説明

`Ready` 状態のデータセットのみ削除できます。

ListAsrLmData

訓練データセットをページごとにリスト表示します。

リクエストパラメーター:

パラメーター

タイプ

必須

説明

PageNumber

Int

いいえ

ページ番号。1 から始まります。デフォルト:1

PageSize

Int

いいえ

ページあたりのエントリ数。有効な値:10~100。デフォルト:10

ModelId

String

いいえ

モデル ID でフィルタリングして、指定されたモデルにアタッチされたデータセットのみをリストします。省略した場合、アクセス可能なすべてのデータセットが返されます

レスポンス例:

{
    "RequestId": "7130914d32a3441db06747523675d9ff",
    "Page": {
        "Content": [{
            "Id": "1b64bee9994749f2a67eadac6379****",
            "Name": "SampleTrainingDataset",
            "Description": "This is a sample training dataset.",
            "Size": 7777404,
            "Md5": "39326cf690e384735355a385ec1e****",
            "Url": "slp/tmp/demo-data-lm.txt",
            "Status": "Ready",
            "CreateTime": "2018-10-31 17:20:39",
            "UpdateTime": "2018-10-31 17:20:39"
        }],
        "TotalPages": 1,
        "TotalItems": 1,
        "PageNumber": 1,
        "PageSize": 10
    }
}

レスポンスパラメーター:

パラメーター

タイプ

説明

RequestId

String

リクエスト ID

Page

Object

ページ分割された結果 (下記参照)

Page オブジェクト:

パラメーター

タイプ

説明

Content

List<Data>

訓練データセットのリスト。各エントリは `GetAsrLmData` の `Data` オブジェクト構造に従います

TotalPages

Integer

総ページ数

TotalItems

Integer

データセットの総数

PageNumber

Integer

現在のページ番号

PageSize

Integer

ページサイズ

カスタム言語モデルのオペレーション

CreateAsrLmModel

カスタム言語モデルを作成します。

リクエストパラメーター:

パラメーター

タイプ

必須

説明

Name

String

はい

モデル名

BaseId

String

はい

ベースモデル ID。作成後に変更することはできません。Intelligent Speech Interaction コンソールで、プロジェクトの ASR モデルを同じベースモデルに設定します

Description

String

いいえ

モデルの説明

以下のベースモデルは、カスタム言語モデルのトレーニングをサポートしています。モデルの詳細は、コンソールのプロジェクト設定で確認できます。

モデル

BaseId

一般中国語音声認識モデル (中国語 (北京語)、16 kHz)

universal

コールセンターおよび品質検査モデル (中国語 (北京語)、8 kHz)

customer_service_8k

コールセンターおよび品質検査モデル (中国語 (広東語)、8 kHz)

cantonese_customer_service_8k

英語音声認識モデル (英語、16 kHz)

english

レスポンス例:

{
    "ModelId": "dbb6b71ff3e54b45a600ee5157a2****",
    "RequestId": "945C59DF-B3D9-4F22-808E-76752FF3****"
}

レスポンスパラメーター:

パラメーター

タイプ

説明

RequestId

String

リクエスト ID

ModelId

String

作成されたモデルの ID。この ID は、`TrainAsrLmModel` などの後続のオペレーションで使用します

説明

新しく作成されたモデルは `Empty` 状態で開始されます。

GetAsrLmModel

カスタム言語モデルの詳細をクエリします。

リクエストパラメーター:

パラメーター

タイプ

必須

説明

ModelId

String

はい

クエリするモデルの ID

レスポンス例:

{
    "Model": {
        "Name": "TestLinguisticModel",
        "Status": "Empty",
        "Description": "This is a sample description.",
        "CreateTime": "2019-02-12 10:11:57",
        "UpdateTime": "2019-02-12 10:11:57",
        "Id": "dbb6b71ff3e54b45a600ee5157a2****",
        "BaseId": "common",
        "Size": 0
    },
    "RequestId": "6CE24FF7-B7C8-4B9F-B0EB-FE4AF20B****"
}

レスポンスパラメーター:

パラメーター

タイプ

説明

RequestId

String

リクエスト ID

Model

Object

モデルの詳細 (下記参照)

Model オブジェクト:

パラメーター

タイプ

説明

Id

String

モデル ID (`CreateAsrLmModel` によって返される `ModelId` と同じ)

Name

String

モデル名

Description

String

モデルの説明

BaseId

String

ベースモデル ID

Size

Integer

モデルサイズ

Status

String

モデルのステータス。有効な値:`Empty`、`Training`、`TrainingFailed`、`Ready`、`Deploying`、`Deployed`

CreateTime

String

作成時刻

UpdateTime

String

最終更新時刻

ErrorMessage

String

エラーメッセージ (失敗した場合にのみ返されます)

DeleteAsrLmModel

カスタム言語モデルを削除します。

リクエストパラメーター:

パラメーター

タイプ

必須

説明

ModelId

String

はい

削除するモデルの ID

レスポンス例:

{
    "RequestId": "7130914d32a3441db06747523675d9ff"
}
重要

モデルを削除する前に、どのアプリケーションでも使用されていないことを確認してください。削除されたモデルは直ちに非アクティブになります。

説明

`Training` または `Deploying` 状態のモデルは削除できません。

ListAsrLmModel

カスタム言語モデルをページごとにリスト表示します。

リクエストパラメーター:

パラメーター

タイプ

必須

説明

PageNumber

Int

いいえ

ページ番号。1 から始まります。デフォルト:1

PageSize

Int

いいえ

ページあたりのエントリ数。有効な値:10~100。デフォルト:10

DataId

String

いいえ

データセット ID でフィルタリングして、指定されたデータセットを使用するモデルのみをリストします。省略した場合、アクセス可能なすべてのモデルが返されます

レスポンス例:

{
    "RequestId": "7130914d32a3441db06747523675****",
    "Page": {
        "Content": [{
            "Id": "demo-model",
            "Name": "SampleLinguisticModel",
            "Description": "This is a test model.",
            "Size": 0,
            "Status": "Empty",
            "CreateTime": "2018-11-01 17:05:21",
            "UpdateTime": "2018-11-01 17:05:21",
            "BaseId": "common"
        }],
        "TotalPages": 1,
        "TotalItems": 1,
        "PageNumber": 1,
        "PageSize": 10
    }
}

レスポンスパラメーター:

パラメーター

タイプ

説明

RequestId

String

リクエスト ID

Page

Object

ページ分割された結果 (下記参照)

Page オブジェクト:

パラメーター

タイプ

説明

Content

List<Model>

モデルのリスト。各エントリは `GetAsrLmModel` の `Model` オブジェクト構造に従います

TotalPages

Integer

総ページ数

TotalItems

Integer

モデルの総数

PageNumber

Integer

現在のページ番号

PageSize

Integer

ページサイズ

モデルのトレーニングとデプロイ

AddDataToAsrLmModel

訓練データセットをカスタム言語モデルに追加します。

リクエストパラメーター:

パラメーター

タイプ

必須

説明

ModelId

String

はい

ターゲットモデルの ID

DataId

String

はい

アタッチするデータセットの ID

レスポンス例:

{
    "RequestId": "9B232563-12C0-4242-AA27-C250E1BB****"
}
重要

同じデータセットを同じモデルに 2 回追加することはできません。

説明

データセットは `Ready` 状態である必要があります。モデルは `Training` または `Deploying` 状態であってはなりません。

RemoveDataFromAsrLmModel

訓練データセットをカスタム言語モデルから削除します。

リクエストパラメーター:

パラメーター

タイプ

必須

説明

ModelId

String

はい

モデルの ID

DataId

String

はい

デタッチするデータセットの ID

レスポンス例:

{
    "RequestId": "7130914d32a3441db06747523675****"
}
説明

`Training` または `Deploying` 状態のモデルからデータセットを削除することはできません。

TrainAsrLmModel

カスタム言語モデルのトレーニングを開始します。

リクエストパラメーター:

パラメーター

タイプ

必須

説明

ModelId

String

はい

トレーニングするモデルの ID

レスポンス例:

{
    "RequestId": "3D922A91-68AA-4260-AFE4-C429832F****"
}
説明

`Deploying` 状態のモデルはトレーニングできません。

トレーニングが正常に完了すると、モデルのステータスは自動的に `Deployed` に移行します。別途 `DeployAsrLmModel` を呼び出す必要はありません。

DeployAsrLmModel

カスタム言語モデルをデプロイします。

リクエストパラメーター:

パラメーター

タイプ

必須

説明

ModelId

String

はい

デプロイするモデルの ID

レスポンス例:

{
    "RequestId": "D9DDA978-5D68-45A4-B840-E4BC45C7****"
}
説明

`Ready` 状態のモデルのみデプロイできます。

UndeployAsrLmModel

カスタム言語モデルのデプロイを解除します。

リクエストパラメーター:

パラメーター

タイプ

必須

説明

ModelId

String

はい

デプロイを解除するモデルの ID

レスポンス例:

{
    "RequestId": "8417BA8E-2428-41D2-A849-396A0897****"
}
重要

モデルのデプロイを解除する前に、どのアプリケーションでも使用されていないことを確認してください。デプロイが解除されたモデルは直ちに非アクティブになります。

説明

`Deployed` 状態のモデルのみデプロイを解除できます。

状態別の実行可能な操作

NO は、現在の状態では操作が許可されていないことを示します。ハイフン (-) は、操作が許可されていることを示します。

オペレーション

Fetching

FetchingFailed

Ready (データセット)

Empty

Training

TrainingFailed

Ready (モデル)

Deploying

Deployed

CreateAsrLmData

-

-

-

-

-

-

-

-

-

ListAsrLmData

-

-

-

-

-

-

-

-

-

GetAsrLmData

-

-

-

-

-

-

-

-

-

DeleteAsrLmData

NO

NO

-

-

NO

-

-

-

-

CreateAsrLmModel

-

-

-

-

-

-

-

-

-

ListAsrLmModel

-

-

-

-

-

-

-

-

-

GetAsrLmModel

-

-

-

-

-

-

-

-

-

DeleteAsrLmModel

-

-

-

-

NO

-

-

NO

-

AddDataToAsrLmModel

NO

NO

-

-

NO

-

-

NO

-

RemoveDataFromAsrLmModel

-

-

-

-

NO

-

-

NO

-

TrainAsrLmModel

-

-

-

-

-

-

-

NO

-

DeployAsrLmModel

-

-

-

NO

NO

NO

-

NO

NO

UndeployAsrLmModel

-

-

-

NO

NO

NO

NO

NO

-

エラーコード

オペレーションが失敗した場合、レスポンスボディにはエラーコードとエラーメッセージが含まれます。これらを使用してリクエストのトラブルシューティングを行ってください。

エラーコード

説明

SLP.ASR_MODEL_ERROR

カスタム言語モデルに関連するエラー。

SLP.NOT_FOUND

指定された ID が無効で、リソースが見つかりません。

SLP.PARAMETER_ERROR

リソースの作成時に無効なパラメーターが指定されました。

SLP.EXCEED_LIMIT

リソース制限を超えたため、新しいリソースを作成できません。

次の例では、`NOT_FOUND` エラーが返されます。

{
    "RequestId": "E70F51F6-23E3-4681-B954-ABF32B89****",
    "HostId": "nls-slp.ap-southeast-1.aliyuncs.com",
    "Code": "SLP.NOT_FOUND",
    "Message": "Model not found!"
}

レスポンスフィールド:

パラメーター

タイプ

説明

RequestId

String

リクエスト ID

HostId

String

自己学習プラットフォームサーバーのエンドポイント

Code

String

エラーコード

Message

String

エラーメッセージ

サンプルコード

以下の Java サンプルは、訓練データセットの作成、モデルの作成、トレーニング、デプロイ、およびリソースのクリーンアップという完全なライフサイクルを示しています。Alibaba Cloud SDK for Java の `CommonRequest` を使用して、RPC スタイルの POP API オペレーションを呼び出します。

オペレーションを呼び出す前に、認証のために AccessKey ID と AccessKey Secret を作成します。詳細については、「アカウントの準備」をご参照ください。

依存関係

以下の Maven 依存関係を追加します。Alibaba Cloud SDK for Java コアライブラリのバージョン 3.5.0 から 3.7.x を使用してください。

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>3.7.1</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>

AsrLmModelPopApiDemo

import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.profile.DefaultProfile;
public class AsrLmModelPopApiDemo {
    private static String REGION = "ap-southeast-1";
    private static final String STATUS_FETCHING = "Fetching";
    private static final String STATUS_FETCHINGFAILED = "FetchingFailed";
    private static final String STATUS_READY = "Ready";
    private static final String STATUS_EMPTY = "Empty";
    private static final String STATUS_TRAINING = "Training";
    private static final String STATUS_TRAININGFAILED = "TrainingFailed";
    private static final String STATUS_DEPLOYING = "Deploying";
    private static final String STATUS_DEPLOYED = "Deployed";
    private static IAcsClient client;
    private AsrLmData asrLmData;
    private AsrLmModel asrLmModel;
    public AsrLmModelPopApiDemo(String akId, String akSecret) {
        DefaultProfile profile = DefaultProfile.getProfile(REGION, akId, akSecret);
        client = new DefaultAcsClient(profile);
        asrLmData = new AsrLmData(client);
        asrLmModel = new AsrLmModel(client);
    }
    /******************************* 訓練データセットの管理 *******************************/
    // 訓練データセットを作成します。
    public String createAsrLmData(String name, String fileUrl, String description) {
        String dataId = asrLmData.createAsrLmData(name, fileUrl, description);
        if (null == dataId) {
            return dataId;
        }
        // データセットが Ready ステータスになるまでポーリングします。
        while (true) {
            AsrLmData.LmData data = asrLmData.getAsrLmData(dataId);
            if (null == data) {
                dataId = null;
                break;
            }
            if (data.Status.equals(STATUS_FETCHING)) {
                System.out.println("コーパスデータをインポートしています。データセット ID: " + dataId);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            else if (data.Status.equals(STATUS_FETCHINGFAILED)) {
                System.out.println("コーパスのインポートに失敗しました。データセット ID: " + dataId);
                asrLmData.deleteAsrLmData(dataId);
                dataId = null;
                break;
            }
            else if (data.Status.equals(STATUS_READY)) {
                System.out.println("コーパスがインポートされました。データセット ID: " + dataId);
                break;
            }
        }
        return dataId;
    }
    // 訓練データセットをクエリします。
    public AsrLmData.LmData getAsrLmData(String dataId) {
        return asrLmData.getAsrLmData(dataId);
    }
    // 訓練データセットを削除します。
    public boolean deleteAsrLmData(String dataId) {
        AsrLmData.LmData data = asrLmData.getAsrLmData(dataId);
        if (null == data) {
            return false;
        }
        if (!data.Status.equals(STATUS_READY)) {
            System.out.println("現在のステータスではデータセットを削除できません: " + data.Status);
            return false;
        }
        return asrLmData.deleteAsrLmData(dataId);
    }
    // 訓練データセットをリストします。
    public AsrLmData.LmDataPage listAsrLmData() {
        return asrLmData.listAsrLmData();
    }
    /******************************* カスタム言語モデルの管理 *******************************/
    // カスタム言語モデルを作成します。
    public String createAsrLmModel(String name, String baseId, String description) {
        String modelId = asrLmModel.createAsrLmModel(name, baseId, description);
        if (null == modelId) {
            return modelId;
        }
        // モデルが Empty ステータスになることを確認します。
        while (true) {
            AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
            if (null == model) {
                modelId = null;
                break;
            }
            if (model.Status.equals(STATUS_EMPTY)) {
                break;
            }
            else {
                System.out.println("モデルの作成に失敗しました。モデル ID: " + modelId);
                asrLmModel.deleteAsrLmModel(modelId);
                modelId = null;
                break;
            }
        }
        return modelId;
    }
    // カスタム言語モデルをクエリします。
    public AsrLmModel.LmModel getAsrLmModel(String modelId) {
        return asrLmModel.getAsrLmModel(modelId);
    }
    // カスタム言語モデルを削除します。
    public boolean deleteAsrLmModel(String modelId) {
        AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
        if (null == model) {
            return false;
        }
        if (model.Status.equals(STATUS_TRAINING) || model.Status.equals(STATUS_DEPLOYING)) {
            System.out.println("現在のステータスではモデルを削除できません: " + model.Status);
            return false;
        }
        return asrLmModel.deleteAsrLmModel(modelId);
    }
    // カスタム言語モデルをリストします。
    public AsrLmModel.LmModelPage listAsrLmModel() {
        return asrLmModel.listAsrLmModel();
    }
    /**************************** トレーニングとデプロイ ***************************/
    // 訓練データセットをカスタム言語モデルに追加します。
    public boolean addDataToAsrLmModel(String dataId, String modelId) {
        AsrLmData.LmData data = asrLmData.getAsrLmData(dataId);
        if (null == data) {
            return false;
        }
        if (!data.Status.equals(STATUS_READY)) {
            System.out.println("データセットの準備ができていません: " + data.Status);
            return false;
        }
        AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
        if (null == model) {
            return false;
        }
        if (model.Status.equals(STATUS_TRAINING) || model.Status.equals(STATUS_DEPLOYING)) {
            System.out.println("モデルがこのステータスの間はデータセットを追加できません: " + model.Status);
            return false;
        }
        return asrLmModel.addDataToAsrLmModel(dataId, modelId);
    }
    // 訓練データセットをカスタム言語モデルから削除します。
    public boolean removeDataFromAsrLmModel(String dataId, String modelId) {
        // データセットがこのモデルにアタッチされていることを確認します。
        boolean isAdded = false;
        AsrLmData.LmDataPage page = asrLmData.listAsrLmData(1, 10, modelId);
        if (page != null && page.Content.size() > 0) {
            for (int i = 0; i < page.Content.size(); i++) {
                if (dataId.equals(page.Content.get(i).Id)) {
                    isAdded = true;
                    break;
                }
            }
        }
        if (!isAdded) {
            System.out.println("データセットはこのモデルにアタッチされていません。");
            return false;
        }
        // モデルのステータスを確認します。
        AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
        if (null == model) {
            return false;
        }
        if (model.Status.equals(STATUS_TRAINING)) {
            System.out.println("モデルのトレーニング中はデータセットを削除できません。");
            return false;
        }
        return asrLmModel.removeDataFromAsrLmModel(dataId, modelId);
    }
    // カスタム言語モデルをトレーニングします。
    public boolean trainAsrLmModel(String modelId) {
        AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
        if (null == model) {
            return false;
        }
        if (model.Status.equals(STATUS_DEPLOYING)) {
            System.out.println("現在のステータスではモデルをトレーニングできません: " + model.Status);
            return false;
        }
        boolean isTrain = asrLmModel.trainAsrLmModel(modelId);
        if (!isTrain) {
            return isTrain;
        }
        // モデルが Deployed ステータスになるまでポーリングします。
        while (true) {
            model = asrLmModel.getAsrLmModel(modelId);
            if (null == model) {
                isTrain = false;
                break;
            }
            if (model.Status.equals(STATUS_TRAINING) || model.Status.equals(STATUS_DEPLOYING)) {
                if (model.Status.equals(STATUS_TRAINING)) {
                    System.out.println("トレーニング中です。モデル ID: " + modelId);
                }
                else {
                    System.out.println("デプロイ中です。モデル ID: " + modelId);
                }
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            else if (model.Status.equals(STATUS_TRAININGFAILED)) {
                System.out.println("トレーニングに失敗しました。モデル ID: " + modelId);
                isTrain = false;
                break;
            }
            else if (model.Status.equals(STATUS_DEPLOYED)) {
                System.out.println("トレーニングが完了し、モデルがデプロイされました。モデル ID: " + modelId);
                isTrain = true;
                break;
            }
            else {
                System.out.println("予期しないモデルステータスです: " + model.Status);
                isTrain = false;
                break;
            }
        }
        return isTrain;
    }
    // カスタム言語モデルをデプロイします。
    public boolean deployAsrLmModel(String modelId) {
        AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
        if (null == model) {
            return false;
        }
        if (!model.Status.equals(STATUS_READY)) {
            System.out.println("現在のステータスではモデルをデプロイできません: " + model.Status);
            return false;
        }
        boolean isDeployed = asrLmModel.deployAsrLmModel(modelId);
        if (!isDeployed) {
            return isDeployed;
        }
        // モデルが Deployed ステータスになるまでポーリングします。
        while (true) {
            model = asrLmModel.getAsrLmModel(modelId);
            if (null == model) {
                isDeployed = false;
                break;
            }
            if (model.Status.equals(STATUS_DEPLOYING)) {
                System.out.println("デプロイ中です。モデル ID: " + modelId);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            else if (model.Status.equals(STATUS_DEPLOYED)) {
                System.out.println("モデルがデプロイされました。モデル ID: " + modelId);
                isDeployed = true;
                break;
            }
            else {
                System.out.println("現在のステータスではモデルをデプロイできません: " + model.Status);
                isDeployed = false;
                break;
            }
        }
        return isDeployed;
    }
    // カスタム言語モデルのデプロイを解除します。
    public boolean undeployAsrLmModel(String modelId) {
        AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
        if (null == model) {
            return false;
        }
        if (!model.Status.equals(STATUS_DEPLOYED)) {
            System.out.println("現在のステータスではモデルのデプロイを解除できません: " + model.Status);
            return false;
        }
        boolean isUnDeployed = asrLmModel.undeployAsrLmModel(modelId);
        if (!isUnDeployed) {
            return isUnDeployed;
        }
        // モデルが Ready ステータスになるまでポーリングします。
        while (true) {
            model = asrLmModel.getAsrLmModel(modelId);
            if (null == model) {
                isUnDeployed = false;
                break;
            }
            if (model.Status.equals(STATUS_DEPLOYING)) {
                System.out.println("デプロイを解除中です。モデル ID: " + modelId);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            else if (model.Status.equals(STATUS_READY)) {
                System.out.println("モデルのデプロイが解除されました。モデル ID: " + modelId);
                isUnDeployed = true;
                break;
            }
            else {
                System.out.println("現在のステータスではモデルのデプロイを解除できません: " + model.Status);
                isUnDeployed = false;
                break;
            }
        }
        return isUnDeployed;
    }
    public static void main(String[] args) {
        if (args.length < 2) {
            System.err.println("AsrLmModelPopApiDemo need params: <AccessKey Id> <AccessKey Secret>");
            return;
        }
        String accessKeyId = args[0];
        String accessKeySecret = args[1];
        AsrLmModelPopApiDemo demo = new AsrLmModelPopApiDemo(accessKeyId, accessKeySecret);
        /******************************* 訓練データセットの管理 *******************************/
        String dataId;
        // 訓練データセットを作成します。
        String name = "TestTrainingDataset";
        String fileUrl = "https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/SLP/SLPTest.txt";
        String description = "The training dataset is created by using the API.";
        dataId = demo.createAsrLmData(name, fileUrl, description);
        if (dataId != null) {
            System.out.println("データセットが作成されました。ID: " + dataId);
        }
        else {
            System.out.println("データセットの作成に失敗しました。");
        }
        // 訓練データセットをクエリします。
        AsrLmData.LmData data = demo.getAsrLmData(dataId);
        if (data != null) {
            System.out.println("データセット情報: " + JSONObject.toJSONString(data));
        }
        else {
            System.out.println("データセットのクエリに失敗しました。");
        }
        // 訓練データセットをリストします。
        AsrLmData.LmDataPage page = demo.listAsrLmData();
        if (page != null) {
            System.out.println("データセット: " + JSONObject.toJSONString(page));
        }
        else {
            System.out.println("データセットのリスト表示に失敗しました。");
            return;
        }
        /************************** カスタム言語モデルの管理 *********************************/
        String modelId;
        // 汎用中国語ベースモデルを使用してカスタム言語モデルを作成します。
        String modelName = "TestLinguisticModel";
        String baseId = "universal";
        String modelDescription = "This is a sample description.";
        modelId = demo.createAsrLmModel(modelName, baseId, modelDescription);
        if (modelId != null) {
            System.out.println("モデルが作成されました。ID: " + modelId);
        }
        else {
            System.out.println("モデルの作成に失敗しました。");
        }
        // カスタム言語モデルをクエリします。
        AsrLmModel.LmModel model = demo.getAsrLmModel(modelId);
        if (model != null) {
            System.out.println("モデル情報: " + JSONObject.toJSONString(model));
        }
        else {
            System.out.println("モデルのクエリに失敗しました。");
        }
        // カスタム言語モデルをリストします。
        AsrLmModel.LmModelPage modelPage = demo.listAsrLmModel();
        if (modelPage != null) {
            System.out.println("モデル: " + JSONObject.toJSONString(modelPage));
        }
        else {
            System.out.println("モデルのリスト表示に失敗しました。");
        }
        /******************************* トレーニングとデプロイ *******************************/
        // 訓練データセットをモデルに追加します。
        boolean isAdded = demo.addDataToAsrLmModel(dataId, modelId);
        if (isAdded) {
            System.out.println("データセットがモデルに追加されました。");
        }
        else {
            System.out.println("データセットのモデルへの追加に失敗しました。");
        }
        // モデルをトレーニングします (成功すると自動的にデプロイされます)。
        boolean isTrained = demo.trainAsrLmModel(modelId);
        if (isTrained) {
            System.out.println("モデルがトレーニングされ、デプロイされました。");
        }
        else {
            System.out.println("モデルのトレーニングに失敗しました。");
        }
        // モデルのデプロイを解除します。
        boolean isUnDeployed = demo.undeployAsrLmModel(modelId);
        if (isUnDeployed) {
            System.out.println("モデルのデプロイが解除されました。");
        }
        else {
            System.out.println("モデルのデプロイ解除に失敗しました。");
        }
        // モデルを再デプロイします。
        boolean isDeployed = demo.deployAsrLmModel(modelId);
        if (isDeployed) {
            System.out.println("モデルがデプロイされました。");
        }
        else {
            System.out.println("モデルのデプロイに失敗しました。");
        }
        /***************************** クリーンアップ *****************************/
        // 1. モデルのデプロイを解除します。
        isUnDeployed = demo.undeployAsrLmModel(modelId);
        if (isUnDeployed) {
            System.out.println("モデルのデプロイが解除されました。");
        }
        else {
            System.out.println("モデルのデプロイ解除に失敗しました。");
        }
        // 2. モデルからデータセットを削除します。
        boolean isRemoved = demo.removeDataFromAsrLmModel(dataId, modelId);
        if (isRemoved) {
            System.out.println("データセットがモデルから削除されました。");
        }
        else {
            System.out.println("モデルからのデータセットの削除に失敗しました。");
        }
        // 3. データセットを削除します。
        boolean isDeletedData = demo.deleteAsrLmData(dataId);
        if (isDeletedData) {
            System.out.println("データセットが削除されました。");
        }
        else {
            System.out.println("データセットの削除に失敗しました。");
        }
        // 4. モデルを削除します。
        boolean isDeletedModel = demo.deleteAsrLmModel(modelId);
        if (isDeletedModel) {
            System.out.println("モデルが削除されました。");
        }
        else {
            System.out.println("モデルの削除に失敗しました。");
        }
    }
}

AsrLmData

import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import java.util.ArrayList;
import java.util.List;
public class AsrLmData {
    public static class LmData {
        public String Name;
        public String Status;
        public String Description;
        public String Url;
        public String CreateTime;
        public String UpdateTime;
        public String Id;
        public String ErrorMessage;   // 失敗した場合にのみ返されます。
        public int Size;
    }
    public static class LmDataPage {
        public int PageNumber;
        public int PageSize;
        public int TotalItems;
        public int TotalPages;
        public List<LmData> Content = new ArrayList<LmData>();
    }
    private static final String VERSION = "2018-11-20";
    private static final String DOMAIN = "nls-slp.ap-southeast-1.aliyuncs.com";
    private static ProtocolType PROTOCOL_TYPE = ProtocolType.HTTPS;
    private static final String KEY_NAME = "Name";
    private static final String KEY_URL = "Url";
    private static final String KEY_DESCRIPTION = "Description";
    private static final String KEY_DATA_ID = "DataId";
    private static final String KEY_DATA = "Data";
    private static final String KEY_PAGE = "Page";
    private static final String KEY_PAGE_NUMBER = "PageNumber";
    private static final String KEY_PAGE_SIZE = "PageSize";
    private static final String KEY_MODEL_ID = "ModelId";
    private IAcsClient client;
    private CommonRequest newRequest(String action) {
        CommonRequest request = new CommonRequest();
        request.setDomain(DOMAIN);
        request.setProtocol(PROTOCOL_TYPE);
        request.setVersion(VERSION);
        request.setMethod(MethodType.POST);
        request.setAction(action);
        return request;
    }
    public AsrLmData(IAcsClient client) {
        this.client = client;
    }
    /**
     * 訓練データセットを作成します。
     * @param name: 必須。データセット名。
     * @param fileUrl: 必須。訓練コーパスファイルの URL。
     * @param description: オプション。データセットの説明。
     * @return: データセット ID (String)。
     */
    public String createAsrLmData(String name, String fileUrl, String description) {
        CommonRequest request = newRequest("CreateAsrLmData");
        request.putBodyParameter(KEY_NAME, name);
        request.putBodyParameter(KEY_URL, fileUrl);
        request.putBodyParameter(KEY_DESCRIPTION, description);
        CommonResponse response = null;
        try {
            response = client.getCommonResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println("CreateAsrLmData: " + response.getData());
        if (response == null || response.getHttpStatus() != 200) {
            System.out.println(response.getData());
            System.out.println("データセットの作成に失敗しました。HTTP ステータス: " + response.getHttpStatus());
            return null;
        }
        JSONObject result = JSONObject.parseObject(response.getData());
        String dataId = result.getString(KEY_DATA_ID);
        return dataId;
    }
    /**
     * 訓練データセットをクエリします。
     * @param dataId: データセット ID。
     * @return LmData: データセットの詳細。
     */
    public LmData getAsrLmData(String dataId) {
        CommonRequest request = newRequest("GetAsrLmData");
        request.putBodyParameter(KEY_DATA_ID, dataId);
        CommonResponse response = null;
        try {
            response = client.getCommonResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println("GetAsrLmData: " + response.getData());
        if (response == null || response.getHttpStatus() != 200) {
            System.out.println(response.getData());
            System.out.println("データセットのクエリに失敗しました。HTTP ステータス: " + response.getHttpStatus());
            return null;
        }
        JSONObject result = JSONObject.parseObject(response.getData());
        String dataJson = result.getString(KEY_DATA);
        LmData data = JSONObject.parseObject(dataJson, LmData.class);
        return data;
    }
    /**
     * 訓練データセットを削除します。
     * @param dataId: 必須。データセット ID。
     * @return: 正常に削除された場合は true。
     */
    public boolean deleteAsrLmData(String dataId) {
        CommonRequest request = newRequest("DeleteAsrLmData");
        request.putBodyParameter(KEY_DATA_ID, dataId);
        CommonResponse response = null;
        try {
            response = client.getCommonResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println("DeleteAsrLmData: " + response.getData());
        if (response == null || response.getHttpStatus() != 200) {
            System.out.println(response.getData());
            System.out.println("データセットの削除に失敗しました。HTTP ステータス: " + response.getHttpStatus());
            return false;
        }
        return true;
    }
    /**
     * ページネーション付きで訓練データセットをリストします。
     * @param pageNumber: オプション。ページ番号 (デフォルト: 1)。
     * @param pageSize: オプション。ページサイズ、10-100 (デフォルト: 10)。
     * @param modelId: オプション。モデル ID でフィルタリング。
     * @return: ページ分割されたデータセットリスト。
     */
    public LmDataPage listAsrLmData(int pageNumber, int pageSize, String modelId) {
        CommonRequest request = newRequest("ListAsrLmData");
        request.putBodyParameter(KEY_PAGE_NUMBER, pageNumber);
        request.putBodyParameter(KEY_PAGE_SIZE, pageSize);
        request.putBodyParameter(KEY_MODEL_ID, modelId);
        CommonResponse response = null;
        try {
            response = client.getCommonResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println("ListAsrLmData: " + response.getData());
        if (response == null || response.getHttpStatus() != 200) {
            System.out.println(response.getData());
            System.out.println("データセットのリスト表示に失敗しました。HTTP ステータス: " + response.getHttpStatus());
            return null;
        }
        JSONObject result = JSONObject.parseObject(response.getData());
        String pageJson = result.getString(KEY_PAGE);
        LmDataPage page = JSONObject.parseObject(pageJson, LmDataPage.class);
        return page;
    }
    public LmDataPage listAsrLmData() {
        return listAsrLmData(1, 10, null);
    }
}

AsrLmModel

import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import java.util.ArrayList;
import java.util.List;
public class AsrLmModel {
    public static class LmModel {
        public String Name;
        public String Status;
        public String Description;
        public String CreateTime;
        public String UpdateTime;
        public String Id;
        public String BaseId;
        public String ErrorMessage;   // 失敗した場合にのみ返されます。
        public int Size;
    }
    public static class LmModelPage {
        public int PageNumber;
        public int PageSize;
        public int TotalItems;
        public int TotalPages;
        public List<LmModel> Content = new ArrayList<LmModel>();
    }
    private static final String VERSION = "2018-11-20";
    private static final String DOMAIN = "nls-slp.ap-southeast-1.aliyuncs.com";
    private static ProtocolType PROTOCOL_TYPE = ProtocolType.HTTPS;
    private static final String KEY_NAME = "Name";
    private static final String KEY_BASE_ID = "BaseId";
    private static final String KEY_DESCRIPTION = "Description";
    private static final String KEY_MODEL_ID = "ModelId";
    private static final String KEY_MODEL = "Model";
    private static final String KEY_PAGE = "Page";
    private static final String KEY_PAGE_NUMBER = "PageNumber";
    private static final String KEY_PAGE_SIZE = "PageSize";
    private static final String KEY_DATA_ID = "DataId";
    private IAcsClient client;
    private CommonRequest newRequest(String action) {
        CommonRequest request = new CommonRequest();
        request.setDomain(DOMAIN);
        request.setProtocol(PROTOCOL_TYPE);
        request.setVersion(VERSION);
        request.setMethod(MethodType.POST);
        request.setAction(action);
        return request;
    }
    public AsrLmModel(IAcsClient client) {
        this.client = client;
    }
    /**
     * カスタム言語モデルを作成します。
     * @param name: 必須。モデル名。
     * @param baseId: 必須。ベースモデル ID (作成後に変更できません)。
     * @param description: オプション。モデルの説明。
     * @return: モデル ID (String)。
     */
    public String createAsrLmModel(String name, String baseId, String description) {
        CommonRequest request = newRequest("CreateAsrLmModel");
        request.putBodyParameter(KEY_NAME, name);
        request.putBodyParameter(KEY_BASE_ID, baseId);
        request.putBodyParameter(KEY_DESCRIPTION, description);
        CommonResponse response = null;
        try {
            response = client.getCommonResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println("CreateAsrLmModel: " + response.getData());
        if (response == null || response.getHttpStatus() != 200) {
            System.out.println(response.getData());
            System.out.println("モデルの作成に失敗しました。HTTP ステータス: " + response.getHttpStatus());
            return null;
        }
        JSONObject result = JSONObject.parseObject(response.getData());
        String modelId = result.getString(KEY_MODEL_ID);
        return modelId;
    }
    /**
     * カスタム言語モデルをクエリします。
     * @param modelId: モデル ID。
     * @return: モデルの詳細。
     */
    public LmModel getAsrLmModel(String modelId) {
        CommonRequest request = newRequest("GetAsrLmModel");
        request.putBodyParameter(KEY_MODEL_ID, modelId);
        CommonResponse response = null;
        try {
            response = client.getCommonResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println("GetAsrLmModel: " + response.getData());
        if (response == null || response.getHttpStatus() != 200) {
            System.out.println(response.getData());
            System.out.println("モデルのクエリに失敗しました。HTTP ステータス: " + response.getHttpStatus());
            return null;
        }
        JSONObject result = JSONObject.parseObject(response.getData());
        String modelJson = result.getString(KEY_MODEL);
        LmModel model = JSONObject.parseObject(modelJson, LmModel.class);
        return model;
    }
    /**
     * カスタム言語モデルを削除します。
     * @param modelId: モデル ID。
     * @return: 正常に削除された場合は true。
     */
    public boolean deleteAsrLmModel(String modelId) {
        CommonRequest request = newRequest("DeleteAsrLmModel");
        request.putBodyParameter(KEY_MODEL_ID, modelId);
        CommonResponse response = null;
        try {
            response = client.getCommonResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println("DeleteAsrLmModel: " + response.getData());
        if (response == null || response.getHttpStatus() != 200) {
            System.out.println(response.getData());
            System.out.println("モデルの削除に失敗しました。HTTP ステータス: " + response.getHttpStatus());
            return false;
        }
        return true;
    }
    /**
     * ページネーション付きでカスタム言語モデルをリストします。
     * @param pageNumber: オプション。ページ番号 (デフォルト: 1)。
     * @param pageSize: オプション。ページサイズ、10-100 (デフォルト: 10)。
     * @param dataId: オプション。データセット ID でフィルタリング。
     * @return: ページ分割されたモデルリスト。
     */
    public LmModelPage listAsrLmModel(int pageNumber, int pageSize, String dataId) {
        CommonRequest request = newRequest("ListAsrLmModel");
        request.putBodyParameter(KEY_PAGE_NUMBER, pageNumber);
        request.putBodyParameter(KEY_PAGE_SIZE, pageSize);
        request.putBodyParameter(KEY_DATA_ID, dataId);
        CommonResponse response = null;
        try {
            response = client.getCommonResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println("ListAsrLmModel: " + response.getData());
        if (response == null || response.getHttpStatus() != 200) {
            System.out.println(response.getData());
            System.out.println("モデルのリスト表示に失敗しました。HTTP ステータス: " + response.getHttpStatus());
            return null;
        }
        JSONObject result = JSONObject.parseObject(response.getData());
        String pageJson = result.getString(KEY_PAGE);
        LmModelPage page = JSONObject.parseObject(pageJson, LmModelPage.class);
        return page;
    }
    public LmModelPage listAsrLmModel() {
        return listAsrLmModel(1, 10, null);
    }
    /**
     * 訓練データセットをカスタム言語モデルに追加します。
     * @param dataId: データセット ID。
     * @param modelId: モデル ID。
     * @return: 正常に追加された場合は true。
     */
    public boolean addDataToAsrLmModel(String dataId, String modelId) {
        CommonRequest request = newRequest("AddDataToAsrLmModel");
        request.putBodyParameter(KEY_DATA_ID, dataId);
        request.putBodyParameter(KEY_MODEL_ID, modelId);
        CommonResponse response = null;
        try {
            response = client.getCommonResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println("AddDataToAsrLmModel: " + response.getData());
        if (response == null || response.getHttpStatus() != 200) {
            System.out.println(response.getData());
            System.out.println("データセットのモデルへの追加に失敗しました。HTTP ステータス: " + response.getHttpStatus());
            return false;
        }
        return true;
    }
    /**
     * 訓練データセットをカスタム言語モデルから削除します。
     * @param dataId: データセット ID。
     * @param modelId: モデル ID。
     * @return: 正常に削除された場合は true。
     */
    public boolean removeDataFromAsrLmModel(String dataId, String modelId) {
        CommonRequest request = newRequest("RemoveDataFromAsrLmModel");
        request.putBodyParameter(KEY_DATA_ID, dataId);
        request.putBodyParameter(KEY_MODEL_ID, modelId);
        CommonResponse response = null;
        try {
            response = client.getCommonResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println("RemoveDataFromAsrLmModel: " + response.getData());
        if (response == null || response.getHttpStatus() != 200) {
            System.out.println(response.getData());
            System.out.println("モデルからのデータセットの削除に失敗しました。HTTP ステータス: " + response.getHttpStatus());
            return false;
        }
        return true;
    }
    /**
     * カスタム言語モデルをトレーニングします。
     * @param modelId: モデル ID。
     * @return: トレーニングが正常に開始された場合は true。
     */
    public boolean trainAsrLmModel(String modelId) {
        CommonRequest request = newRequest("TrainAsrLmModel");
        request.putBodyParameter(KEY_MODEL_ID, modelId);
        CommonResponse response = null;
        try {
            response = client.getCommonResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println("TrainAsrLmModel: " + response.getData());
        if (response == null || response.getHttpStatus() != 200) {
            System.out.println(response.getData());
            System.out.println("モデルのトレーニングに失敗しました。HTTP ステータス: " + response.getHttpStatus());
            return false;
        }
        return true;
    }
    /**
     * カスタム言語モデルをデプロイします。
     * @param modelId: モデル ID。
     * @return: デプロイが正常に開始された場合は true。
     */
    public boolean deployAsrLmModel(String modelId) {
        CommonRequest request = newRequest("DeployAsrLmModel");
        request.putBodyParameter(KEY_MODEL_ID, modelId);
        CommonResponse response = null;
        try {
            response = client.getCommonResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println("DeployAsrLmModel: " + response.getData());
        if (response == null || response.getHttpStatus() != 200) {
            System.out.println(response.getData());
            System.out.println("モデルのデプロイに失敗しました。HTTP ステータス: " + response.getHttpStatus());
            return false;
        }
        return true;
    }
    /**
     * カスタム言語モデルのデプロイを解除します。
     * @param modelId: モデル ID。
     * @return: デプロイ解除が正常に開始された場合は true。
     */
    public boolean undeployAsrLmModel(String modelId) {
        CommonRequest request = newRequest("UndeployAsrLmModel");
        request.putBodyParameter(KEY_MODEL_ID, modelId);
        CommonResponse response = null;
        try {
            response = client.getCommonResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
        System.out.println("UndeployAsrLmModel: " + response.getData());
        if (response == null || response.getHttpStatus() != 200) {
            System.out.println(response.getData());
            System.out.println("モデルのデプロイ解除に失敗しました。HTTP ステータス: " + response.getHttpStatus());
            return false;
        }
        return true;
    }
}