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

Intelligent Speech Interaction:API 操作によるカスタム言語モデルの管理

最終更新日:Mar 01, 2026

カスタム言語モデルは、ドメイン固有の専門用語に対する自動音声認識 (ASR) の精度を向上させます。独自のトレーニングコーパスをアップロードすることで、標準モデルでは十分に認識されない可能性のある、医療用語、金融専門用語、製品名など、業界固有の語彙や単語パターンを ASR エンジンに学習させることができます。

このトピックでは、トレーニングデータセットの作成、カスタム言語モデルの構築、音声認識プロジェクトでの使用に向けたデプロイまで、API ライフサイクル全体を説明します。

前提条件

開始する前に、以下を確認してください。

説明

[プロジェクト設定] ページで、ASR モデルを、カスタム言語モデルを作成する際に BaseId パラメーターで指定したベースモデルと同じものに設定してください。

API エンドポイント

プロパティ
リージョン ID

ap-southeast-1

ドメイン名

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

プロトコルHTTPS
API バージョン2018-11-20

制限事項

リソース制限
アカウントあたりのカスタム言語モデル数10 (無料)
アカウントあたりのトレーニングデータセット数100
トレーニングデータセットあたりの最大サイズ10 MB
モデルあたりのトレーニングデータセット数10

トレーニング時間の目安:

  • データセットの合計サイズが 10 MB 以下:約 5 分

  • データセットの合計サイズが 10 MB 超:約 30 分

トレーニングコーパスのフォーマット要件と最適化のヒントについては、概要の「トレーニングコーパスに関する注意事項」セクションをご参照ください。

ワークフロー

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

  1. トレーニングデータの準備。 トレーニングコーパスをアクセス可能な URL (OSS ファイルの HTTP または HTTPS URL) にアップロードし、CreateAsrLmData を呼び出してトレーニングデータセットを作成します。データセットのステータスが Ready になるまでポーリングします。

  2. モデルの作成。 ベースモデル ID を指定して CreateAsrLmModel を呼び出します。次に、AddDataToAsrLmModel を呼び出して、1 つ以上のトレーニングデータセットをアタッチします。

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

トレーニングデータセットのステータス

ステータス説明
Fetching指定された URL からコーパスデータをインポート中です
FetchingFailedインポートに失敗しました。URL が有効な OSS ファイルの HTTP または HTTPS URL であることを確認してください
Readyコーパスデータは正常にインポートされました

モデルのステータス

ステータス説明
Emptyモデルは作成されましたが、まだトレーニングされていません
Trainingトレーニング中です
TrainingFailedトレーニングに失敗しました
Readyトレーニング済みですが、デプロイされていません
Deployingデプロイまたはアンデプロイ中です
Deployedデプロイ済みでアクティブです

API リファレンス

トレーニングデータセットの操作

CreateAsrLmData

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

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

パラメーター必須説明
NameStringはいトレーニングデータセットの名前
UrlStringはいトレーニングコーパスファイルの URL。OSS ファイルの HTTP URL と HTTPS URL のみがサポートされています
DescriptionStringいいえトレーニングデータセットの説明

レスポンス例:

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

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

パラメーター説明
RequestIdStringリクエスト ID
DataIdString作成されたトレーニングデータセットのID。このIDは、AddDataToAsrLmModel
説明

この操作を呼び出した後、ステータスが Ready に変わるまで GetAsrLmData でデータセットのステータスをポーリングします。Ready ステータスは、コーパスデータが正常にインポートされたことを示します。

GetAsrLmData

トレーニングデータセットの詳細をクエリします。

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

パラメーター必須説明
DataIdStringはいクエリするトレーニングデータセットの 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****"
}

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

パラメーター説明
RequestIdStringリクエスト ID
DataObjectトレーニングデータセットの詳細 (下記参照)

Data オブジェクト:

パラメーター説明
IdStringデータセット ID (CreateAsrLmData によって返される DataId と同じ)
NameStringデータセット名
DescriptionStringデータセットの説明
SizeIntegerデータセットサイズ (バイト単位)
Md5Stringデータセットの MD5 ハッシュ
UrlString作成時に指定されたコーパスファイルの URL
StatusStringデータセットのステータス。有効な値:FetchingFetchingFailedReady
CreateTimeString作成時刻
UpdateTimeString最終更新時刻
ErrorMessageStringエラーメッセージ (失敗した場合にのみ返されます)

DeleteAsrLmData

トレーニングデータセットを削除します。

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

パラメーター必須説明
DataIdStringはい削除するトレーニングデータセットの ID

レスポンス例:

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

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

ListAsrLmData

トレーニングデータセットをページネーション付きで一覧表示します。

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

パラメーター必須説明
PageNumberIntいいえページ番号。1 から始まります。デフォルト:1
PageSizeIntいいえ1 ページあたりのエントリ数。有効な値:10~100。デフォルト:10
ModelIdStringいいえモデル 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
    }
}

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

パラメーター説明
RequestIdStringリクエスト ID
PageObjectページ分割された結果 (下記参照)

Page オブジェクト:

パラメーター説明
ContentList\学習用データセットの一覧。各エントリは、Data オブジェクトの構造に従い、GetAsrLmData
TotalPagesInteger総ページ数
TotalItemsIntegerデータセットの総数
PageNumberInteger現在のページ番号
PageSizeIntegerページサイズ

モデルの操作

CreateAsrLmModel

指定されたベースモデルに基づいてカスタム言語モデルを作成します。

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

パラメーター必須説明
NameStringはいモデル名
BaseIdStringはいベースモデル ID。作成後は変更できません。Intelligent Speech Interaction コンソールで、プロジェクトの ASR モデルを同じベースモデルに設定してください
DescriptionStringいいえモデルの説明

利用可能なベースモデル:

モデル名BaseId
中国語汎用音声認識モデル (北京語、16,000 Hz)universal
中国語電話カスタマーサービス認識モデル (標準中国語、 8,000 Hz)customer_service_8k
広東語電話カスタマーサービス認識モデル (広東語、8,000 Hz)cantonese_customer_service_8k
英語音声認識モデル (英語、16,000 Hz)english

ベースモデルの完全なリストについては、Intelligent Speech Interaction コンソールの ASR モデル選択ページをご参照ください。

レスポンス例:

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

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

パラメーター説明
RequestIdStringリクエスト ID
ModelIdString作成されたモデルの ID。この ID は、TrainAsrLmModel
説明

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

GetAsrLmModel

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

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

パラメーター必須説明
ModelIdStringはいクエリするモデルの 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****"
}

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

パラメーター説明
RequestIdStringリクエスト ID
ModelObjectモデルの詳細 (下記参照)

Model オブジェクト:

パラメーター説明
IdStringモデル ID (CreateAsrLmModel によって返される ModelId と同じ)
NameStringモデル名
DescriptionStringモデルの説明
BaseIdStringベースモデル ID
SizeIntegerモデルサイズ
StatusStringモデルのステータス。有効な値:EmptyTrainingTrainingFailedReadyDeployingDeployed
CreateTimeString作成時刻
UpdateTimeString最終更新時刻
ErrorMessageStringエラーメッセージ (失敗した場合にのみ返されます)

DeleteAsrLmModel

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

重要

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

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

パラメーター必須説明
ModelIdStringはい削除するモデルの ID

レスポンス例:

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

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

ListAsrLmModel

カスタム言語モデルをページネーション付きで一覧表示します。

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

パラメーター必須説明
PageNumberIntいいえページ番号。1 から始まります。デフォルト:1
PageSizeIntいいえ1 ページあたりのエントリ数。有効な値:10~100。デフォルト:10
DataIdStringいいえデータセット 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
    }
}

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

パラメーター説明
RequestIdStringリクエスト ID
PageObjectページ分割された結果 (下記参照)

Page オブジェクト:

パラメーター説明
ContentList\モデルのリスト。各エントリは GetAsrLmModelModel
TotalPagesInteger総ページ数
TotalItemsIntegerモデルの総数
PageNumberInteger現在のページ番号
PageSizeIntegerページサイズ

トレーニングとデプロイの操作

AddDataToAsrLmModel

トレーニングデータセットをカスタム言語モデルにアタッチします。

重要

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

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

パラメーター必須説明
ModelIdStringはいターゲットモデルの ID
DataIdStringはいアタッチするデータセットの ID

レスポンス例:

{
    "RequestId": "9B232563-12C0-4242-AA27-C250E1BB****"
}
説明

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

RemoveDataFromAsrLmModel

トレーニングデータセットをカスタム言語モデルからデタッチします。

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

パラメーター必須説明
ModelIdStringはいモデルの ID
DataIdStringはいデタッチするデータセットの ID

レスポンス例:

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

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

TrainAsrLmModel

カスタム言語モデルのトレーニングを開始します。トレーニングが完了すると、システムは自動的にモデルをデプロイします。

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

パラメーター必須説明
ModelIdStringはいトレーニングするモデルの ID

レスポンス例:

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

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

説明

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

DeployAsrLmModel

カスタム言語モデルをデプロイ (公開) します。この操作は、以前にアンデプロイされたモデルを再デプロイするために使用します。

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

パラメーター必須説明
ModelIdStringはいデプロイするモデルの ID

レスポンス例:

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

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

UndeployAsrLmModel

カスタム言語モデルをアンデプロイ (非公開に) します。

重要

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

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

パラメーター必須説明
ModelIdStringはいアンデプロイするモデルの ID

レスポンス例:

{
    "RequestId": "8417BA8E-2428-41D2-A849-396A0897****"
}
説明

Deployed 状態のモデルのみアンデプロイできます。

状態別に許可される操作

次の表は、各状態でどの操作がブロックされるかを示しています。ダッシュ (-) は操作が許可されていることを意味します。NO は操作がブロックされていることを意味します。

操作FetchingFetchingFailedReady (データセット)EmptyTrainingTrainingFailedReady (モデル)DeployingDeployed
CreateAsrLmData---------
ListAsrLmData---------
GetAsrLmData---------
DeleteAsrLmDataNONO--NO----
CreateAsrLmModel---------
ListAsrLmModel---------
GetAsrLmModel---------
DeleteAsrLmModel----NO--NO-
AddDataToAsrLmModelNONO--NO--NO-
RemoveDataFromAsrLmModel----NO----
TrainAsrLmModel-------NO-
DeployAsrLmModel---NONONO-NONO
UndeployAsrLmModel---NONONONONO-

エラーコード

API 呼び出しが失敗すると、レスポンスボディにエラーコードとメッセージが含まれます。

エラーレスポンス例:

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

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

パラメーター説明
RequestIdStringリクエスト ID
HostIdString自己学習プラットフォームサーバーのエンドポイント
CodeStringエラーコード
MessageStringエラーメッセージ

エラーコード:

エラーコード説明トラブルシューティング
SLP.ASR_MODEL_ERRORカスタム言語モデルに関連するエラーが発生しましたモデルのステータスを確認し、操作をリトライしてください
SLP.NOT_FOUND指定されたリソース ID が無効ですDataId または ModelId の値を確認してください。ListAsrLmData または ListAsrLmModel を呼び出して有効な ID を取得してください
SLP.PARAMETER_ERROR無効なパラメーター値ですAPI ドキュメントと照らし合わせてリクエストパラメーターを確認してください
SLP.EXCEED_LIMITリソース数が上限に達しました現在のリソース数を ListAsrLmData または ListAsrLmModel で確認してください。未使用のリソースを削除して容量を解放してください

サンプルコード

以下の Java サンプルは、トレーニングデータセットの作成、カスタム言語モデルの構築、トレーニング、デプロイ、クリーンアップという完全なライフサイクルを示しています。

すべての例では、Alibaba Cloud SDK for Java の CommonRequest メソッドを使用して RPC リクエストを送信します。認証には 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>

クラスの概要

このサンプルには 3 つのクラスが含まれています。

クラス目的
AsrLmModelPopApiDemoメインクラス。完全なライフサイクルをオーケストレーションし、API 呼び出し中にリソースステータスをポーリングします
AsrLmDataトレーニングデータセットのデータオブジェクトと API 操作をカプセル化します
AsrLmModelカスタム言語モデルのデータオブジェクトと API 操作をカプセル化します

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 にはパラメーターが必要です: <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 = "このトレーニングデータセットは 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 = "これはサンプルの説明です。";
        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 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(文字列)。
     */
    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;
    }
}

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;
    }
}