设为首页 加入收藏

TOP

如何使用OLAMI自然语言理解开放平台API制作自己的智能对话助手小程序(一)
2017-10-10 16:33:23 】 浏览:5661
Tags:如何 使用 OLAMI 自然语言 理解 开放 平台 API 制作 自己 智能 对话 助手 程序

我们经常在电影中看到机器和人对答如流,随着越来越多自然语言开放平台的出现,IT爱好者制作一个自己的APP或者小玩具等逐渐可以变为现实。
自然语言对话即你的APP或者你制作的工具、机器人等能够对用户输入的语音或者文字做出准确的回应。

比如,在微信公众号中,经常要求用户通过输入1、2或者其他关键字来获取相应的服务,而对于句子却无法正确理解。比如,你输入“中秋活动”,这个几个字如果符合关键字的要求,那就会弹出相应的服务。但如果你输入的是“我想参加今年的中秋活动”,“参加中秋活动”等可能就无法进入活动网页了。

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

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

比如,用户问:今天上海的天气

应用回答:今天上海的天气为。。。。。

如果用户接着问: 那北京呢

你的应用能直接回答:今天北京的天气。。。。。

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

目前提供智能语音语义理解的API接口不少,使得自己制作语义语音小助手成为现实。各开放平台的情况可以看我的另一篇博客:热门自然语言理解和语音API开发平台对比

我选择了欧拉蜜人工智能开放平台来完成我的快递小助手。

要使用OLAMI开放平台首先要了平台的提供的功能和我们需要做的事情
我使用微信小程序开发工具写了一个工具类的小程序,可以参考我的另一篇博客 微信小程序+OLAMI自然语言API接口制作智能查询工具--快递、聊天、日历等

代码下载 CSDN代码

语法文件下载CSDN语法文件下载
代码测试和体验
智能生活宝小助手

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

OLAMI语义理解流程图
************

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

  1. 语法,我的理解就是描述自然语言句子的一套规则,看官方文档也确实是这样。比如:“帮我查个快递”,你用一堆符号描述出来,这个组合起来的符号就叫语法。
  2. 自然语言,也叫语料。这个不用多说,我们平时说的话是什么,那就是什么。
  3. 语料的有效信息,即输入的句子中包含的关键信息,你的应用程序获取到这些这些关键信息之后,可以做相应的处理。比如:‘请你帮我查个快递’,其实这句话隐藏的含义是“查快递”,其他的词汇信息不需要关心。
  4. Answer---这个在OLAMI平台中指你写的语法的默认回复,不需要应用程序做深度处理的,这个暂时可以忽略。
  5. 应用程序----这就是你自己的APP了。
  6. 结果----就是用户输入一句话,你的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相关定义。
***

名称 类型 内容
查询_动词 Rule 查询|查一下|查查|查
快递_名词 Rule 快递|速递|物流|速运|快运
expname Ext Slot
expnumber Ext Slot
查快递1 Grammar <查询_动词><快递_名词>{@=query}
查快递_名称_运单号1 Grammar <查询_动词>< expname ><快递_名词>{@=query_name_num}

? ?你在写Grammar之前要确保Grammar中需要的Rule,Slot,Template已经定义好,并且想好自己的操作modifier.
? ?每写好一个Grammar可以通过“例句测试”检查你要支持的句子是不是被当前的Grammar匹配,这个Grammar希望支持的句子都包含进去了,你再提交,然后发布。
发布之后你才能通过API接口进行访问。

三 开发自己的APP

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

? ?https

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇pc端的企业网站(IT修真院test8).. 下一篇JavaScript 值类型和引用类型的初..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目