POP API オペレーションを使用して、クライアントから訓練データセットとカスタム言語モデルを管理します。これには、データセットの作成、モデルのトレーニング、デプロイが含まれます。
前提条件
POP API オペレーションを呼び出す前に、以下の準備を完了してください。
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 行など) にわたって繰り返します。認識精度が十分に向上しない場合は、さらに繰り返しを追加してください。
まず、不明瞭な発音や低い音声品質に起因する認識問題を排除してください。
同じ発音の他のコンテンツの精度を低下させないように、認識テストを通じて訓練コーパスを調整してください。
ワークフロー
カスタム言語モデルを作成してデプロイするには、次の手順に従います。
訓練コーパスを準備し、サービスがアクセスできる OSS の HTTP または HTTPS URL にアップロードします。CreateAsrLmData を呼び出して訓練データセットを作成し、データセットのステータスが `Ready` に変わるまでポーリングします。
CreateAsrLmModel を呼び出してカスタム言語モデルを作成します。次に、AddDataToAsrLmModel を呼び出して、1 つ以上の訓練データセットをモデルに追加します。
TrainAsrLmModel を呼び出してトレーニングを開始します。トレーニングが完了すると、モデルはデフォルトで自動的にデプロイされ、ステータスが `Deployed` に変わります。
訓練データセットのステータス

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

ステータス | 説明 |
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;
}
}