全部产品
云市场

POP API创建自学习模型

更新时间:2019-10-12 13:50:50

使用POP API的方式,您可以在客户端自行操作训练自学习模型,不需要依赖管控台的设置。可执行的操作:

  • 数据集(即训练语料)管理
    • 创建数据集,对应的POP API为 CreateAsrLmData
    • 查询数据集,对应的POP API为 GetAsrLmData
    • 删除数据集,对应的POP API为 DeleteAsrLmData
    • 列举数据集,对应的POP API为 ListAsrLmData
  • 自学习模型管理
    • 创建自学习模型,对应的POP API为 CreateAsrLmModel
    • 查询自学习模型,对应的POP API为 GetAsrLmModel
    • 删除自学习模型,对应的POP API为 DeleteAsrLmModel
    • 列举自学习模型,对应的POP API为 ListAsrLmModel
  • 自学习模型的训练与发布
    • 添加数据集到自学习模型,对应的POP API为 AddDataToAsrLmModel
    • 从自学习模型中删除数据集,对应的POP API为 RemoveDataFromAsrLmModel
    • 训练自学习模型,对应的POP API为 TrainAsrLmModel
    • 上线自学习模型,对应的POP API为 DeployAsrLmModel
    • 下线自学习模型,对应的POP API为 UndeployAsrLmModel

开通服务

使用自学习服务的POP API接口训练自学习模型,需要首先在管控台开通自学习服务,即在管控台的服务开通与购买->语音识别中开通训练自学习模型功能,具体开通步骤,请阅读 管控台添加自学习模型

说明:

  • 在开通自学习服务时,请根据业务需求,购买合适数量的模型。使用POP API可创建的自学习模型数量将不会超过购买的数量。
  • 在管控台的项目功能配置中,请设置项目当前模型与训练自学习模型使用的基础模型一致。基础模型请阅读下文创建自学习模型

自学习模型服务信息如下表所示:

名称
地域ID cn-shanghai
域名 nls-slp.cn-shanghai.aliyuncs.com
协议类型 HTTPS
POP API版本 2018-11-20

准备训练语料

请阅读简介中的训练语料说明,根据调用限制和优化建议准备训练语料。

指标 说明
自学习模型数量 不免费开放,需要单独购买,按数量收费
数据集的数量 默认最多可创建100个
单个数据集的大小 最大10MB
单个自学习模型使用数据集的数量 固定为10个
生效时间 对于总的数据集在10MB以下可以在5分钟内生效,对于总的数据集较大的情况在半小时内生效

训练流程

训练过程包含如下步骤:

  1. 准备训练语料,将训练语料导入自学习服务,并创建为数据集;
  2. 创建一个自学习模型,并将数据集添加到这个自学习模型;
  3. 启动自学习模型训练,并等待模型训练完成;
  • 数据集操作的状态转换

数据集

状态说明:

状态 说明
Fetching 正在将训练数据从URL导入到自学习系统中
FetchingFailed 复制数据集出现错误,请检查训练数据的URL是否正确(只支持阿里云OSS的HTTP/HTTPS链接,如使用浏览器是否可以打开)
Ready 数据集导入成功
  • 训练自学习模型的状态转换

训练自学习模型

状态说明:

状态 说明
Empty 自学习模型新创建,还没有训练过
Training 自学习模型正在训练中
TrainingFailed 自学习模型训练失败
Ready 已上线的自学习模型下线成功
Deploying 自学习模型正在上线或下线
Deployed 自学习模型已上线

接口说明

数据集管理

数据集即训练语料,与管控台中上传的训练语料相同。

创建数据集

1 调用动作:

CreateAsrLmData

2 输入参数:

提交创建数据集的请求时,需要设置输入参数到请求的Body中。

参数名称 类型 说明 是否必填
Name String 创建的数据集名称
Url String 数据集位置,只支持阿里云OSS的HTTP/HTTPS链接,需要自学习服务能访问和下载训练数据
Description String 数据集描述信息

3 输出参数:

服务端返回响应的Body为JSON格式的字符串。

  1. {
  2. "RequestId": "C71B7CAA-18D6-4012-AC3D-425BA1CB670C",
  3. "DataId": "9934e10f19044282825508cbc7c86af8"
  4. }

参数说明

  • 返回HTTP状态:200表示成功,更多状态码请查阅HTTP状态码;
  • 返回JSON格式字符串参数:
参数化名称 类型 说明
RequestId String 请求ID
DataId String 数据集ID,作为后续模型训练使用

说明: 创建的数据集是否成功,需要通过轮询数据集的方式,直到状态为Ready,表示数据集已经创建成功。

查询数据集

1 调用动作:

GetAsrLmData

2 输入参数:

提交查询数据集的请求时,需要设置输入参数到请求的Body中。

参数名称 类型 说明 是否必填
DataId String 要查询的数据集ID

3 输出参数:

服务端返回响应的Body为JSON格式的字符串。

  1. {
  2. "Data": {
  3. "Name": "测试数据集",
  4. "Status": "Ready",
  5. "Md5": "38fc072ac60796a84ce1a0b13f783cc8",
  6. "Description": "通过POP-API创建数据集",
  7. "Url": "https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/SLP/SLPTest.txt",
  8. "CreateTime": "2019-02-11 14:40:35",
  9. "UpdateTime": "2019-02-11 14:40:35",
  10. "Id": "9934e10f19044282825508cbc7c86af8",
  11. "Size": 5991
  12. },
  13. "RequestId": "C88130E6-F3B5-4F3E-9BF5-9C617DDD3321"
  14. }

参数说明

  • 返回HTTP状态:200表示成功,更多状态码请查阅HTTP状态码;
  • 返回JSON格式字符串参数:
参数名称 类型 说明
RequestId String 请求ID
Data Data对象 数据集对象

其中,Data对象的参数描述:

参数名称 类型 说明
Id String 数据集ID,数据集的唯一标识,即创建数据集时获取的DataId
Name String 数据集名称
Description String 数据集描述信息
Size Integer 数据集大小
Md5 String 数据集MD5值
Url String 创建数据集使用的URL
Status String 数据集状态,可能的状态Fetching、FetchingFailed、Ready
CreateTime String 数据集创建时间
UpdateTime String 数据集更新时间
ErrorMessage String 错误消息(Status为错误状态时出现)

删除数据集

1 调用动作:

DeleteAsrLmData

2 输入参数:

提交删除数据集的请求时,需要设置输入参数到请求的Body中。

参数名称 类型 说明 是否必填
DataId String 需要删除的数据集ID

3 输出参数:

服务端返回响应的Body为JSON格式的字符串。

  1. {
  2. "RequestId": "7130914d32a3441db06747523675d9ff"
  3. }

参数说明

  • 返回HTTP状态:200表示成功,更多状态码请查阅HTTP状态码;

说明: 需要删除的数据集状态必须为Ready才可删除。

列举数据集

1 调用动作:

ListAsrLmData

2 输入参数:

提交列举数据集的请求时,需要设置输入参数到请求的Body中。

参数名称 类型 说明 是否必填
PageNumber Int 页号:从1开始编号,默认值是1
PageSize Int 页大小:从1到100,默认值10
ModelId String 模型ID,用于搜索被指定模型使用到的数据。可选,默认列出所有数据集。

3 输出参数:

服务端返回响应的Body为JSON格式的字符串。

  1. {
  2. "RequestId": "7130914d32a3441db06747523675d9ff",
  3. "Page": {
  4. "Content": [{
  5. "Id": "1b64bee9994749f2a67eadac6379f80c",
  6. "Name": "示例数据集",
  7. "Description": "这是一个示例数据集",
  8. "Size": 7777404,
  9. "Md5": "39326cf690e384735355a385ec1e7a00",
  10. "Url": "slp/tmp/demo-data-lm.txt",
  11. "Status": "Ready",
  12. "CreateTime": "2018-10-31 17:20:39",
  13. "UpdateTime": "2018-10-31 17:20:39"
  14. }],
  15. "TotalPages": 1,
  16. "TotalItems": 1,
  17. "PageNumber": 1,
  18. "PageSize": 10
  19. }
  20. }

参数说明

  • 返回HTTP状态:200表示成功,更多状态码请查阅HTTP状态码;
  • 返回JSON格式字符串参数:
参数名称 类型 说明
RequestId String 请求ID
Page Page对象 输入参数中指定获取的页,没有指定默认获取第一页

其中,Page对象的参数描述:

参数名称 类型 说明
Content List< Data > 数据集数组,参考获取数据集的输出参数Data
TotalPages Integer 总页数
TotalItems Integer 总数据集数
PageNumber Integer 页号,与输入参数相同
PageSize Integer 页包含的数据集数量,与输入参数相同

自学习模型管理

创建自学习模型

1 调用动作:

CreateAsrLmModel

2 输入参数:

提交请求时,需要设置输入参数到请求的Body中。

参数名称 类型 说明 是否必填
Name String 模型名称
BaseId String 基础模型ID,创建成功之后不可修改;并在管控台的项目功能配置中,将当前模型设置为此基础模型。
Description String 模型描述信息,可选

其中,支持训练自学习模型的基础模型BaseId如下表所示,模型的详细信息,请在管控台 的项目模型中查看。

模型 BaseId
通用中文识别模型(中文普通话 16K) universal
电话客服及质检模型(中文普通话 8K) customer_service_8k
电商语音购物模型(中文普通话 16K) e_commerce
政法庭审识别模型(中文普通话 16K) law_politics
电话客服及质检模型 (中文地方口音 8k) dialect_customer_service_8k
电话客服及质检模型 (中文粤语 8k) cantonese_customer_service_8k
英文识别模型 (英语 16k) english

3 输出参数:

服务端返回响应的Body为JSON格式的字符串。

  1. {
  2. "ModelId": "dbb6b71ff3e54b45a600ee5157a27647",
  3. "RequestId": "945C59DF-B3D9-4F22-808E-76752FF3872F"
  4. }

参数说明

  • 返回HTTP状态:200表示成功,更多状态码请查阅HTTP状态码;
  • 返回JSON格式字符串参数:
参数名称 类型 说明
RequestId String 请求ID
ModelId String 创建的自学习模型ID,作为后续的模型训练使用

说明: 创建自学习模型成功的状态为Empty。

查询自学习模型

1 调用动作:

GetAsrLmModel

2 输入参数:

提交请求时,需要设置输入参数到请求的Body中。

参数名称 类型 说明 是否必填
ModelId String 要查询的自学习语言模型ID

3 输出参数:

服务端返回响应的Body为JSON格式的字符串。

  1. {
  2. "Model": {
  3. "Name": "测试自学习模型",
  4. "Status": "Empty",
  5. "Description": "测试自学习模型描述",
  6. "CreateTime": "2019-02-12 10:11:57",
  7. "UpdateTime": "2019-02-12 10:11:57",
  8. "Id": "dbb6b71ff3e54b45a600ee5157a27647",
  9. "BaseId": "common",
  10. "Size": 0
  11. },
  12. "RequestId": "6CE24FF7-B7C8-4B9F-B0EB-FE4AF20B0CCC"
  13. }

参数说明

  • 返回HTTP状态:200表示成功,更多状态码请查阅HTTP状态码;
  • 返回JSON格式字符串参数:
参数名称 类型 说明
RequestId String 请求ID
Model Model对象 自学习模型对象

其中,Mode对象的参数描述:

参数名称 类型 说明
Id String 模型ID,模型的唯一标识,与创建自学习模型的ModelId相同
Name String 模型名称
Description String 模型描述信息
BaseId String 基础模型ID
Size Integer 模型大小
Status String 模型状态,可能的状态:Empty、Training、TrainingFailed、Ready、Deploying、Deployed
CreateTime String 模型创建时间
UpdateTime String 模型更新时间
ErrorMessage String 错误消息(Status为错误状态时出现)

删除自学习模型

注意:删除自学习模型时,请确定您的应用没有正在使用该模型,否则将没有该模型的识别效果。

1 调用动作:

DeleteAsrLmModel

2 输入参数:

提交请求时,需要设置输入参数到请求的Body中。

参数名称 类型 说明 是否必填
ModelId String 需要删除的自学习语言模型ID

3 输出参数:

服务端返回响应的Body为JSON格式的字符串。

  1. {
  2. "RequestId": "7130914d32a3441db06747523675d9ff"
  3. }

参数说明

  • 返回HTTP状态:200表示成功,更多状态码请查阅HTTP状态码;

说明: 需要删除的自学习模型状态不能为Training和Deploying。

列举自学习模型

1 调用动作:

ListAsrLmModel

2 输入参数:

提交请求时,需要设置输入参数到请求的Body中。

参数名称 类型 说明 是否必填
PageNumber Int 页号:从1开始编号,默认值是1
PageSize Int 页大小:从1到100,默认值10
DataId String 数据集ID,用于搜索使用了指定数据的模型。可选,默认列出所有模型。

3 输出参数:

服务端返回响应的Body为JSON格式的字符串。

  1. {
  2. "RequestId": "7130914d32a3441db06747523675d9ff",
  3. "Page": {
  4. "Content": [{
  5. "Id": "demo-model",
  6. "Name": "示例模型",
  7. "Description": "这是一个示例模型",
  8. "Size": 0,
  9. "Status": "Empty",
  10. "CreateTime": "2018-11-01 17:05:21",
  11. "UpdateTime": "2018-11-01 17:05:21",
  12. "BaseId": "common"
  13. }],
  14. "TotalPages": 1,
  15. "TotalItems": 1,
  16. "PageNumber": 1,
  17. "PageSize": 10
  18. }
  19. }

参数说明

  • 返回HTTP状态:200表示成功,更多状态码请查阅HTTP状态码;
  • 返回JSON格式字符串参数:
参数名称 类型 说明
RequestId String 请求ID
Page Page对象 输入参数中指定获取的页,没有指定默认获取第一页

其中,Page对象的参数描述:

参数名称 类型 说明
Content List< Model > Model对象数组,参考获取模型的输出参数Model
TotalPages Integer 总页数
TotalItems Integer 总自学习模型数
PageNumber Integer 页号,与输入参数相同
PageSize Integer 页包含的自学习模型数量,与输入参数相同

自学习模型的训练与发布

添加数据集到自学习模型

注意:请勿重复添加同一数据集ID到同一自学习模型。

1 调用动作:

AddDataToAsrLmModel

2 输入参数:

提交请求时,需要设置输入参数到请求的Body中。

参数名称 类型 说明 是否必填
ModelId String 自学习模型ID
DataId String 数据集ID

3 输出参数:

服务端返回响应的Body为JSON格式的字符串。

  1. {
  2. "RequestId": "9B232563-12C0-4242-AA27-C250E1BB45EB"
  3. }

参数说明

  • 返回HTTP状态:200表示成功,更多状态码请查阅HTTP状态码;

说明: 添加的数据集状态必须为Ready,自学习模型的状态不能为Training和Deploying。

从自学习模型中删除数据集

1 调用动作:

RemoveDataFromAsrLmModel

2 输入参数:

提交请求时,需要设置输入参数到请求的Body中。

参数名称 类型 说明 是否必填
ModelId String 自学习模型ID
DataId String 数据集ID

3 输出参数:

服务端返回响应的Body为JSON格式的字符串。

  1. {
  2. "RequestId": "7130914d32a3441db06747523675d9ff"
  3. }

参数说明

  • 返回HTTP状态:200表示成功,更多状态码请查阅HTTP状态码;

说明: 需要删除的自学习模型状态不能为Training和Deploying。

开始训练自学习模型

1 调用动作:

TrainAsrLmModel

2 输入参数:

提交请求时,需要设置输入参数到请求的Body中。

参数名称 类型 说明 是否必填
ModelId String 自学习模型ID

3 输出参数:

服务端返回响应的Body为JSON格式的字符串。

  1. {
  2. "RequestId": "3D922A91-68AA-4260-AFE4-C429832F9389"
  3. }

参数说明

  • 返回HTTP状态:200表示成功,更多状态码请查阅HTTP状态码;

说明:

  • 开始训练的自学习模型,状态不能为Deploying;
  • 自学习模型训练完成后,默认发布上线,状态为Deployed。

上线自学习模型

1 调用动作:

DeployAsrLmModel

2 输入参数:

提交请求时,需要设置输入参数到请求的Body中。

参数名称 类型 说明 是否必填
ModelId String 自学习模型ID

3 输出参数:

服务端返回响应的Body为JSON格式的字符串。

  1. {
  2. "RequestId": "D9DDA978-5D68-45A4-B840-E4BC45C7497B"
  3. }

参数说明

  • 返回HTTP状态:200表示成功,更多状态码请查阅HTTP状态码;

说明: 需要上线的自学习模型状态必须为Ready。

下线自学习模型

注意:下线自学习模型时,请确定您的应用没有正在使用该模型,否则将没有该模型的识别效果。

1 调用动作:

UndeployAsrLmModel

2 输入参数:

提交请求时,需要设置输入参数到请求的Body中。

参数名称 类型 说明 是否必填
ModelId String 自学习模型ID

3 输出参数:

服务端返回响应的Body为JSON格式的字符串。

  1. {
  2. "RequestId": "8417BA8E-2428-41D2-A849-396A08979990"
  3. }

参数说明

  • 返回HTTP状态:200表示成功,更多状态码请查阅HTTP状态码;

说明: 需要下线的自学习模型状态必须为Deployed。

各个状态下的操作

说明:NO表示该状态不允许的操作,-表示该状态允许的操作。

状态/操作 Fetching FetchingFailed Ready Empty Training Training Failed 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 -

错误码

以上操作在出现错误时,服务端返回的响应Body中包含了错误信息。您可以根据错误信息的提示,检查程序是否存在问题。

错误名称 说明
SLP.ASR_MODEL_ERROR 自学习模型相关错误
SLP.NOT_FOUND 指定的ID无效,无法根据ID找到指定的资源
SLP.PARAMETER_ERROR 创建资源时设置了无效的参数
SLP.EXCEED_LIMIT 资源数量超过限制,无法创建新的资源

以NOT_FOUND错误为例:

  1. {
  2. "RequestId": "E70F51F6-23E3-4681-B954-ABF32B899B41",
  3. "HostId": "nls-slp.cn-shanghai.aliyuncs.com",
  4. "Code": "SLP.NOT_FOUND",
  5. "Message": "Model not found!"
  6. }
参数名称 类型 说明
RequestId String 请求ID
HostId String 自学习服务端的域名
Code String 错误码
Message String 错误信息描述

Demo示例

说明:

  • Demo示例为Java语音的示例,使用了阿里云Java SDK的CommonRequest用来提交请求,采用的是RPC风格的POP API调用。阿里云SDK的详细介绍请阅读阿里云SDK开发指南,Java SDK CommonRequest的使用方法请阅读使用CommonRequest进行调用
  • 鉴权 SDK使用过程中,所有的接口调用均通过阿里云账号来完成鉴权操作。通过传入阿里云账号的AccessKey ID和AccessKey Secret(获取方法请阅读开通服务 一节),调用阿里云Java SDK,创建IAcsClient对象,全局唯一。
  • Demo中包含了三个类:
    • AsrLmModelPopApiDemo: POP API测试类,包含main函数,用于测试接口,您可根据此类,进行集成时的状态检查;
    • AsrLmData:数据集类,封装了数据集相关操作的数据对象和接口调用;
    • AsrLmModel:自学习模型类,封装了自学习模型相关操作的数据对象和接口调用。

添加Java依赖: 您只需要依赖阿里云Java SDK的核心库与阿里云开源库fastjson即可。阿里云Java SDK的核心库版本可以选择3.5.0至3.7.x的版本。

  1. <dependency>
  2. <groupId>com.aliyun</groupId>
  3. <artifactId>aliyun-java-sdk-core</artifactId>
  4. <version>3.7.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.alibaba</groupId>
  8. <artifactId>fastjson</artifactId>
  9. <version>1.2.49</version>
  10. </dependency>

POP API 测试类:

  1. import com.alibaba.fastjson.JSONObject;
  2. import com.aliyuncs.DefaultAcsClient;
  3. import com.aliyuncs.IAcsClient;
  4. import com.aliyuncs.profile.DefaultProfile;
  5. public class AsrLmModelPopApiDemo {
  6. private static String REGION = "cn-shanghai";
  7. private static final String STATUS_FETCHING = "Fetching";
  8. private static final String STATUS_FETCHINGFAILED = "FetchingFailed";
  9. private static final String STATUS_READY = "Ready";
  10. private static final String STATUS_EMPTY = "Empty";
  11. private static final String STATUS_TRAINING = "Training";
  12. private static final String STATUS_TRAININGFAILED = "TrainingFailed";
  13. private static final String STATUS_DEPLOYING = "Deploying";
  14. private static final String STATUS_DEPLOYED = "Deployed";
  15. private static IAcsClient client;
  16. private AsrLmData asrLmData;
  17. private AsrLmModel asrLmModel;
  18. public AsrLmModelPopApiDemo(String akId, String akSecret) {
  19. DefaultProfile profile = DefaultProfile.getProfile(REGION, akId, akSecret);
  20. client = new DefaultAcsClient(profile);
  21. asrLmData = new AsrLmData(client);
  22. asrLmModel = new AsrLmModel(client);
  23. }
  24. /******************************* 数据集管理 *******************************/
  25. // 创建数据集
  26. public String createAsrLmData(String name, String fileUrl, String description) {
  27. String dataId = asrLmData.createAsrLmData(name, fileUrl, description);
  28. if (null == dataId) {
  29. return dataId;
  30. }
  31. // 轮询数据集,检查状态是否为Ready,即数据集导入成功
  32. while (true) {
  33. AsrLmData.LmData data = asrLmData.getAsrLmData(dataId);
  34. if (null == data) {
  35. dataId = null;
  36. break;
  37. }
  38. if (data.Status.equals(STATUS_FETCHING)) {
  39. System.out.println("正在将数据集导入到自学习服务中,dataId: " + dataId);
  40. try {
  41. Thread.sleep(100);
  42. } catch (InterruptedException e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. else if (data.Status.equals(STATUS_FETCHINGFAILED)) {
  47. System.out.println("复制数据集出现错误,dataId: " + dataId);
  48. asrLmData.deleteAsrLmData(dataId);
  49. dataId = null;
  50. break;
  51. }
  52. else if (data.Status.equals(STATUS_READY)) {
  53. System.out.println("数据集导入成功,dataId: " + dataId);
  54. break;
  55. }
  56. }
  57. return dataId;
  58. }
  59. // 查询数据集
  60. public AsrLmData.LmData getAsrLmData(String dataId) {
  61. return asrLmData.getAsrLmData(dataId);
  62. }
  63. // 删除数据集
  64. public boolean deleteAsrLmData(String dataId) {
  65. AsrLmData.LmData data = asrLmData.getAsrLmData(dataId);
  66. if (null == data) {
  67. return false;
  68. }
  69. if (!data.Status.equals(STATUS_READY)) {
  70. System.out.println("数据集状态不允许进行删除操作,status: " + data.Status);
  71. return false;
  72. }
  73. return asrLmData.deleteAsrLmData(dataId);
  74. }
  75. // 列举数据集
  76. public AsrLmData.LmDataPage listAsrLmData() {
  77. return asrLmData.listAsrLmData();
  78. }
  79. /******************************* 自学习模型管理 *******************************/
  80. // 创建自学习模型
  81. public String createAsrLmModel(String name, String baseId, String description) {
  82. String modelId = asrLmModel.createAsrLmModel(name, baseId, description);
  83. if (null == modelId) {
  84. return modelId;
  85. }
  86. // 轮询自学习模型,检查模型状态是否是Empty,即新创建的自学习模型
  87. while (true) {
  88. AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
  89. if (null == model) {
  90. modelId = null;
  91. break;
  92. }
  93. if (model.Status.equals(STATUS_EMPTY)) {
  94. break;
  95. }
  96. else {
  97. System.out.println("创建自学习模型失败,modelId: " + modelId);
  98. asrLmModel.deleteAsrLmModel(modelId);
  99. modelId = null;
  100. break;
  101. }
  102. }
  103. return modelId;
  104. }
  105. // 获取自学习模型
  106. public AsrLmModel.LmModel getAsrLmModel(String modelId) {
  107. return asrLmModel.getAsrLmModel(modelId);
  108. }
  109. // 删除自学习模型
  110. public boolean deleteAsrLmModel(String modelId) {
  111. AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
  112. if (null == model) {
  113. return false;
  114. }
  115. if (model.Status.equals(STATUS_TRAINING) || model.Status.equals(STATUS_DEPLOYING)) {
  116. System.out.println("自学习模型状态不允许进行删除操作,status: " + model.Status);
  117. return false;
  118. }
  119. return asrLmModel.deleteAsrLmModel(modelId);
  120. }
  121. // 列举自学习模型
  122. public AsrLmModel.LmModelPage listAsrLmModel() {
  123. return asrLmModel.listAsrLmModel();
  124. }
  125. /**************************** 自学习模型的训练与发布 ***************************/
  126. // 添加数据集到自学习模型
  127. public boolean addDataToAsrLmModel(String dataId, String modelId) {
  128. AsrLmData.LmData data = asrLmData.getAsrLmData(dataId);
  129. if (null == data) {
  130. return false;
  131. }
  132. if (!data.Status.equals(STATUS_READY)) {
  133. System.out.println("数据集状态不允许进行添加到自学习模型操作,status: " + data.Status);
  134. return false;
  135. }
  136. AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
  137. if (null == model) {
  138. return false;
  139. }
  140. if (model.Status.equals(STATUS_TRAINING) || model.Status.equals(STATUS_DEPLOYING)) {
  141. System.out.println("自学习模型状态不允许进行添加数据集操作,status: " + model.Status);
  142. return false;
  143. }
  144. return asrLmModel.addDataToAsrLmModel(dataId, modelId);
  145. }
  146. // 从自学习模型中删除数据集
  147. public boolean removeDataFromAsrLmModel(String dataId, String modelId) {
  148. // 列举指定模型使用到的数据集,判断待删除的数据集是否已经添加到该模型
  149. boolean isAdded = false;
  150. AsrLmData.LmDataPage page = asrLmData.listAsrLmData(1, 10, modelId);
  151. if (page != null && page.Content.size() > 0) {
  152. for (int i = 0; i < page.Content.size(); i++) {
  153. if (dataId.equals(page.Content.get(i).Id)) {
  154. isAdded = true;
  155. break;
  156. }
  157. }
  158. }
  159. if (!isAdded) {
  160. System.out.println("待删除的数据集没有添加到指定模型,不能进行删除操作!");
  161. return false;
  162. }
  163. // 检查模型状态是否允许删除数据集操作
  164. AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
  165. if (null == model) {
  166. return false;
  167. }
  168. if (model.Status.equals(STATUS_TRAINING)) {
  169. System.out.println("自学习模型状态不允许进行删除数据集操作,status: " + model.Status);
  170. return false;
  171. }
  172. return asrLmModel.removeDataFromAsrLmModel(dataId, modelId);
  173. }
  174. // 训练自学习模型
  175. public boolean trainAsrLmModel(String modelId) {
  176. AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
  177. if (null == model) {
  178. return false;
  179. }
  180. if (model.Status.equals(STATUS_DEPLOYING)) {
  181. System.out.println("自学习模型状态不允许进行训练操作,status: " + model.Status);
  182. return false;
  183. }
  184. boolean isTrain = asrLmModel.trainAsrLmModel(modelId);
  185. if (!isTrain) {
  186. return isTrain;
  187. }
  188. // 轮询自学习模型,直到状态为Deployed,即自学习模型训练成功且并已上线
  189. while (true) {
  190. model = asrLmModel.getAsrLmModel(modelId);
  191. if (null == model) {
  192. isTrain = false;
  193. break;
  194. }
  195. if (model.Status.equals(STATUS_TRAINING) || model.Status.equals(STATUS_DEPLOYING)) {
  196. if (model.Status.equals(STATUS_TRAINING)) {
  197. System.out.println("自学习模型正在训练中,modelId: " + modelId);
  198. }
  199. else {
  200. System.out.println("自学习模型正在上线,modelId: " + modelId);
  201. }
  202. try {
  203. Thread.sleep(5000);
  204. } catch (InterruptedException e) {
  205. e.printStackTrace();
  206. }
  207. }
  208. else if (model.Status.equals(STATUS_TRAININGFAILED)) {
  209. System.out.println("自学习模型训练失败, modelId: " + modelId);
  210. isTrain = false;
  211. break;
  212. }
  213. else if (model.Status.equals(STATUS_DEPLOYED)) {
  214. System.out.println("自学习模型训练成功并已上线,modeId: " + modelId);
  215. isTrain = true;
  216. break;
  217. }
  218. else {
  219. System.out.println("自学习模型状态不允许进行训练操作,Status: " + model.Status);
  220. isTrain = false;
  221. break;
  222. }
  223. }
  224. return isTrain;
  225. }
  226. // 上线自学习模型
  227. public boolean deployAsrLmModel(String modelId) {
  228. AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
  229. if (null == model) {
  230. return false;
  231. }
  232. if (!model.Status.equals(STATUS_READY)) {
  233. System.out.println("自学习模型状态不允许进行上线操作,status: " + model.Status);
  234. return false;
  235. }
  236. boolean isDeployed = asrLmModel.deployAsrLmModel(modelId);
  237. if (!isDeployed) {
  238. return isDeployed;
  239. }
  240. // 轮询自学习模型,检查状态是否是Deployed,即自学习模型已上线
  241. while (true) {
  242. model = asrLmModel.getAsrLmModel(modelId);
  243. if (null == model) {
  244. isDeployed = false;
  245. break;
  246. }
  247. if (model.Status.equals(STATUS_DEPLOYING)) {
  248. System.out.println("自学习模型正在上线,modelId: " + modelId);
  249. try {
  250. Thread.sleep(100);
  251. } catch (InterruptedException e) {
  252. e.printStackTrace();
  253. }
  254. }
  255. else if (model.Status.equals(STATUS_DEPLOYED)) {
  256. System.out.println("自学习模型已经上线,modelId: " + modelId);
  257. isDeployed = true;
  258. break;
  259. }
  260. else {
  261. System.out.println("自学习模型的状态不允许上线操作,Status: " + model.Status);
  262. isDeployed = false;
  263. break;
  264. }
  265. }
  266. return isDeployed;
  267. }
  268. // 下线自学习模型
  269. public boolean undeployAsrLmModel(String modelId) {
  270. AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
  271. if (null == model) {
  272. return false;
  273. }
  274. if (!model.Status.equals(STATUS_DEPLOYED)) {
  275. System.out.println("自学习模型的状态不允许进行下线操作,status: " + model.Status);
  276. return false;
  277. }
  278. boolean isUnDeployed = asrLmModel.undeployAsrLmModel(modelId);
  279. if (!isUnDeployed) {
  280. return isUnDeployed;
  281. }
  282. // 轮询自学习模型,检查状态是否是Ready,即自学习模型下线完成
  283. while (true) {
  284. model = asrLmModel.getAsrLmModel(modelId);
  285. if (null == model) {
  286. isUnDeployed = false;
  287. break;
  288. }
  289. if (model.Status.equals(STATUS_DEPLOYING)) {
  290. System.out.println("自学习模型正在下线, modelId: " + modelId);
  291. try {
  292. Thread.sleep(100);
  293. } catch (InterruptedException e) {
  294. e.printStackTrace();
  295. }
  296. }
  297. else if (model.Status.equals(STATUS_READY)) {
  298. System.out.println("自学习模型下线完成,modelId: " + modelId);
  299. isUnDeployed = true;
  300. break;
  301. }
  302. else {
  303. System.out.println("自学习模型的状态不允许进行下线操作,Status: " + model.Status);
  304. isUnDeployed = false;
  305. break;
  306. }
  307. }
  308. return isUnDeployed;
  309. }
  310. public static void main(String[] args) {
  311. if (args.length < 2) {
  312. System.err.println("AsrLmModelPopApiDemo need params: <AccessKey Id> <AccessKey Secret>");
  313. return;
  314. }
  315. String accessKeyId = args[0];
  316. String accessKeySecret = args[1];
  317. AsrLmModelPopApiDemo demo = new AsrLmModelPopApiDemo(accessKeyId, accessKeySecret);
  318. /******************************* 数据集管理 *******************************/
  319. // 数据集ID
  320. String dataId;
  321. // 创建数据集
  322. String name = "测试数据集";
  323. String fileUrl = "https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/SLP/SLPTest.txt";
  324. String description = "通过POP-API创建数据集";
  325. dataId = demo.createAsrLmData(name, fileUrl, description);
  326. if (dataId != null) {
  327. System.out.println("创建数据集成功,数据集ID:" + dataId);
  328. }
  329. else {
  330. System.out.println("创建数据集失败!");
  331. }
  332. // 查询数据集
  333. AsrLmData.LmData data = demo.getAsrLmData(dataId);
  334. if (data != null) {
  335. System.out.println("获取数据集成功:" + JSONObject.toJSONString(data));
  336. }
  337. else {
  338. System.out.println("获取数据集失败!");
  339. }
  340. // 列举所有数据集
  341. AsrLmData.LmDataPage page = demo.listAsrLmData();
  342. if (page != null) {
  343. System.out.println("列举词表成功:" + JSONObject.toJSONString(page));
  344. }
  345. else {
  346. System.out.println("列举词表失败!");
  347. return;
  348. }
  349. /************************** 自学习模型管理 *********************************/
  350. // 自学习模型ID
  351. String modelId;
  352. // 创建自学习模型
  353. String modelName = "测试自学习模型";
  354. // 使用的是通用模型,请根据业务需求选择合适的基础模型
  355. String baseId = "universal";
  356. String modelDescription = "测试自学习模型描述";
  357. modelId = demo.createAsrLmModel(modelName, baseId, modelDescription);
  358. if (modelId != null) {
  359. System.out.println("创建自学习模型成功,模型ID:" + modelId);
  360. }
  361. else {
  362. System.out.println("创建自学习模型失败!");
  363. }
  364. // 查询自学习模型
  365. AsrLmModel.LmModel model = demo.getAsrLmModel(modelId);
  366. if (model != null) {
  367. System.out.println("获取自学习模型成功:" + JSONObject.toJSONString(model));
  368. }
  369. else {
  370. System.out.println("获取自学习模型失败!");
  371. }
  372. // 列举自学习模型
  373. AsrLmModel.LmModelPage modelPage = demo.listAsrLmModel();
  374. if (modelPage != null) {
  375. System.out.println("列举自学习模型成功:" + JSONObject.toJSONString(modelPage));
  376. }
  377. else {
  378. System.out.println("列举自学习模型失败!");
  379. }
  380. /******************************* 自学习模型的训练与发布 *******************************/
  381. // 添加数据集到自学习模型
  382. boolean isAdded = demo.addDataToAsrLmModel(dataId, modelId);
  383. if (isAdded) {
  384. System.out.println("添加数据集到自学习模型成功!");
  385. }
  386. else {
  387. System.out.println("添加数据集到自学习模型失败!");
  388. }
  389. // 训练自学习模型
  390. boolean isTrian = demo.trainAsrLmModel(modelId);
  391. if (isTrian) {
  392. System.out.println("训练自学习模型成功!");
  393. }
  394. else {
  395. System.out.println("训练自学习模型失败!");
  396. }
  397. // 下线自学习模型
  398. boolean isUnDeployed = demo.undeployAsrLmModel(modelId);
  399. if (isUnDeployed) {
  400. System.out.println("自学习模型下线成功!");
  401. }
  402. else {
  403. System.out.println("自学习模型下线失败!");
  404. }
  405. // 上线自学习模型
  406. boolean isDeployed = demo.deployAsrLmModel(modelId);
  407. if (isDeployed) {
  408. System.out.println("自学习模型上线成功!");
  409. }
  410. else {
  411. System.out.println("自学习模型上线失败!");
  412. }
  413. /***************************** 清理数据集和模型,请根据需求操作 *****************************/
  414. // 1. 下线自学习模型,需要时开启
  415. isUnDeployed = demo.undeployAsrLmModel(modelId);
  416. if (isUnDeployed) {
  417. System.out.println("自学习模型下线成功!");
  418. }
  419. else {
  420. System.out.println("自学习模型下线失败!");
  421. }
  422. // 2. 从自学习模型中删除数据集,需要时开启
  423. boolean isDeleted = demo.removeDataFromAsrLmModel(dataId, modelId);
  424. if (isDeleted) {
  425. System.out.println("从自学习模型中删除数据集成功!");
  426. }
  427. else {
  428. System.out.println("从自学习模型中删除数据集失败!");
  429. }
  430. // 3. 删除数据集,需要时开启
  431. boolean isDeletedData = demo.deleteAsrLmData(dataId);
  432. if (isDeletedData) {
  433. System.out.println("删除数据集成功!");
  434. }
  435. else {
  436. System.out.println("删除数据集失败!");
  437. }
  438. // 4. 删除自学习模型,需要时开启
  439. boolean isDeletedModel = demo.deleteAsrLmModel(modelId);
  440. if (isDeletedModel) {
  441. System.out.println("删除自学习模型成功!");
  442. }
  443. else {
  444. System.out.println("删除自学习模型失败!");
  445. }
  446. }
  447. }

数据集类:

  1. import com.alibaba.fastjson.JSONObject;
  2. import com.aliyuncs.CommonRequest;
  3. import com.aliyuncs.CommonResponse;
  4. import com.aliyuncs.IAcsClient;
  5. import com.aliyuncs.exceptions.ClientException;
  6. import com.aliyuncs.http.MethodType;
  7. import com.aliyuncs.http.ProtocolType;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. public class AsrLmData {
  11. public static class LmData {
  12. public String Name;
  13. public String Status;
  14. public String Description;
  15. public String Url;
  16. public String CreateTime;
  17. public String UpdateTime;
  18. public String Id;
  19. public String ErrorMessage; // 只有Status为错误状态时有该信息
  20. public int Size;
  21. }
  22. public static class LmDataPage {
  23. public int PageNumber;
  24. public int PageSize;
  25. public int TotalItems;
  26. public int TotalPages;
  27. public List<LmData> Content = new ArrayList<LmData>();
  28. }
  29. private static final String VERSION = "2018-11-20";
  30. private static final String DOMAIN = "nls-slp.cn-shanghai.aliyuncs.com";
  31. private static ProtocolType PROTOCOL_TYPE = ProtocolType.HTTPS;
  32. private static final String KEY_NAME = "Name";
  33. private static final String KEY_URL = "Url";
  34. private static final String KEY_DESCRIPTION = "Description";
  35. private static final String KEY_DATA_ID = "DataId";
  36. private static final String KEY_DATA = "Data";
  37. private static final String KEY_PAGE = "Page";
  38. private static final String KEY_PAGE_NUMBER = "PageNumber";
  39. private static final String KEY_PAGE_SIZE = "PageSize";
  40. private static final String KEY_MODEL_ID = "ModelId";
  41. private IAcsClient client;
  42. private CommonRequest newRequest(String action) {
  43. CommonRequest request = new CommonRequest();
  44. request.setDomain(DOMAIN);
  45. request.setProtocol(PROTOCOL_TYPE);
  46. request.setVersion(VERSION);
  47. request.setMethod(MethodType.POST);
  48. request.setAction(action);
  49. return request;
  50. }
  51. public AsrLmData(IAcsClient client) {
  52. this.client = client;
  53. }
  54. /**
  55. * 创建数据集
  56. * @param name 创建的数据集名称,必填
  57. * @param fileUrl 数据集文件的链接,需要服务端可下载,必填
  58. * @param description 数据集描述信息,可选
  59. * @return String 创建的数据集ID
  60. */
  61. public String createAsrLmData(String name, String fileUrl, String description) {
  62. CommonRequest request = newRequest("CreateAsrLmData");
  63. request.putBodyParameter(KEY_NAME, name);
  64. request.putBodyParameter(KEY_URL, fileUrl);
  65. request.putBodyParameter(KEY_DESCRIPTION, description);
  66. CommonResponse response = null;
  67. try {
  68. response = client.getCommonResponse(request);
  69. } catch (ClientException e) {
  70. e.printStackTrace();
  71. }
  72. System.out.println("CreateAsrLmData: " + response.getData());
  73. if (response == null || response.getHttpStatus() != 200) {
  74. System.out.println(response.getData());
  75. System.out.println("创建数据集失败,HTTP错误码:" + response.getHttpStatus());
  76. return null;
  77. }
  78. JSONObject result = JSONObject.parseObject(response.getData());
  79. String dataId = result.getString(KEY_DATA_ID);
  80. return dataId;
  81. }
  82. /**
  83. * 查询数据集
  84. * @param dataId 数据集ID
  85. * @return LmData 获取的数据集对象
  86. */
  87. public LmData getAsrLmData(String dataId) {
  88. CommonRequest request = newRequest("GetAsrLmData");
  89. request.putBodyParameter(KEY_DATA_ID, dataId);
  90. CommonResponse response = null;
  91. try {
  92. response = client.getCommonResponse(request);
  93. } catch (ClientException e) {
  94. e.printStackTrace();
  95. }
  96. System.out.println("GetAsrLmData: " + response.getData());
  97. if (response == null || response.getHttpStatus() != 200) {
  98. System.out.println(response.getData());
  99. System.out.println("获取数据集失败,HTTP错误码:" + response.getHttpStatus());
  100. return null;
  101. }
  102. JSONObject result = JSONObject.parseObject(response.getData());
  103. String dataJson = result.getString(KEY_DATA);
  104. LmData data = JSONObject.parseObject(dataJson, LmData.class);
  105. return data;
  106. }
  107. /**
  108. * 删除数据集
  109. * @param dataId 需要删除的数据集ID,必填
  110. * @return 是否删除成功
  111. */
  112. public boolean deleteAsrLmData(String dataId) {
  113. CommonRequest request = newRequest("DeleteAsrLmData");
  114. request.putBodyParameter(KEY_DATA_ID, dataId);
  115. CommonResponse response = null;
  116. try {
  117. response = client.getCommonResponse(request);
  118. } catch (ClientException e) {
  119. e.printStackTrace();
  120. }
  121. System.out.println("DeleteAsrLmData: " + response.getData());
  122. if (response == null || response.getHttpStatus() != 200) {
  123. System.out.println(response.getData());
  124. System.out.println("删除数据集失败,HTTP错误码:" + response.getHttpStatus());
  125. return false;
  126. }
  127. return true;
  128. }
  129. /**
  130. * 列举数据集
  131. * @param pageNumber 页号,从1开始编号,可选,默认值是1
  132. * @param pageSize 页大小,从1到100,可选,默认值是10
  133. * @param modelId 模型ID,用于搜索被指定模型使用到的数据集,可选,默认列出所有数据集
  134. * @return 数据集信息
  135. */
  136. public LmDataPage listAsrLmData(int pageNumber, int pageSize, String modelId) {
  137. CommonRequest request = newRequest("ListAsrLmData");
  138. request.putBodyParameter(KEY_PAGE_NUMBER, pageNumber);
  139. request.putBodyParameter(KEY_PAGE_SIZE, pageSize);
  140. request.putBodyParameter(KEY_MODEL_ID, modelId);
  141. CommonResponse response = null;
  142. try {
  143. response = client.getCommonResponse(request);
  144. } catch (ClientException e) {
  145. e.printStackTrace();
  146. }
  147. System.out.println("ListAsrLmData: " + response.getData());
  148. if (response == null || response.getHttpStatus() != 200) {
  149. System.out.println(response.getData());
  150. System.out.println("列举数据集失败,HTTP错误码:" + response.getHttpStatus());
  151. return null;
  152. }
  153. JSONObject result = JSONObject.parseObject(response.getData());
  154. String pageJson = result.getString(KEY_PAGE);
  155. LmDataPage page = JSONObject.parseObject(pageJson, LmDataPage.class);
  156. return page;
  157. }
  158. public LmDataPage listAsrLmData() {
  159. return listAsrLmData(1, 10, null);
  160. }
  161. }

自学习模型类:

  1. import com.alibaba.fastjson.JSONObject;
  2. import com.aliyuncs.CommonRequest;
  3. import com.aliyuncs.CommonResponse;
  4. import com.aliyuncs.IAcsClient;
  5. import com.aliyuncs.exceptions.ClientException;
  6. import com.aliyuncs.http.MethodType;
  7. import com.aliyuncs.http.ProtocolType;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. public class AsrLmModel {
  11. public static class LmModel {
  12. public String Name;
  13. public String Status;
  14. public String Description;
  15. public String CreateTime;
  16. public String UpdateTime;
  17. public String Id;
  18. public String BaseId;
  19. public String ErrorMessage; // 只有Status为错误状态时有该信息
  20. public int Size;
  21. }
  22. public static class LmModelPage {
  23. public int PageNumber;
  24. public int PageSize;
  25. public int TotalItems;
  26. public int TotalPages;
  27. public List<LmModel> Content = new ArrayList<LmModel>();
  28. }
  29. private static final String VERSION = "2018-11-20";
  30. private static final String DOMAIN = "nls-slp.cn-shanghai.aliyuncs.com";
  31. private static ProtocolType PROTOCOL_TYPE = ProtocolType.HTTPS;
  32. private static final String KEY_NAME = "Name";
  33. private static final String KEY_BASE_ID = "BaseId";
  34. private static final String KEY_DESCRIPTION = "Description";
  35. private static final String KEY_MODEL_ID = "ModelId";
  36. private static final String KEY_MODEL = "Model";
  37. private static final String KEY_PAGE = "Page";
  38. private static final String KEY_PAGE_NUMBER = "PageNumber";
  39. private static final String KEY_PAGE_SIZE = "PageSize";
  40. private static final String KEY_DATA_ID = "DataId";
  41. private IAcsClient client;
  42. private CommonRequest newRequest(String action) {
  43. CommonRequest request = new CommonRequest();
  44. request.setDomain(DOMAIN);
  45. request.setProtocol(PROTOCOL_TYPE);
  46. request.setVersion(VERSION);
  47. request.setMethod(MethodType.POST);
  48. request.setAction(action);
  49. return request;
  50. }
  51. public AsrLmModel(IAcsClient client) {
  52. this.client = client;
  53. }
  54. /**
  55. * 创建模型
  56. * @param name 自学习模型名称,必填
  57. * @param baseId 基础模型ID,创建成功后不可修改,必填
  58. * @param description 自学习模型描述信息,可选
  59. * @return 创建的模型ID
  60. */
  61. public String createAsrLmModel(String name, String baseId, String description) {
  62. CommonRequest request = newRequest("CreateAsrLmModel");
  63. request.putBodyParameter(KEY_NAME, name);
  64. request.putBodyParameter(KEY_BASE_ID, baseId);
  65. request.putBodyParameter(KEY_DESCRIPTION, description);
  66. CommonResponse response = null;
  67. try {
  68. response = client.getCommonResponse(request);
  69. } catch (ClientException e) {
  70. e.printStackTrace();
  71. }
  72. System.out.println("CreateAsrLmModel: " + response.getData());
  73. if (response == null || response.getHttpStatus() != 200) {
  74. System.out.println(response.getData());
  75. System.out.println("创建自学习模型失败,HTTP错误码:" + response.getHttpStatus());
  76. return null;
  77. }
  78. JSONObject result = JSONObject.parseObject(response.getData());
  79. String modelId = result.getString(KEY_MODEL_ID);
  80. return modelId;
  81. }
  82. /**
  83. * 查询自学习模型
  84. * @param modelId 模型ID
  85. * @return 获取的模型对象
  86. */
  87. public LmModel getAsrLmModel(String modelId) {
  88. CommonRequest request = newRequest("GetAsrLmModel");
  89. request.putBodyParameter(KEY_MODEL_ID, modelId);
  90. CommonResponse response = null;
  91. try {
  92. response = client.getCommonResponse(request);
  93. } catch (ClientException e) {
  94. e.printStackTrace();
  95. }
  96. System.out.println("GetAsrLmModel: " + response.getData());
  97. if (response == null || response.getHttpStatus() != 200) {
  98. System.out.println(response.getData());
  99. System.out.println("查询自学习模型失败,HTTP错误码:" + response.getHttpStatus());
  100. return null;
  101. }
  102. JSONObject result = JSONObject.parseObject(response.getData());
  103. String modelJson = result.getString(KEY_MODEL);
  104. LmModel model = JSONObject.parseObject(modelJson, LmModel.class);
  105. return model;
  106. }
  107. /**
  108. * 删除自学习模型
  109. * @param modelId 需要删除的自学习模型ID
  110. * @return 是否删除成功
  111. */
  112. public boolean deleteAsrLmModel(String modelId) {
  113. CommonRequest request = newRequest("DeleteAsrLmModel");
  114. request.putBodyParameter(KEY_MODEL_ID, modelId);
  115. CommonResponse response = null;
  116. try {
  117. response = client.getCommonResponse(request);
  118. } catch (ClientException e) {
  119. e.printStackTrace();
  120. }
  121. System.out.println("DeleteAsrLmModel: " + response.getData());
  122. if (response == null || response.getHttpStatus() != 200) {
  123. System.out.println(response.getData());
  124. System.out.println("删除自学习模型失败,HTTP错误码:" + response.getHttpStatus());
  125. return false;
  126. }
  127. return true;
  128. }
  129. /**
  130. * 列举自学习模型
  131. * @param pageNumber 页号,从1开始,可选,默认值是1
  132. * @param pageSize 页大小,从1到100,可选,默认值是10
  133. * @param dataId 数据集ID,用于搜索使用了指定数据集的模型,可选,默认列出所有自学习模型
  134. * @return 自学习模型信息
  135. */
  136. public LmModelPage listAsrLmModel(int pageNumber, int pageSize, String dataId) {
  137. CommonRequest request = newRequest("ListAsrLmModel");
  138. request.putBodyParameter(KEY_PAGE_NUMBER, pageNumber);
  139. request.putBodyParameter(KEY_PAGE_SIZE, pageSize);
  140. request.putBodyParameter(KEY_DATA_ID, dataId);
  141. CommonResponse response = null;
  142. try {
  143. response = client.getCommonResponse(request);
  144. } catch (ClientException e) {
  145. e.printStackTrace();
  146. }
  147. System.out.println("ListAsrLmModel: " + response.getData());
  148. if (response == null || response.getHttpStatus() != 200) {
  149. System.out.println(response.getData());
  150. System.out.println("列举自学习模型失败,HTTP错误码:" + response.getHttpStatus());
  151. return null;
  152. }
  153. JSONObject result = JSONObject.parseObject(response.getData());
  154. String pageJson = result.getString(KEY_PAGE);
  155. LmModelPage page = JSONObject.parseObject(pageJson, LmModelPage.class);
  156. return page;
  157. }
  158. public LmModelPage listAsrLmModel() {
  159. return listAsrLmModel(1, 10, null);
  160. }
  161. /**
  162. * 添加数据集到自学习模型
  163. * @param dataId 需要添加的数据集ID
  164. * @param modelId 自学习模型ID
  165. * @return 是否添加成功
  166. */
  167. public boolean addDataToAsrLmModel(String dataId, String modelId) {
  168. CommonRequest request = newRequest("AddDataToAsrLmModel");
  169. request.putBodyParameter(KEY_DATA_ID, dataId);
  170. request.putBodyParameter(KEY_MODEL_ID, modelId);
  171. CommonResponse response = null;
  172. try {
  173. response = client.getCommonResponse(request);
  174. } catch (ClientException e) {
  175. e.printStackTrace();
  176. }
  177. System.out.println("AddDataToAsrLmModel: " + response.getData());
  178. if (response == null || response.getHttpStatus() != 200) {
  179. System.out.println(response.getData());
  180. System.out.println("添加数据集到自学习模型失败,HTTP错误码:" + response.getHttpStatus());
  181. return false;
  182. }
  183. return true;
  184. }
  185. /**
  186. * 从自学习模型中删除数据集
  187. * @param dataId 需要删除的数据集
  188. * @param modelId 自学习模型ID
  189. * @return 是否删除成功
  190. */
  191. public boolean removeDataFromAsrLmModel(String dataId, String modelId) {
  192. CommonRequest request = newRequest("RemoveDataFromAsrLmModel");
  193. request.putBodyParameter(KEY_DATA_ID, dataId);
  194. request.putBodyParameter(KEY_MODEL_ID, modelId);
  195. CommonResponse response = null;
  196. try {
  197. response = client.getCommonResponse(request);
  198. } catch (ClientException e) {
  199. e.printStackTrace();
  200. }
  201. System.out.println("RemoveDataFromAsrLmModel: " + response.getData());
  202. if (response == null || response.getHttpStatus() != 200) {
  203. System.out.println(response.getData());
  204. System.out.println("从自学习模型中删除数据集失败,HTTP错误码:" + response.getHttpStatus());
  205. return false;
  206. }
  207. return true;
  208. }
  209. /**
  210. * 开始训练自学习模型
  211. * @param modelId 需要开始训练的自学习模型ID
  212. * @return 是否开始训练成功
  213. * */
  214. public boolean trainAsrLmModel(String modelId) {
  215. CommonRequest request = newRequest("TrainAsrLmModel");
  216. request.putBodyParameter(KEY_MODEL_ID, modelId);
  217. CommonResponse response = null;
  218. try {
  219. response = client.getCommonResponse(request);
  220. } catch (ClientException e) {
  221. e.printStackTrace();
  222. }
  223. System.out.println("TrainAsrLmModel: " + response.getData());
  224. if (response == null || response.getHttpStatus() != 200) {
  225. System.out.println(response.getData());
  226. System.out.println("开始训练自学习模型失败,HTTP错误码:" + response.getHttpStatus());
  227. return false;
  228. }
  229. return true;
  230. }
  231. /**
  232. * 上线自学习模型
  233. * @param modelId 需要上线的自学习模型ID
  234. * @return 是否上线成功
  235. */
  236. public boolean deployAsrLmModel(String modelId) {
  237. CommonRequest request = newRequest("DeployAsrLmModel");
  238. request.putBodyParameter(KEY_MODEL_ID, modelId);
  239. CommonResponse response = null;
  240. try {
  241. response = client.getCommonResponse(request);
  242. } catch (ClientException e) {
  243. e.printStackTrace();
  244. }
  245. System.out.println("DeployAsrLmModel: " + response.getData());
  246. if (response == null || response.getHttpStatus() != 200) {
  247. System.out.println(response.getData());
  248. System.out.println("上线自学习模型失败,HTTP错误码:" + response.getHttpStatus());
  249. return false;
  250. }
  251. return true;
  252. }
  253. /**
  254. * 下线自学习模型
  255. * @param modelId 需要下线的自学习模型ID
  256. * @return 是否下线成功
  257. */
  258. public boolean undeployAsrLmModel(String modelId) {
  259. CommonRequest request = newRequest("UndeployAsrLmModel");
  260. request.putBodyParameter(KEY_MODEL_ID, modelId);
  261. CommonResponse response = null;
  262. try {
  263. response = client.getCommonResponse(request);
  264. } catch (ClientException e) {
  265. e.printStackTrace();
  266. }
  267. System.out.println("UndeployAsrLmModel: " + response.getData());
  268. if (response == null || response.getHttpStatus() != 200) {
  269. System.out.println(response.getData());
  270. System.out.println("下线自学习模型失败,HTTP错误码:" + response.getHttpStatus());
  271. return false;
  272. }
  273. return true;
  274. }
  275. }