日记大全

日记大全 > 句子大全

实例解析:使用OLAMI开放平台的API接口制作自己的语音助手

句子大全 2008-07-17 01:33:15
相关推荐

“实际上,我们希望的是做到像许多语音助手一样,能够正确识别用户说的话,并做出对应回复,甚至希望能够理解上下文。……”今天为大家分享实例的这位开发者,通过OLAMI开放平台的API接口开发了一款快递小助手应用。以下是正文内容,还不清楚如何操作的朋友,赶紧来学习一下吧。

我们经常在电影中看到机器和人对答如流,随着越来越多自然语言开放平台的出现,IT爱好者制作一个自己的 APP 或者小玩具等逐渐可以变为现实。

自然语言对话即你的 APP 或者你制作的工具、机器人等能够对用户输入的语音或者文字做出准确的回应。

比如,在微信公众号中,经常要求用户通过输入1、2或者其他关键字来获取相应的服务,而对于句子却无法正确理解。

例如,你输入“中秋活动”,这个几个字如果符合关键字的要求,那就会弹出相应的服务。但如果你输入的是“我想参加今年的中秋活动”,“参加中秋活动”等可能就无法进入活动网页了。

再比如,很多智能玩具,你只能跟它进行简单的对话,因为它也是只能抓取简单的关键字。

实际上,我们希望的是做到像许多语音助手一样,能够正确识别用户说的话,并做出对应回复,甚至希望能够理解上下文。

比如:

用户:今天上海的天气应用:今天上海的天气为……用户:那北京呢应用:今天北京的天气……

而不需要输入完整的句子“今天北京的天气”。

目前提供智能语音语义理解的 API 接口不少,我选择了使用欧拉蜜人工智能开放平台(以下简称“ OLAMI 开放平台”)来完成我的快递小助手应用开发。

要使用 OLAMI 开放平台首先要了平台提供的功能和我们需要做的事情。

下图简单描述了 OLAMI 语言理解开放平台的工作过程,我们要做的工作其实就是图中红色的标志1和标志2,即写语法和写自己的应用程序。而你的应用程序用户只需要输入想说的话,即自然语言句子,就可以得到你的应用程序处理的结果。

一、了解几个关键词的含义

语法。我的理解就是描述自然语言句子的一套规则,看官方文档也确实是这样。比如:“帮我查个快递”,你用一堆符号描述出来,这个组合起来的符号就叫语法。自然语言,也叫语料。这个不用多说,我们平时说的话是什么,那就是什么。语料的有效信息。即输入的句子中包含的关键信息,你的应用程序获取到这些这些关键信息之后,可以做相应的处理。比如:“请你帮我查个快递”,其实这句话隐藏的含义是“查快递”,其他的词汇信息不需要关心。Answer。这个在 OLAMI 开放平台中指你写的语法的默认回复,不需要应用程序做深度处理的,这个暂时可以忽略。应用程序。这就是你自己的 APP 了。结果。就是用户输入一句话,你的 APP 回复结果。比如,用户输入“查快递1234”,你应该回复“1234这个快递的物流信息”。再比如“今天的天气”,你应该列出今天的天气状况,而不是昨天的天气,也不是今天的日期。

二、写语法

调用 API 接口之前,首先要写自己的语法,也就是你要支持哪些句子,当然你也可以直接使用 OLAMI 开放平台提供的内置语法,如果它的语法符合你的要求的话。在这里,我说说怎么写自己的语法。

1、首先在官网上注册,然后进入开发系统中“我的应用”。

2、确定自己的模块

在正式写语法之前,首先得弄明白怎么写语法,写什么样的语法。

第一步得选择你的应用程序支持的模块,比如是查天气、播放音乐、还是智能家控制。

这个模块,其实可以称之为领域,因为你不可能把人类所有的语言都涵盖,你的 APP 一般都是针对某个或者某几个领域。我选择的是快递 APP。所以我要支持的都是快递的说法。

确定好模块之后,你要思考一下你的应用程序希望从用户的说法中得到哪些有用信息,以及用户会有哪些操作。比如快递查询,我需要有“运单号”,“快递公司名称”这两个有效信息,另外,我的应用程序仅提供快递的查询业务。

我大致知道如果用户说“帮我查一下圆通快递12344”的时候,包含的有效信息很全,我可以直接输出物流信息给他。但如果用户仅仅说“我想查快递”,这时他仅表达了想查的意愿,我的应用程序应该提示用户输入快递单号。

在 OALMI 的语法中,使用“Slot”来抓取有效信息,它就像一个函数的参数,它的内容由用户决定。比如运单号和快递公司名称,每个用户的内容都是不同的。

因此进入 OLAMI 的 NLI 系统之后,我首先“新增”一个模块,名字为”expressage”,然后进入这个模块开始写语法。

3、确定有效信息 slot

就如上面所述,我需要“运单号”和“快递公司名称”这两个关键信息,因此,我定义了”expnumber”和”expname”这两个 slot。

我选择的类型均为“ext”,因为用户有可能会直接输入运单号,而运单号的格式无法确定,所以我选择 ext 来抓取。

快递公司的名称也是有限的,其实选择 internal 格式的就可以了,但是我选择后面通过 ext 赋值的方式给 slot 赋值,这样有利于语法维护。(很拗口是吧?可以暂时不管)

4、确认 APP 的功能

你的 APP 准备提供什么功能呢?查询?显示?打开?关闭?OLAMI 语法需要用 modifier 来描述操作信息。其实也就是一个标志来告诉应用程序这句话的意图是什么。

比如“打开灯”,意图是打开,可以定义一个 modifier “open”。

“打开空调”的意图同样是打开,你只要用沿用已经定义的“open”即可。

我的快递 APP 很简单,我就是提供查询功能,因此我定义一个 global modifier “query”。

5、了解 grammar,rule,template

其实刚开始只要知道 grammar 和 rule 就可以了。

rule 即同义词汇的集合,词汇之间用“|”隔开,表示或的关系。

grammar 即描述你要匹配的句子的语法。

比如你希望匹配句子”查询快递”,可以将“查询”的同义词定义一个 rule,“快递”同义词汇定义一个 rule,我建议名称能使用中文就使用中文,这样看起来比较直观。下表中是可以匹配”查询快递”这句话的 grammar 相关定义。

你在写 grammar 之前要确保 grammar 中需要的 rule,slot,template 已经定义好,并且想好自己的操作 modifier。

每写好一个 grammar 可以通过“例句测试”检查你要支持的句子是不是被当前的grammar 匹配,这个 grammar 希望支持的句子都包含进去了,你再提交,然后发布。

发布之后你才能通过 API 接口进行访问。

三、开发自己的APP

1、你需要从语义理解 API 接口获取什么信息?

https 的返回,比如 status 就不再介绍了。

说白了,开发平台解析你的语法之后,就是会告诉你这句话中的 slot 和modifier,以及你的模块名称。

Slot 根据你选择的类型不同,你获取的内容不同。比如 ext 类型的,你可以拿到 slot 的名称和 slot 的值。

Datetime 类型,即你的 slot 是时间,你还可以拿到时间的毫秒数,起始时间等。

Number 类型,表示你只会抓取数字,会得到数字的计算值等。

Modifier 就是你自己定义的要支持的操作,只要按照他们规定的格式命名就好。

2、创建应用

应用可以包含多个模块,具体包含哪些模块也是由你自己决定。OLAMI 默认支持了“聊天”,“百科”,“查询日期”三个模块。如果你不需要可以去掉。

比如我在输入框中“查快递”就可以看到 JSON 格式的输出,如下图显示:

3、查看应用的 key

我使用的是小程序访问,相关代码如下,你代码下载包的 input.js 里可以看到:

根据获取到的 semantics 内容提供服务。

我的处理逻辑是根据不同的 modifier 进行相应的操作,不同的操作下又要检查slot,代码如下:

至此,OLAMI API 接口的基本调用工作已经完成,至于你要添加语言识别,语法完善,模块添加等就看自己的需求了。

最后说一下语法文件 .osl 下载之后如何导入。你创建好模块之后,直接选择上传 OSL 文件即可。

注:本文撰写于2017年7月18日,笔者文中使用的截图均为老版欧拉蜜开放平台界面,现欧拉蜜开放平台界面已多次升级,因此会有些出入。

阅读剩余内容
网友评论
相关内容
拓展阅读
最近更新