全部产品
Search
文档中心

智能语音交互:使用POP API创建自学习模型

更新时间:Sep 03, 2026

通过POP API管理训练数据集和自学习模型,可在客户端完成数据集创建、模型训练和发布,无需依赖控制台操作。

前提条件

调用POP API前,需要完成以下准备:

  • 已开通智能语音交互服务。开通方法请参见定制语言模型。

  • 已创建用于身份验证的AccessKey ID和AccessKey Secret。创建方法请参见准备账号。

  • 已创建项目,并将项目的当前模型设置为训练自学习模型时使用的基础模型。

接入信息

调用POP API时使用以下接入信息。

名称

值

地域ID

ap-southeast-1

域名

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

协议类型

HTTPS

POP API版本

2018-11-20

训练语料

使用限制

  • 已开通智能语音交互免费版或商用版的账号可免费使用该功能。

  • 训练数据应为领域相关文本。训练文本与待识别语音越接近,优化效果越好。

  • 以文本方式保存,使用UTF-8(无BOM)格式编码,文件大小不超过10 MB。

  • 每个账号最多可创建10个模型,每个模型最多可使用10个数据集。

  • 每个账号最多可创建100个数据集,单个数据集不超过10 MB。

  • 每行填写一句话或一个需要重点优化的关键词,每行不超过500个字符。

  • 文本中的数字需要按照发音替换为对应的汉字。例如,“58.9元”需要转换为“五十八点九元”。

  • 文件中至少包含一行由5个及以上词组成的句子。

  • 只采用逗号(,)、句号(。)、问号(?)和感叹号(!),句尾需要加标点。像书名号(《》)、双引号(“”)等标点应去除。

  • 数据集总大小小于10 MB时,通常在5分钟内生效;数据集较大时,通常在半小时内生效。

优化建议

对于识别不准确的关键词,可将包含该词的句子或关键词重复写入多行,例如10行。如果效果仍不理想,可适当增加重复行数。

说明
  • 先排除发音不清晰或音频质量不佳导致的关键词识别问题。

  • 通过识别测试逐步调整训练语料,避免影响其他同音内容的识别结果。

训练流程

创建并发布自学习模型的流程如下:

  1. 准备训练语料,将语料上传到自学习服务可访问的OSS HTTP或HTTPS URL,然后调用CreateAsrLmData创建训练数据集。轮询数据集状态,直至状态变为Ready。

  2. 调用CreateAsrLmModel创建自学习模型,然后调用AddDataToAsrLmModel将一个或多个训练数据集添加到模型。

  3. 调用TrainAsrLmModel开始训练。训练完成后,模型默认自动上线,状态变为Deployed。

训练数据集状态

image

状态

说明

Fetching

正在将训练数据从URL导入到自学习的系统中。

FetchingFailed

复制数据集出现错误,请检查训练数据的URL是否正确(只支持阿里云OSS的HTTP/HTTPS链接)。

Ready

数据集导入成功。

自学习模型状态

image

状态

说明

Empty

自学习模型新创建,还未训练过。

Training

自学习模型正在训练中。

TrainingFailed

自学习模型训练失败。

Ready

已上线的自学习模型下线成功。

Deploying

自学习模型正在上线或下线。

Deployed

自学习模型已上线。

接口说明

数据集即训练语料,与控制台中上传的训练语料相同。所有操作成功时均返回HTTP状态码200。

训练数据集操作

CreateAsrLmData

从指定 URL 导入训练语料并创建训练数据集。

请求参数:

参数名称

类型

是否必选

说明

Name

String

是

创建的数据集名称。

Url

String

是

数据集位置,只支持阿里云OSS的HTTP/HTTPS链接,需要自学习服务能访问和下载训练数据。

Description

String

否

数据集描述信息。

返回示例:

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

返回参数:

参数化名称

类型

说明

RequestId

String

请求ID。

DataId

String

数据集ID,作为后续模型训练使用。

说明

通过轮询数据集的方式,直到状态为Ready,表示数据集已经创建成功。

GetAsrLmData

查询训练数据集的详细信息。

请求参数:

参数名称

类型

是否必选

说明

DataId

String

是

要查询的数据集ID。

返回示例:

{
    "Data": {
        "Name": "测试数据集",
        "Status": "Ready",
        "Md5": "38fc072ac60796a84ce1a0b13f78****",
        "Description": "通过POP-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

Data对象

数据集对象。

Data 对象:

参数名称

类型

说明

Id

String

数据集ID,数据集的唯一标识,即创建数据集时获取的DataId。

Name

String

数据集名称。

Description

String

数据集描述信息。

Size

Integer

数据集大小(单位:Byte)。

Md5

String

数据集MD5值。

Url

String

创建数据集使用的URL。

Status

String

数据集状态。可能的状态Fetching、FetchingFailed、Ready。

CreateTime

String

数据集创建时间。

UpdateTime

String

数据集更新时间。

ErrorMessage

String

错误消息(Status为错误状态时出现)。

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": "示例数据集",
            "Description": "这是一个示例数据集",
            "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

Page对象

输入参数中指定获取的页,没有指定默认获取第一页。

Page 对象:

参数名称

类型

说明

Content

List< Data >

数据集数组,参考获取数据集的输出参数Data。

TotalPages

Integer

总页数。

TotalItems

Integer

总数据集数。

PageNumber

Integer

页号,与输入参数相同。

PageSize

Integer

页包含的数据集数量,与输入参数相同。

自学习模型操作

CreateAsrLmModel

创建自学习模型。

请求参数:

参数名称

类型

是否必选

说明

Name

String

是

模型名称。

BaseId

String

是

基础模型ID,创建成功之后不可修改,并在管控台的项目功能配置中,将当前模型设置为此基础模型。

Description

String

否

模型描述信息。

支持训练自学习模型的基础模型如下。模型详细信息可在控制台的项目模型中查看。

模型

BaseId

通用中文识别模型(中文普通话 16K)

universal

电话客服及质检模型(中文普通话 8K)

customer_service_8k

电话客服及质检模型(中文粤语 8K)

cantonese_customer_service_8k

英文识别模型(英语 16K)

english

返回示例:

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

返回参数:

参数名称

类型

说明

RequestId

String

请求ID。

ModelId

String

创建的自学习模型ID,作为后续的模型训练使用。

说明

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

GetAsrLmModel

查询自学习模型的详细信息。

请求参数:

参数名称

类型

是否必选

说明

ModelId

String

是

要查询的自学习语言模型ID。

返回示例:

{
    "Model": {
        "Name": "测试自学习模型",
        "Status": "Empty",
        "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

Model对象

自学习模型对象。

Model 对象:

参数名称

类型

说明

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为错误状态时出现)。

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": "示例模型",
            "Description": "这是一个示例模型",
            "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

Page对象

输入参数中指定获取的页,没有指定默认获取第一页。

Page 对象:

参数名称

类型

说明

Content

List< Model >

Model对象数组,参考获取模型的输出参数Model。

TotalPages

Integer

总页数。

TotalItems

Integer

总自学习模型数。

PageNumber

Integer

页号,与输入参数相同。

PageSize

Integer

页包含的自学习模型数量,与输入参数相同。

模型训练与发布

AddDataToAsrLmModel

将训练数据集添加到自学习模型。

请求参数:

参数名称

类型

是否必选

说明

ModelId

String

是

自学习模型ID。

DataId

String

是

数据集ID。

返回示例:

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

不要重复添加同一数据集ID到同一自学习模型。

说明

添加的数据集状态必须为 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

上线自学习模型。

请求参数:

参数名称

类型

是否必选

说明

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

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

-

错误码

操作失败时,响应体中包含错误信息。根据错误码和错误信息检查请求。

错误名称

说明

SLP.ASR_MODEL_ERROR

自学习模型相关错误。

SLP.NOT_FOUND

指定的ID无效,无法根据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示例展示创建训练数据集、创建模型、训练、发布和清理资源的完整流程。示例使用阿里云Java SDK的CommonRequest,以RPC风格调用POP API。

调用接口前,创建用于身份验证的AccessKey ID和AccessKey Secret。创建方法请参见准备账号。

添加依赖

添加以下Maven依赖。阿里云Java SDK核心库可使用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>

POP API测试类

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("正在将数据集导入到自学习服务中,dataId: " + dataId);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            else if (data.Status.equals(STATUS_FETCHINGFAILED)) {
                System.out.println("复制数据集出现错误,dataId: " + dataId);
                asrLmData.deleteAsrLmData(dataId);
                dataId = null;
                break;
            }
            else if (data.Status.equals(STATUS_READY)) {
                System.out.println("数据集导入成功,dataId: " + 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("数据集状态不允许进行删除操作,status: " + 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("创建自学习模型失败,modelId: " + 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("自学习模型状态不允许进行删除操作,status: " + 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("数据集状态不允许进行添加到自学习模型操作,status: " + 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("自学习模型状态不允许进行添加数据集操作,status: " + 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("自学习模型状态不允许进行删除数据集操作,status: " + model.Status);
            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("自学习模型状态不允许进行训练操作,status: " + 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("自学习模型正在训练中,modelId: " + modelId);
                }
                else {
                    System.out.println("自学习模型正在上线,modelId: " + modelId);
                }
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            else if (model.Status.equals(STATUS_TRAININGFAILED)) {
                System.out.println("自学习模型训练失败, modelId: " + modelId);
                isTrain = false;
                break;
            }
            else if (model.Status.equals(STATUS_DEPLOYED)) {
                System.out.println("自学习模型训练成功并已上线,modeId: " + modelId);
                isTrain = true;
                break;
            }
            else {
                System.out.println("自学习模型状态不允许进行训练操作,Status: " + 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("自学习模型状态不允许进行上线操作,status: " + 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("自学习模型正在上线,modelId: " + modelId);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            else if (model.Status.equals(STATUS_DEPLOYED)) {
                System.out.println("自学习模型已经上线,modelId: " + modelId);
                isDeployed = true;
                break;
            }
            else {
                System.out.println("自学习模型的状态不允许上线操作,Status: " + 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("自学习模型的状态不允许进行下线操作,status: " + 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("自学习模型正在下线, modelId: " + modelId);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            else if (model.Status.equals(STATUS_READY)) {
                System.out.println("自学习模型下线完成,modelId: " + modelId);
                isUnDeployed = true;
                break;
            }
            else {
                System.out.println("自学习模型的状态不允许进行下线操作,Status: " + 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);
        /******************************* 数据集管理 *******************************/
        // 数据集ID
        String dataId;
        // 创建数据集
        String name = "测试数据集";
        String fileUrl = "https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/SLP/SLPTest.txt";
        String description = "通过POP-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;
        }
        /************************** 自学习模型管理 *********************************/
        // 自学习模型ID
        String modelId;
        // 创建自学习模型
        String modelName = "测试自学习模型";
        // 使用的是通用模型,请根据业务需求选择合适的基础模型。
        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 isTrian = demo.trainAsrLmModel(modelId);
        if (isTrian) {
            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 isDeleted = demo.removeDataFromAsrLmModel(dataId, modelId);
        if (isDeleted) {
            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("删除自学习模型失败!");
        }
    }
}

数据集类

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;   // 只有Status为错误状态时有该信息。
        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 数据集文件的链接,需要服务端可下载,必填。
     * @param  description 数据集描述信息,可选。
     * @return String 创建的数据集ID。
     */
    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 是否删除成功。
     */
    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开始编号,可选,默认值是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);
    }
}

自学习模型类

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;   // 只有Status为错误状态时有该信息。
        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 是否删除成功
     */
    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开始,可选,默认值是1。
     * @param pageSize 页大小,从1到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 是否添加成功
     */
    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 需要删除的数据集
     * @param modelId 自学习模型ID
     * @return 是否删除成功
     */
    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 是否开始训练成功
     * */
    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 是否上线成功
     */
    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 是否下线成功
     */
    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;
    }
}