カスタム言語モデルは、ドメイン固有の専門用語に対する自動音声認識 (ASR) の精度を向上させます。独自のトレーニングコーパスをアップロードすることで、標準モデルでは十分に認識されない可能性のある、医療用語、金融専門用語、製品名など、業界固有の語彙や単語パターンを ASR エンジンに学習させることができます。
このトピックでは、トレーニングデータセットの作成、カスタム言語モデルの構築、音声認識プロジェクトでの使用に向けたデプロイまで、API ライフサイクル全体を説明します。
前提条件
開始する前に、以下を確認してください。
Intelligent Speech Interaction サービスが有効化されていること。詳細については、「カスタム言語モデルの作成」をご参照ください。
認証用の AccessKey ID と AccessKey Secret があること。詳細については、「Intelligent Speech Interaction の有効化」をご参照ください。
Intelligent Speech Interaction コンソールでプロジェクトが設定されており、ASR モデルがトレーニングに使用する予定のベースモデルに設定されていること。
[プロジェクト設定] ページで、ASR モデルを、カスタム言語モデルを作成する際に BaseId パラメーターで指定したベースモデルと同じものに設定してください。
API エンドポイント
| プロパティ | 値 |
|---|---|
| リージョン ID |
|
| ドメイン名 |
|
| プロトコル | HTTPS |
| API バージョン | 2018-11-20 |
制限事項
| リソース | 制限 |
|---|---|
| アカウントあたりのカスタム言語モデル数 | 10 (無料) |
| アカウントあたりのトレーニングデータセット数 | 100 |
| トレーニングデータセットあたりの最大サイズ | 10 MB |
| モデルあたりのトレーニングデータセット数 | 10 |
トレーニング時間の目安:
データセットの合計サイズが 10 MB 以下:約 5 分
データセットの合計サイズが 10 MB 超:約 30 分
トレーニングコーパスのフォーマット要件と最適化のヒントについては、概要の「トレーニングコーパスに関する注意事項」セクションをご参照ください。
ワークフロー
カスタム言語モデルを作成してデプロイするには、次の手順を実行します。
トレーニングデータの準備。 トレーニングコーパスをアクセス可能な URL (OSS ファイルの HTTP または HTTPS URL) にアップロードし、
CreateAsrLmDataを呼び出してトレーニングデータセットを作成します。データセットのステータスがReadyになるまでポーリングします。モデルの作成。 ベースモデル ID を指定して
CreateAsrLmModelを呼び出します。次に、AddDataToAsrLmModelを呼び出して、1 つ以上のトレーニングデータセットをアタッチします。トレーニングとデプロイ。
TrainAsrLmModelを呼び出してトレーニングを開始します。トレーニングが完了すると、システムは自動的にモデルをデプロイします。ステータスは、別のデプロイコールなしでDeployedに変わります。
トレーニングデータセットのステータス
| ステータス | 説明 |
|---|---|
Fetching | 指定された URL からコーパスデータをインポート中です |
FetchingFailed | インポートに失敗しました。URL が有効な OSS ファイルの HTTP または HTTPS URL であることを確認してください |
Ready | コーパスデータは正常にインポートされました |
モデルのステータス
| ステータス | 説明 |
|---|---|
Empty | モデルは作成されましたが、まだトレーニングされていません |
Training | トレーニング中です |
TrainingFailed | トレーニングに失敗しました |
Ready | トレーニング済みですが、デプロイされていません |
Deploying | デプロイまたはアンデプロイ中です |
Deployed | デプロイ済みでアクティブです |
API リファレンス
トレーニングデータセットの操作
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 | いいえ | 1 ページあたりのエントリ数。有効な値: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 |
TotalPages | Integer | 総ページ数 |
TotalItems | Integer | データセットの総数 |
PageNumber | Integer | 現在のページ番号 |
PageSize | Integer | ページサイズ |
モデルの操作
CreateAsrLmModel
指定されたベースモデルに基づいてカスタム言語モデルを作成します。
リクエストパラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
Name | String | はい | モデル名 |
BaseId | String | はい | ベースモデル ID。作成後は変更できません。Intelligent Speech Interaction コンソールで、プロジェクトの ASR モデルを同じベースモデルに設定してください |
Description | String | いいえ | モデルの説明 |
利用可能なベースモデル:
| モデル名 | 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****"
}レスポンスパラメーター:
| パラメーター | 型 | 説明 |
|---|---|---|
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 | いいえ | 1 ページあたりのエントリ数。有効な値: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\ | モデルのリスト。各エントリは GetAsrLmModel の Model |
TotalPages | Integer | 総ページ数 |
TotalItems | Integer | モデルの総数 |
PageNumber | Integer | 現在のページ番号 |
PageSize | Integer | ページサイズ |
トレーニングとデプロイの操作
AddDataToAsrLmModel
トレーニングデータセットをカスタム言語モデルにアタッチします。
同じデータセットを同じモデルに 2 回追加することはできません。
リクエストパラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
ModelId | String | はい | ターゲットモデルの ID |
DataId | String | はい | アタッチするデータセットの ID |
レスポンス例:
{
"RequestId": "9B232563-12C0-4242-AA27-C250E1BB****"
}データセットは 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 | - | - | - | - |
| TrainAsrLmModel | - | - | - | - | - | - | - | NO | - |
| DeployAsrLmModel | - | - | - | NO | NO | NO | - | NO | NO |
| UndeployAsrLmModel | - | - | - | NO | NO | NO | NO | NO | - |
エラーコード
API 呼び出しが失敗すると、レスポンスボディにエラーコードとメッセージが含まれます。
エラーレスポンス例:
{
"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 | エラーメッセージ |
エラーコード:
| エラーコード | 説明 | トラブルシューティング |
|---|---|---|
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;
}
}