Utilisez les opérations d'API POP pour gérer les jeux de données d'entraînement et les modèles linguistiques personnalisés depuis un client, notamment la création de jeux de données, l'entraînement de modèles et leur déploiement.
Prérequis
Avant d'appeler les opérations d'API POP, effectuez les préparations suivantes :
Activez Intelligent Speech Interaction. Pour obtenir des instructions, consultez la rubrique Personnaliser un modèle linguistique.
Créez un AccessKey ID et un AccessKey secret pour l'authentification. Pour obtenir des instructions, consultez la rubrique Préparer le compte.
Créez un projet et définissez son modèle actuel sur le modèle de base utilisé pour entraîner le modèle linguistique personnalisé.
Endpoint d'API
Utilisez les informations d'endpoint suivantes pour appeler les opérations d'API POP.
Propriété | Valeur |
Region ID | ap-southeast-1 |
Nom de domaine | nls-slp.ap-southeast-1.aliyuncs.com |
Protocole | HTTPS |
Version de l'API | 2018-11-20 |
Corpus d'entraînement
Limites
Les comptes utilisant l'édition gratuite ou payante d'Intelligent Speech Interaction peuvent utiliser cette fonctionnalité gratuitement.
Utilisez du texte spécifique à un domaine comme données d'entraînement. Plus le texte d'entraînement est proche de la parole à reconnaître, plus l'amélioration est importante.
Enregistrez le corpus sous forme de fichier texte encodé en UTF-8 sans marque d'ordre des octets (BOM). Le fichier ne doit pas dépasser 10 Mo.
Chaque compte peut créer jusqu'à 10 modèles, et chaque modèle peut utiliser jusqu'à 10 jeux de données.
Chaque compte peut créer jusqu'à 100 jeux de données. Chaque jeu de données ne doit pas dépasser 10 Mo.
Placez une phrase ou un mot-clé à mettre en évidence sur chaque ligne. Chaque ligne ne doit pas dépasser 500 caractères.
Épelez les nombres tels qu'ils sont prononcés. Par exemple, remplacez 58,9 yuans par les mots chinois correspondant à cinquante-huit virgule neuf yuans.
Incluez au moins une phrase contenant cinq mots ou plus.
Utilisez uniquement des virgules, des points, des points d'interrogation et des points d'exclamation, et terminez chaque phrase par une ponctuation. Supprimez les autres signes de ponctuation, tels que les guillemets et les marques de titre.
Une taille totale de jeu de données inférieure à 10 Mo prend généralement effet dans les 5 minutes. Les jeux de données plus volumineux prennent généralement effet dans les 30 minutes.
Recommandations d'optimisation
Pour un mot-clé qui n'est pas reconnu avec précision, répétez le mot-clé ou une phrase le contenant sur plusieurs lignes, par exemple 10 lignes. Si la reconnaissance ne s'améliore pas suffisamment, ajoutez davantage de répétitions.
Commencez par écarter les problèmes de reconnaissance causés par une prononciation peu claire ou une mauvaise qualité audio.
Ajustez le corpus d'entraînement via des tests de reconnaissance afin d'éviter de réduire la précision d'autres contenus ayant la même prononciation.
Flux de travail
Créez et déployez un modèle linguistique personnalisé comme suit :
Préparez un corpus d'entraînement et téléchargez-le vers une URL HTTP ou HTTPS OSS accessible par le service. Appelez CreateAsrLmData pour créer un jeu de données d'entraînement, puis interrogez le jeu de données jusqu'à ce que son statut passe à Ready.
Appelez CreateAsrLmModel pour créer un modèle linguistique personnalisé. Ensuite, appelez AddDataToAsrLmModel pour ajouter un ou plusieurs jeux de données d'entraînement au modèle.
Appelez TrainAsrLmModel pour démarrer l'entraînement. Lorsque l'entraînement est terminé, le modèle est automatiquement déployé par défaut et son statut passe à Deployed.
Statuts des jeux de données d'entraînement
|
Statut |
Description |
|
Fetching |
Les données du corpus sont en cours d'importation depuis l'URL spécifiée |
|
FetchingFailed |
L'importation a échoué. Vérifiez que l'URL est une URL HTTP ou HTTPS valide d'un fichier OSS |
|
Ready |
Les données du corpus ont été importées avec succès |
Statuts des modèles linguistiques personnalisés
|
Statut |
Description |
|
Empty |
Modèle créé, pas encore entraîné |
|
Training |
Entraînement en cours |
|
TrainingFailed |
L'entraînement a échoué |
|
Ready |
Entraîné mais non déployé |
|
Deploying |
Déploiement ou annulation du déploiement en cours |
|
Deployed |
Déployé et actif |
Référence de l'API
Un jeu de données d'entraînement correspond à un corpus d'entraînement, équivalent à un corpus téléchargé dans la console. Toutes les opérations réussies renvoient le code d'état HTTP 200.
Opérations sur les jeux de données d'entraînement
CreateAsrLmData
Crée un jeu de données d'entraînement en important un corpus d'entraînement depuis l'URL spécifiée.
Paramètres de la requête :
|
Paramètre |
Type |
Obligatoire |
Description |
|
Name |
String |
Oui |
Nom du jeu de données d'entraînement |
|
Url |
String |
Oui |
URL du fichier de corpus d'entraînement. Seules les URL HTTP et les URL HTTPS de fichiers OSS sont prises en charge |
|
Description |
String |
Non |
Description du jeu de données d'entraînement |
Exemple de réponse :
{
"RequestId": "C71B7CAA-18D6-4012-AC3D-425BA1CB****",
"DataId": "9934e10f19044282825508cbc7c8****"
}
Paramètres de la réponse :
|
Paramètre |
Type |
Description |
|
RequestId |
String |
ID de la requête |
|
DataId |
String |
ID du jeu de données d'entraînement créé. Utilisez cet ID dans les opérations ultérieures telles que AddDataToAsrLmModel |
Après avoir appelé cette opération, interrogez le statut du jeu de données avec GetAsrLmData jusqu'à ce que le statut passe à Ready. Un statut Ready indique que l'importation du corpus a réussi.
GetAsrLmData
Interroge les détails d'un jeu de données d'entraînement.
Paramètres de la requête :
|
Paramètre |
Type |
Obligatoire |
Description |
|
DataId |
String |
Oui |
ID du jeu de données d'entraînement à interroger |
Exemple de réponse :
{
"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****"
}
Paramètres de la réponse :
|
Paramètre |
Type |
Description |
|
RequestId |
String |
ID de la requête |
|
Data |
Object |
Détails du jeu de données d'entraînement (voir ci-dessous) |
Objet Data :
|
Paramètre |
Type |
Description |
|
Id |
String |
ID du jeu de données (identique au DataId renvoyé par CreateAsrLmData) |
|
Name |
String |
Nom du jeu de données |
|
Description |
String |
Description du jeu de données |
|
Size |
Integer |
Taille du jeu de données en octets |
|
Md5 |
String |
Hachage MD5 du jeu de données |
|
Url |
String |
URL du fichier de corpus spécifiée lors de la création |
|
Status |
String |
Statut du jeu de données. Valeurs valides : Fetching, FetchingFailed, Ready |
|
CreateTime |
String |
Date de création |
|
UpdateTime |
String |
Dernière date de mise à jour |
|
ErrorMessage |
String |
Message d'erreur (renvoyé uniquement en cas d'échec) |
DeleteAsrLmData
Supprime un jeu de données d'entraînement.
Paramètres de la requête :
|
Paramètre |
Type |
Obligatoire |
Description |
|
DataId |
String |
Oui |
ID du jeu de données d'entraînement à supprimer |
Exemple de réponse :
{
"RequestId": "7130914d32a3441db06747523675d9ff"
}
Seuls les jeux de données dont le statut est Ready peuvent être supprimés.
ListAsrLmData
Répertorie les jeux de données d'entraînement par page.
Paramètres de la requête :
|
Paramètre |
Type |
Obligatoire |
Description |
|
PageNumber |
Int |
Non |
Numéro de page, à partir de 1. Par défaut : 1 |
|
PageSize |
Int |
Non |
Nombre d'entrées par page. Valeurs valides : 10 à 100. Par défaut : 10 |
|
ModelId |
String |
Non |
Filtrer par ID de modèle pour répertorier uniquement les jeux de données associés au modèle spécifié. Si omis, tous les jeux de données accessibles sont renvoyés |
Exemple de réponse :
{
"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
}
}
Paramètres de la réponse :
|
Paramètre |
Type |
Description |
|
RequestId |
String |
ID de la requête |
|
Page |
Object |
Résultat paginé (voir ci-dessous) |
Objet Page :
|
Paramètre |
Type |
Description |
|
Content |
List\ |
Liste des jeux de données d'entraînement. Chaque entrée suit la structure de l'objet Data de GetAsrLmData |
|
TotalPages |
Integer |
Nombre total de pages |
|
TotalItems |
Integer |
Nombre total de jeux de données |
|
PageNumber |
Integer |
Numéro de page actuel |
|
PageSize |
Integer |
Taille de la page |
Opérations sur les modèles linguistiques personnalisés
CreateAsrLmModel
Crée un modèle linguistique personnalisé.
Paramètres de la requête :
|
Paramètre |
Type |
Obligatoire |
Description |
|
Name |
String |
Oui |
Nom du modèle |
|
BaseId |
String |
Oui |
ID du modèle de base. Ne peut pas être modifié après la création. Définissez le modèle ASR du projet sur le même modèle de base dans la console Intelligent Speech Interaction |
|
Description |
String |
Non |
Description du modèle |
Les modèles de base suivants prennent en charge l'entraînement de modèles linguistiques personnalisés. Consultez les détails des modèles dans les paramètres du projet dans la console.
|
Modèle |
BaseId |
|
Modèle général de reconnaissance vocale chinoise (mandarin, 16 kHz) |
universal |
|
Modèle de centre d'appels et d'inspection qualité (mandarin, 8 kHz) |
customer_service_8k |
|
Modèle de centre d'appels et d'inspection qualité (cantonais, 8 kHz) |
cantonese_customer_service_8k |
|
Modèle de reconnaissance vocale anglaise (anglais, 16 kHz) |
english |
Exemple de réponse :
{
"ModelId": "dbb6b71ff3e54b45a600ee5157a2****",
"RequestId": "945C59DF-B3D9-4F22-808E-76752FF3****"
}
Paramètres de la réponse :
|
Paramètre |
Type |
Description |
|
RequestId |
String |
ID de la requête |
|
ModelId |
String |
ID du modèle créé. Utilisez cet ID dans les opérations ultérieures telles que TrainAsrLmModel |
Un modèle nouvellement créé commence avec le statut Empty.
GetAsrLmModel
Récupère les détails d'un modèle linguistique personnalisé.
Paramètres de la requête :
|
Parameter |
Type |
Required |
Description |
|
ModelId |
String |
Yes |
ID du modèle à interroger |
Exemple de réponse :
{
"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****"
}
Paramètres de la réponse :
|
Parameter |
Type |
Description |
|
RequestId |
String |
ID de la requête |
|
Model |
Object |
Détails du modèle (voir ci-dessous) |
Objet Model :
|
Parameter |
Type |
Description |
|
Id |
String |
ID du modèle (identique au ModelId renvoyé par CreateAsrLmModel ) |
|
Name |
String |
Nom du modèle |
|
Description |
String |
Description du modèle |
|
BaseId |
String |
ID du modèle de base |
|
Size |
Integer |
Taille du modèle |
|
Status |
String |
État du modèle. Valeurs valides : Empty , Training , TrainingFailed , Ready , Deploying , Deployed |
|
CreateTime |
String |
Date de création |
|
UpdateTime |
String |
Dernière date de mise à jour |
|
ErrorMessage |
String |
Message d'erreur (renvoyé uniquement en cas d'échec) |
DeleteAsrLmModel
Supprime un modèle linguistique personnalisé.
Paramètres de la requête :
|
Parameter |
Type |
Required |
Description |
|
ModelId |
String |
Yes |
ID du modèle à supprimer |
Exemple de réponse :
{
"RequestId": "7130914d32a3441db06747523675d9ff"
}
Avant de supprimer un modèle, assurez-vous qu'il n'est utilisé par aucune application. Un modèle supprimé devient immédiatement inactif.
Les modèles dont l'état est Training ou Deploying ne peuvent pas être supprimés.
ListAsrLmModel
Répertorie les modèles linguistiques personnalisés par page.
Paramètres de la requête :
|
Parameter |
Type |
Required |
Description |
|
PageNumber |
Int |
No |
Numéro de page, à partir de 1. Par défaut : 1 |
|
PageSize |
Int |
No |
Nombre d'entrées par page. Valeurs valides : 10 à 100. Par défaut : 10 |
|
DataId |
String |
No |
Filtre par ID de jeu de données pour répertorier uniquement les modèles utilisant le jeu de données spécifié. Si omis, tous les modèles accessibles sont renvoyés |
Exemple de réponse :
{
"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
}
}
Paramètres de la réponse :
|
Parameter |
Type |
Description |
|
RequestId |
String |
ID de la requête |
|
Page |
Object |
Résultat paginé (voir ci-dessous) |
Objet Page :
|
Parameter |
Type |
Description |
|
Content |
List\ |
Liste des modèles. Chaque entrée suit la structure de l'objet Model de GetAsrLmModel |
|
TotalPages |
Integer |
Nombre total de pages |
|
TotalItems |
Integer |
Nombre total de modèles |
|
PageNumber |
Integer |
Numéro de la page actuelle |
|
PageSize |
Integer |
Taille de la page |
Entraînement et déploiement du modèle
AddDataToAsrLmModel
Ajoute un jeu de données d'entraînement à un modèle linguistique personnalisé.
Paramètres de la requête :
|
Parameter |
Type |
Required |
Description |
|
ModelId |
String |
Yes |
ID du modèle cible |
|
DataId |
String |
Yes |
ID du jeu de données à associer |
Exemple de réponse :
{
"RequestId": "9B232563-12C0-4242-AA27-C250E1BB****"
}
Le même jeu de données ne peut pas être ajouté deux fois au même modèle.
Le jeu de données doit être à l'état Ready. Le modèle ne doit pas être à l'état Training ou Deploying.
RemoveDataFromAsrLmModel
Retire un jeu de données d'entraînement d'un modèle linguistique personnalisé.
Paramètres de la requête :
|
Parameter |
Type |
Required |
Description |
|
ModelId |
String |
Yes |
ID du modèle |
|
DataId |
String |
Yes |
ID du jeu de données à détacher |
Exemple de réponse :
{
"RequestId": "7130914d32a3441db06747523675****"
}
Les jeux de données ne peuvent pas être retirés d'un modèle à l'état Training ou Deploying.
TrainAsrLmModel
Démarre l'entraînement d'un modèle linguistique personnalisé.
Paramètres de la requête :
|
Parameter |
Type |
Required |
Description |
|
ModelId |
String |
Yes |
ID du modèle à entraîner |
Exemple de réponse :
{
"RequestId": "3D922A91-68AA-4260-AFE4-C429832F****"
}
Les modèles à l'état Deploying ne peuvent pas être entraînés.
Une fois l'entraînement terminé avec succès, l'état du modèle passe automatiquement à Deployed. Un appel distinct à DeployAsrLmModel n'est pas requis.
DeployAsrLmModel
Déploie un modèle linguistique personnalisé.
Paramètres de la requête :
|
Parameter |
Type |
Required |
Description |
|
ModelId |
String |
Yes |
ID du modèle à déployer |
Exemple de réponse :
{
"RequestId": "D9DDA978-5D68-45A4-B840-E4BC45C7****"
}
Seuls les modèles à l'état Ready peuvent être déployés.
UndeployAsrLmModel
Annule le déploiement d'un modèle linguistique personnalisé.
Paramètres de la requête :
|
Parameter |
Type |
Required |
Description |
|
ModelId |
String |
Yes |
ID du modèle dont le déploiement doit être annulé |
Exemple de réponse :
{
"RequestId": "8417BA8E-2428-41D2-A849-396A0897****"
}
Avant d'annuler le déploiement d'un modèle, assurez-vous qu'il n'est utilisé par aucune application. Un modèle dont le déploiement est annulé devient immédiatement inactif.
Seuls les modèles à l'état Deployed peuvent voir leur déploiement annulé.
Opérations autorisées par état
NO indique qu'une opération n'est pas autorisée dans l'état actuel. Un tiret (-) indique que l'opération est autorisée.
|
Operation |
Fetching |
FetchingFailed |
Ready (Dataset) |
Empty |
Training |
TrainingFailed |
Ready (Model) |
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 |
- |
Codes d'erreur
En cas d'échec d'une opération, le corps de la réponse contient un code d'erreur et un message d'erreur. Utilisez ces informations pour diagnostiquer la requête.
|
Code d'erreur |
Description |
|
SLP.ASR_MODEL_ERROR |
Erreur liée au modèle linguistique personnalisé. |
|
SLP.NOT_FOUND |
L'ID spécifié n'est pas valide et la ressource est introuvable. |
|
SLP.PARAMETER_ERROR |
Un paramètre non valide a été spécifié lors de la création de la ressource. |
|
SLP.EXCEED_LIMIT |
La limite de ressources est dépassée ; aucune nouvelle ressource ne peut être créée. |
L'exemple suivant renvoie une erreur NOT_FOUND :
{
"RequestId": "E70F51F6-23E3-4681-B954-ABF32B89****",
"HostId": "nls-slp.ap-southeast-1.aliyuncs.com",
"Code": "SLP.NOT_FOUND",
"Message": "Model not found!"
}
Champs de la réponse :
|
Paramètre |
Type |
Description |
|
RequestId |
String |
ID de la requête |
|
HostId |
String |
Endpoint du serveur de la plateforme d'apprentissage automatique |
|
Code |
String |
Code d'erreur |
|
Message |
String |
Message d'erreur |
Exemple de code
L'exemple Java ci-dessous illustre le cycle de vie complet d'un modèle linguistique personnalisé : création d'un jeu de données d'entraînement, création du modèle, entraînement, déploiement et nettoyage des ressources. Il utilise CommonRequest du SDK Alibaba Cloud pour Java afin d'appeler les opérations POP API de type RPC.
Avant d'appeler les opérations, créez un AccessKey ID et un AccessKey secret pour l'authentification. Pour plus d'informations, consultez la rubrique Préparer le compte.
Dépendances
Ajoutez les dépendances Maven suivantes. Utilisez une version comprise entre 3.5.0 et 3.7.x de la bibliothèque principale du SDK Alibaba Cloud pour Java.
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.7.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
AsrLmModelPopApiDemo
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.profile.DefaultProfile;
public class AsrLmModelPopApiDemo {
private static String REGION = "ap-southeast-1";
private static final String STATUS_FETCHING = "Fetching";
private static final String STATUS_FETCHINGFAILED = "FetchingFailed";
private static final String STATUS_READY = "Ready";
private static final String STATUS_EMPTY = "Empty";
private static final String STATUS_TRAINING = "Training";
private static final String STATUS_TRAININGFAILED = "TrainingFailed";
private static final String STATUS_DEPLOYING = "Deploying";
private static final String STATUS_DEPLOYED = "Deployed";
private static IAcsClient client;
private AsrLmData asrLmData;
private AsrLmModel asrLmModel;
public AsrLmModelPopApiDemo(String akId, String akSecret) {
DefaultProfile profile = DefaultProfile.getProfile(REGION, akId, akSecret);
client = new DefaultAcsClient(profile);
asrLmData = new AsrLmData(client);
asrLmModel = new AsrLmModel(client);
}
/******************************* Manage training datasets *******************************/
// Create a training dataset.
public String createAsrLmData(String name, String fileUrl, String description) {
String dataId = asrLmData.createAsrLmData(name, fileUrl, description);
if (null == dataId) {
return dataId;
}
// Poll until the dataset reaches Ready status.
while (true) {
AsrLmData.LmData data = asrLmData.getAsrLmData(dataId);
if (null == data) {
dataId = null;
break;
}
if (data.Status.equals(STATUS_FETCHING)) {
System.out.println("Importing corpus data. Dataset ID: " + dataId);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else if (data.Status.equals(STATUS_FETCHINGFAILED)) {
System.out.println("Corpus import failed. Dataset ID: " + dataId);
asrLmData.deleteAsrLmData(dataId);
dataId = null;
break;
}
else if (data.Status.equals(STATUS_READY)) {
System.out.println("Corpus imported. Dataset ID: " + dataId);
break;
}
}
return dataId;
}
// Query a training dataset.
public AsrLmData.LmData getAsrLmData(String dataId) {
return asrLmData.getAsrLmData(dataId);
}
// Delete a training dataset.
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("Cannot delete dataset in current state: " + data.Status);
return false;
}
return asrLmData.deleteAsrLmData(dataId);
}
// List training datasets.
public AsrLmData.LmDataPage listAsrLmData() {
return asrLmData.listAsrLmData();
}
/******************************* Manage custom linguistic models *******************************/
// Create a custom linguistic model.
public String createAsrLmModel(String name, String baseId, String description) {
String modelId = asrLmModel.createAsrLmModel(name, baseId, description);
if (null == modelId) {
return modelId;
}
// Verify that the model enters the Empty state.
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("Model creation failed. Model ID: " + modelId);
asrLmModel.deleteAsrLmModel(modelId);
modelId = null;
break;
}
}
return modelId;
}
// Query a custom linguistic model.
public AsrLmModel.LmModel getAsrLmModel(String modelId) {
return asrLmModel.getAsrLmModel(modelId);
}
// Delete a custom linguistic model.
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("Cannot delete model in current state: " + model.Status);
return false;
}
return asrLmModel.deleteAsrLmModel(modelId);
}
// List custom linguistic models.
public AsrLmModel.LmModelPage listAsrLmModel() {
return asrLmModel.listAsrLmModel();
}
/**************************** Train and deploy ***************************/
// Add a training dataset to a custom linguistic model.
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("Dataset not ready: " + 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("Cannot add dataset while model is in state: " + model.Status);
return false;
}
return asrLmModel.addDataToAsrLmModel(dataId, modelId);
}
// Remove a training dataset from a custom linguistic model.
public boolean removeDataFromAsrLmModel(String dataId, String modelId) {
// Verify that the dataset is attached to this model.
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("Dataset is not attached to this model.");
return false;
}
// Check model state.
AsrLmModel.LmModel model = asrLmModel.getAsrLmModel(modelId);
if (null == model) {
return false;
}
if (model.Status.equals(STATUS_TRAINING)) {
System.out.println("Cannot remove dataset while model is training.");
return false;
}
return asrLmModel.removeDataFromAsrLmModel(dataId, modelId);
}
// Train a custom linguistic model.
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("Cannot train model in current state: " + model.Status);
return false;
}
boolean isTrain = asrLmModel.trainAsrLmModel(modelId);
if (!isTrain) {
return isTrain;
}
// Poll until the model reaches the Deployed state.
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("Training in progress. Model ID: " + modelId);
}
else {
System.out.println("Deploying. Model ID: " + modelId);
}
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else if (model.Status.equals(STATUS_TRAININGFAILED)) {
System.out.println("Training failed. Model ID: " + modelId);
isTrain = false;
break;
}
else if (model.Status.equals(STATUS_DEPLOYED)) {
System.out.println("Training complete, model deployed. Model ID: " + modelId);
isTrain = true;
break;
}
else {
System.out.println("Unexpected model state: " + model.Status);
isTrain = false;
break;
}
}
return isTrain;
}
// Deploy a custom linguistic model.
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("Cannot deploy model in current state: " + model.Status);
return false;
}
boolean isDeployed = asrLmModel.deployAsrLmModel(modelId);
if (!isDeployed) {
return isDeployed;
}
// Poll until the model reaches the Deployed state.
while (true) {
model = asrLmModel.getAsrLmModel(modelId);
if (null == model) {
isDeployed = false;
break;
}
if (model.Status.equals(STATUS_DEPLOYING)) {
System.out.println("Deploying. Model ID: " + modelId);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else if (model.Status.equals(STATUS_DEPLOYED)) {
System.out.println("Model deployed. Model ID: " + modelId);
isDeployed = true;
break;
}
else {
System.out.println("Cannot deploy model in current state: " + model.Status);
isDeployed = false;
break;
}
}
return isDeployed;
}
// Undeploy a custom linguistic model.
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("Cannot undeploy model in current state: " + model.Status);
return false;
}
boolean isUnDeployed = asrLmModel.undeployAsrLmModel(modelId);
if (!isUnDeployed) {
return isUnDeployed;
}
// Poll until the model reaches the Ready state.
while (true) {
model = asrLmModel.getAsrLmModel(modelId);
if (null == model) {
isUnDeployed = false;
break;
}
if (model.Status.equals(STATUS_DEPLOYING)) {
System.out.println("Undeploying. Model ID: " + modelId);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else if (model.Status.equals(STATUS_READY)) {
System.out.println("Model undeployed. Model ID: " + modelId);
isUnDeployed = true;
break;
}
else {
System.out.println("Cannot undeploy model in current state: " + 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);
/******************************* Manage training datasets *******************************/
String dataId;
// Create a training dataset.
String name = "TestTrainingDataset";
String fileUrl = "https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/SLP/SLPTest.txt";
String description = "The training dataset is created by using the API.";
dataId = demo.createAsrLmData(name, fileUrl, description);
if (dataId != null) {
System.out.println("Dataset created. ID: " + dataId);
}
else {
System.out.println("Failed to create dataset.");
}
// Query a training dataset.
AsrLmData.LmData data = demo.getAsrLmData(dataId);
if (data != null) {
System.out.println("Dataset info: " + JSONObject.toJSONString(data));
}
else {
System.out.println("Failed to query dataset.");
}
// List training datasets.
AsrLmData.LmDataPage page = demo.listAsrLmData();
if (page != null) {
System.out.println("Datasets: " + JSONObject.toJSONString(page));
}
else {
System.out.println("Failed to list datasets.");
return;
}
/************************** Manage custom linguistic models *********************************/
String modelId;
// Create a custom linguistic model using the universal Chinese base model.
String modelName = "TestLinguisticModel";
String baseId = "universal";
String modelDescription = "This is a sample description.";
modelId = demo.createAsrLmModel(modelName, baseId, modelDescription);
if (modelId != null) {
System.out.println("Model created. ID: " + modelId);
}
else {
System.out.println("Failed to create model.");
}
// Query a custom linguistic model.
AsrLmModel.LmModel model = demo.getAsrLmModel(modelId);
if (model != null) {
System.out.println("Model info: " + JSONObject.toJSONString(model));
}
else {
System.out.println("Failed to query model.");
}
// List custom linguistic models.
AsrLmModel.LmModelPage modelPage = demo.listAsrLmModel();
if (modelPage != null) {
System.out.println("Models: " + JSONObject.toJSONString(modelPage));
}
else {
System.out.println("Failed to list models.");
}
/******************************* Train and deploy *******************************/
// Add a training dataset to the model.
boolean isAdded = demo.addDataToAsrLmModel(dataId, modelId);
if (isAdded) {
System.out.println("Dataset added to model.");
}
else {
System.out.println("Failed to add dataset to model.");
}
// Train the model (auto-deploys on success).
boolean isTrained = demo.trainAsrLmModel(modelId);
if (isTrained) {
System.out.println("Model trained and deployed.");
}
else {
System.out.println("Failed to train model.");
}
// Undeploy the model.
boolean isUnDeployed = demo.undeployAsrLmModel(modelId);
if (isUnDeployed) {
System.out.println("Model undeployed.");
}
else {
System.out.println("Failed to undeploy model.");
}
// Redeploy the model.
boolean isDeployed = demo.deployAsrLmModel(modelId);
if (isDeployed) {
System.out.println("Model deployed.");
}
else {
System.out.println("Failed to deploy model.");
}
/***************************** Clean up *****************************/
// 1. Undeploy the model.
isUnDeployed = demo.undeployAsrLmModel(modelId);
if (isUnDeployed) {
System.out.println("Model undeployed.");
}
else {
System.out.println("Failed to undeploy model.");
}
// 2. Remove the dataset from the model.
boolean isRemoved = demo.removeDataFromAsrLmModel(dataId, modelId);
if (isRemoved) {
System.out.println("Dataset removed from model.");
}
else {
System.out.println("Failed to remove dataset from model.");
}
// 3. Delete the dataset.
boolean isDeletedData = demo.deleteAsrLmData(dataId);
if (isDeletedData) {
System.out.println("Dataset deleted.");
}
else {
System.out.println("Failed to delete dataset.");
}
// 4. Delete the model.
boolean isDeletedModel = demo.deleteAsrLmModel(modelId);
if (isDeletedModel) {
System.out.println("Model deleted.");
}
else {
System.out.println("Failed to delete model.");
}
}
}
AsrLmData
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import java.util.ArrayList;
import java.util.List;
public class AsrLmData {
public static class LmData {
public String Name;
public String Status;
public String Description;
public String Url;
public String CreateTime;
public String UpdateTime;
public String Id;
public String ErrorMessage; // Returned only on failure.
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;
}
/**
* Create a training dataset.
* @param name: Required. Dataset name.
* @param fileUrl: Required. URL of the training corpus file.
* @param description: Optional. Dataset description.
* @return: Dataset ID (String).
*/
public String createAsrLmData(String name, String fileUrl, String description) {
CommonRequest request = newRequest("CreateAsrLmData");
request.putBodyParameter(KEY_NAME, name);
request.putBodyParameter(KEY_URL, fileUrl);
request.putBodyParameter(KEY_DESCRIPTION, description);
CommonResponse response = null;
try {
response = client.getCommonResponse(request);
} catch (ClientException e) {
e.printStackTrace();
}
System.out.println("CreateAsrLmData: " + response.getData());
if (response == null || response.getHttpStatus() != 200) {
System.out.println(response.getData());
System.out.println("Failed to create dataset. HTTP status: " + response.getHttpStatus());
return null;
}
JSONObject result = JSONObject.parseObject(response.getData());
String dataId = result.getString(KEY_DATA_ID);
return dataId;
}
/**
* Query a training dataset.
* @param dataId: Dataset ID.
* @return LmData: Dataset details.
*/
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("Failed to query dataset. HTTP status: " + 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;
}
/**
* Delete a training dataset.
* @param dataId: Required. Dataset ID.
* @return: true if deleted successfully.
*/
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("Failed to delete dataset. HTTP status: " + response.getHttpStatus());
return false;
}
return true;
}
/**
* List training datasets with pagination.
* @param pageNumber: Optional. Page number (default: 1).
* @param pageSize: Optional. Page size, 10-100 (default: 10).
* @param modelId: Optional. Filter by model ID.
* @return: Paginated dataset list.
*/
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("Failed to list datasets. HTTP status: " + response.getHttpStatus());
return null;
}
JSONObject result = JSONObject.parseObject(response.getData());
String pageJson = result.getString(KEY_PAGE);
LmDataPage page = JSONObject.parseObject(pageJson, LmDataPage.class);
return page;
}
public LmDataPage listAsrLmData() {
return listAsrLmData(1, 10, null);
}
}
AsrLmModel
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import java.util.ArrayList;
import java.util.List;
public class AsrLmModel {
public static class LmModel {
public String Name;
public String Status;
public String Description;
public String CreateTime;
public String UpdateTime;
public String Id;
public String BaseId;
public String ErrorMessage; // Returned only on failure.
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;
}
/**
* Create a custom linguistic model.
* @param name: Required. Model name.
* @param baseId: Required. Base model ID (cannot be changed after creation).
* @param description: Optional. Model description.
* @return: Model 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("Failed to create model. HTTP status: " + response.getHttpStatus());
return null;
}
JSONObject result = JSONObject.parseObject(response.getData());
String modelId = result.getString(KEY_MODEL_ID);
return modelId;
}
/**
* Query a custom linguistic model.
* @param modelId: Model ID.
* @return: Model details.
*/
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("Failed to query model. HTTP status: " + 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;
}
/**
* Delete a custom linguistic model.
* @param modelId: Model ID.
* @return: true if deleted successfully.
*/
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("Failed to delete model. HTTP status: " + response.getHttpStatus());
return false;
}
return true;
}
/**
* List custom linguistic models with pagination.
* @param pageNumber: Optional. Page number (default: 1).
* @param pageSize: Optional. Page size, 10-100 (default: 10).
* @param dataId: Optional. Filter by dataset ID.
* @return: Paginated model list.
*/
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("Failed to list models. HTTP status: " + 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);
}
/**
* Add a training dataset to a custom linguistic model.
* @param dataId: Dataset ID.
* @param modelId: Model ID.
* @return: true if added successfully.
*/
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("Failed to add dataset to model. HTTP status: " + response.getHttpStatus());
return false;
}
return true;
}
/**
* Remove a training dataset from a custom linguistic model.
* @param dataId: Dataset ID.
* @param modelId: Model ID.
* @return: true if removed successfully.
*/
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("Failed to remove dataset from model. HTTP status: " + response.getHttpStatus());
return false;
}
return true;
}
/**
* Train a custom linguistic model.
* @param modelId: Model ID.
* @return: true if training started successfully.
*/
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("Failed to train model. HTTP status: " + response.getHttpStatus());
return false;
}
return true;
}
/**
* Deploy a custom linguistic model.
* @param modelId: Model ID.
* @return: true if deployment started successfully.
*/
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("Failed to deploy model. HTTP status: " + response.getHttpStatus());
return false;
}
return true;
}
/**
* Undeploy a custom linguistic model.
* @param modelId: Model ID.
* @return: true if undeployment started successfully.
*/
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("Failed to undeploy model. HTTP status: " + response.getHttpStatus());
return false;
}
return true;
}
}