IM类意图识别概述
基本概念
IM类意图识别,是指利用机器学习技术,针对用户短信或聊天类APP等IM应用的文本消息进行内容分析,并识别出消息内容代表的用户意图。
运作机制
基于语义分析,利用机器学习的相关技术识别并理解用户消息的意图,通过IM意图识别,可以衍生出各种智能的应用场景,使智能设备更聪明,更懂用户。
基于IM意图识别接口,可以对文本消息中包含的用户意图进行自动分析识别。
目前仅开放支持通知消息类的三个意图的智能识别(称为“意图模块”),包括:
还款提醒通知
还款成功通知
未接来电通知
约束与限制
当前只支持中文语境。
目前仅支持以下三个意图的智能识别:还款提醒通知、还款成功通知、未接来电通知。
IM类意图识别的输入文本限制在500个字符以内,字符数超出限制将返回参数错误,文本需要为UTF-8格式,格式错误不报错,但会导致分析结果错误。
Engine支持多用户同时接入,但是不支持同一用户并发调用同一个特性。如同一个特性被同一进程同一时间多次调用,则返回系统忙错误。不同进程调用同一特性,则同一时间只有一个进程业务在处理,其他进程进入队列排队。
IM类意图识别开发
场景介绍
生成智能卡片
应用于生成智能卡片,例如:生成未接来电通知卡片。当来电未被用户接听(呼叫超时未接通或被用户主动拒绝接通),电信运营商或服务提供商会向用户发送短信提醒。当用户终端设备接收到短信提醒,即可由IM意图识别特性分析出未接来电通知短信的意图,并可以分析出呼叫方电话号码及呼叫时间,生成智能卡片,方便用户查看。
开发下拉pad屏
应用于开发下拉pad屏。与生成智能卡片的场景类似,可识别用户消息文本的意图,在下拉pad屏生成并显示重要的信息,方便用户随时查看。
文本消息意图识别
主要针对用户短信或聊天类文本消息进行意图识别,目前仅开放支持了通知消息类的三个意图,分别为:还款提醒通知、还款成功通知、未接来电通知。
接口说明
主要接口
IM类意图识别提供了初始化、同步、异步、解绑四个接口,如表1所示。
表1 接口描述
接口输入值说明
- isLoadModel:是否在初始化时加载模型。
- requestType:请求类型,取值可以从ohos.ai.nlu.NluRequestType选择。目前只支持端侧(REQUEST_TYPE_LOCAL)一种请求类型。
- requestData的JSON格式如下:
- 接口返回值说明
返回值ResponseResult中responseResult为JSON字符串,体现文本分词的结果:
详细意图说明
- 还款通知表示还款通知的意图分析时,“intentions”子参数描述见下表:
- 表2 意图详情
- 已还款通知
表示已经还款成功的通知,“intentions”子参数描述见下表:
- 未接来电通知
表示未接来电的意图,“intentions”子参数描述见下表:
开发步骤
在使用IM类意图识别API时,将实现IM类意图识别的相关的类添加至工程。
import ohos.ai.nlu.ResponseResult; // 接口返回的结果类 import ohos.ai.nlu.NluClient; // 接口客户端类 import ohos.ai.nlu.NluRequestType; // 接口请求类 import ohos.ai.nlu.OnResultListener; // 异步函数,执行成功的回调结果类 import ohos.ai.nlu.util.NluError; // 调用接口返回的成功/错误码信息
使用NluClient静态类进行初始化,通过异步方式获取服务的连接。
context:应用上下文信息,应为ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的实例或子类实例。
listener:初始化结果的回调,可以传null。
isLoadModel:是否加载模型,如果传true,则在初始化时加载模型;如果传false,则在初始化时不加载模型。
NluClient.getInstance().init(context, new OnResultListener<Integer>(){ @Override public void onResult(Integer result){ // 初始化成功回调,在服务初始化成功调用该函数 } }, true);
确认第二步初始化接口调用成功后,调用获取IM类意图识别方法得到分析结果,调用实例。
同一个接口同时提供了同步和异步两种方法,开发者可根据自己需要进行选择。还款通知中的时间不应早于当前时间。
同步接口:
String requestJson = "{text:'您个人信用卡07月账单¥198.00,还款日07月27日【XX银行】'}"; ResponseResult responseResult = NluClient.getInstance().getChatIntention(requestJson, NluRequestType.REQUEST_TYPE_LOCAL); if (responseResult != null) { // 获取接口返回结果 String result = responseResult.getResponseResult(); }
异步接口:
String requestJson = "{text:'您个人信用卡07月账单¥198.00,还款日07月27日【XX银行】'}"; // 调用接口 NluClient.getInstance().getChatIntention(requestJson, NluRequestType.REQUEST_TYPE_LOCAL, new OnResultListener <ResponseResult> () { @Override public void onResult(ResponseResult respResult) { // 异步返回 if (respResult != null && respResult.getCode() == NluError.SUCCESS_RESULT) { // 获取接口返回结果 String result = respResult.getResponseResult(); } } });
解绑服务。
/* 功能使用完毕,销毁上下文,释放资源。 */ NluClient.getInstance().destroy(context);