今年微软开发者大会Build 2017上展示了一款Invoke智能音箱,受到了媒体和大众的广泛关注。近两年,不少大公司纷纷涉足该领域,使得智能音箱逐渐成为一款热门的人工智能家用电器。智能音箱的兴起也改变了人们和家用电器之间的“沟通方式”:从动手到动嘴。“播放一些周杰伦的歌”,“明天北京的天气怎么样”… 对着智能音箱说出自己想让它做的事情,这些之前在科幻电影里才会出现的桥段逐渐变成了现实。那么,智能音箱是如何听懂人类指令的呢?

智能音箱听懂人类指令的过程,其实就是语义理解的过程,可以被分解成为两个子任务:意图识别(intention classification)和实体抽取(entity extraction)。意图识别的目标是甄别用户的对话意图,也就是用户希望完成一件什么工作?而实体抽取的目标则是理解用户对话中所提供的和具体工作相关的参数(实体),例如时间、地点等。比如:“播放一些周杰伦的歌”所对应的意图是“播放音乐”,其中包含一个艺人实体,实体的值是“周杰伦“。然后根据语义理解的结果,智能音箱就可以做出正确的操作来满足用户的需求。

​智能音箱的智能程度取决于其能够理解的意图以及实体的数量和复杂度,因此如何高效地开发语义理解模块成为这场智能音箱竞赛中的最关键一环。然而,开发语义理解模块需要自然语言处理(NLP)的专业知识和经验,而这些知识和经验又需要长年累月的积累,所以可以胜任的开发者凤毛麟角,广大非NLP专业的开发者则有心无力。那么如何帮助非NLP专业的开发者解决自然语言理解这一开发瓶颈呢?

微软语言理解智能服务 - LUIS​

LUIS (Language Understanding Intelligent Service,https://www.luis.ai) 是微软发布的面向开发者的自然语言语义理解模块开发服务。微软亚洲研究院大数据挖掘组负责研发了LUIS的新一代算法。LUIS的使命是让非NLP专业的开发者能够轻松地创建和维护高质量的自然语言理解模型,并无缝对接到相关的智能应用当中。

通过LUIS平台,非NLP专业的开发者可以轻松创建一个LUIS App,并通过标注所期望的输入(自然语言指令)和输出(意图和实体)来进一步“培养” 它。在整个开发过程中,开发者并不需要了解背后算法的细节,只需要清晰地定义自己需要让机器理解的用户意图和实体即可。下面我们就来介绍一下LUIS的开发流程和其背后的技术细节。

LUIS的开发流程​

LUIS的开发流程更像是一个教学过程:开发者是老师,LUIS App是学生。老师通过不停地告知学生正确的语义解析结果来完成教学。一个好的教学过程是一个“训练+实践”的闭环:标注一定量的起始数据;训练得到语义理解模型;对模型进行必要的测试;发布模型并应用到真实用户场景;甄选应用日志中的语句;继续标注并更新模型。这个过程周而复始,通过不停地迭代开发,不停地改善理解模型,使其越来越接近人类的理解能力。

​数据标注

LUIS开发者可以在界面上轻松地进行在线数据标注。首先,在对应的用户意图中输入自然语言指令,例如:在“播放音乐” 中输入一句“播放一些周杰伦的歌” ;然后,通过鼠标选取实体并指定类型,例如:选择“周杰伦”,指定其为艺人实体。LUIS支持标注数据的导入和导出,因此如果开发者已经有标注过的数据,那么就可以直接转换为LUIS的标注数据JSON格式进行导入。

​模型训练

LUIS的模型训练过程极其简单,开发者只需点击一下 “训练” 按钮,LUIS便会提供一套全自动的机器学习解决方案:应用深度学习算法,预设绝大部分常用的文本特征,并加入从大数据语料中提取出的语义特征,从而为不同的语义理解场景提供通用的机器学习解决方案。训练的时间会因为标注数据量的不同而各异,标注数据越多,训练所需的时间越长。同时,训练时间还与LUIS App所支持的意图和实体个数相关,意图和实体越多,训练时间也越长。

除了预设的特征之外,LUIS还允许用户自定义新的语义特征,包括短语列表特征(phrase list)和正则表达式特征(regular expression)。前者主要用于定义若干短语列表,且通常每一个列表中的短语均可相互替换,而后者主要用于定义若干正则表达式。通过应用这些用户自定义的短语列表特征和模式特征,再结合已有的标记数据,LUIS的深度学习模型就可以增强其自身的泛化能力,从而能够以更少的标记数据训练得到合适的模型,进而达到更好的预测效果。

在定义短语列表特征的过程中,LUIS通过其语义词典(semantic dictionary)挖掘技术,能够根据用户输入的若干短语,自动从海量的网络数据中智能地发现与其相似的短语,并推荐给用户,有效地提升了用户定义短语列表特征的效率。目前该推荐功能主要面向英文语言,我们也正在致力于将其推广到包括中文在内的其他语言。

​模型发布

对于训练完成的模型,开发者可以对其进行性能测试。LUIS为开发者提供了两种在线测试方法:交互式测试和批量测试。使用交互式测试时,开发者可以直接输入自然语言语句,然后目测模型输出是否和预期一致。而使用批量测试时,开发者需要上传一份测试数据,LUIS会通过比对模型输出和测试数据的期望输出来给出更为具体的精度和召回率等统计数据,并且LUIS还会对每一项意图和实体的结果绘制出Confusion Matrix来帮助开发者找到有待提高的实例。通过测试的LUIS App只需轻轻一点就可以发布到微软的Azure云平台上,变成一个立即可用的API。开发者通过Http的get方法,就可以将开发的LUIS App接入到其他应用中。

主动学习

LUIS App的开发是一个不停迭代的过程,通过不停地增加标注数据来让其变得更加智能。同时,LUIS希望最大化开发者的标注收益,也就是说,通过更少的标注来获得更大的模型性能提升。发布之后的App会逐渐积累真实用户的请求日志,然后通过主动学习(Active Learning)从这些日志中寻找出对于模型更为有益的语句让开发者标注。实验表明,通过甄选数据的方式,模型的精度和召回率的提升都明显高于随机选择标注数据的方式,这让开发过程变得事半功倍。也正是通过主动学习,LUIS对于训练数据的数量要求大大降低,可以在较少的训练数据下获得不错的性能。

丰富的内建工具

为了帮助用户快速构建其应用,LUIS提供了一系列的内建工具,包括内建应用场景(prebuilt domain)和内建实体(prebuilt entities)。

内建应用场景包括日历(calendar)、天气(weather)等多个较为通用的类别,每一个内建场景均包含了预定义好的意图和实体,用户可直接添加合适的内建场景到其应用中,并进行修改和扩展。

内建实体目前主要包括日期与时间(date time)、基数词(number)、序数词(ordinal)、百分数(percentage)、年龄(age)、温度(temperature)等多种应用较为广泛的类别,用户可以通过勾选添加所需的内建实体到其应用中,无需从头开始自行创建。事实上,大部分LUIS内建实体同时具有识别和解析的功能,能够从输入的语句中抽取出相应的实体内容,并将其解析为标准格式,例如,基数词可以将识别出的3k解析为3000的标准数字形式,便于用户后续的处理。

微软自然语言理解平台LUIS让广大非NLP专业的开发者也可以加入到语义理解模型的开发队伍中来,从而真正让各种应用都实现智能化,创造出更多的用户价值。我们也将不懈努力,将LUIS做的更加易用和高效,让它成为开发者的一款利器。

你也来试试看?官方网站:https://www.luis.ai/

微软自然语言理解平台LUIS:从零开始,帮你开发智能音箱的更多相关文章

  1. 如何使用OLAMI自然语言理解开放平台API制作自己的智能对话助手小程序

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

  2. java自然语言理解demo,源码分享(基于欧拉蜜)

    汇率换算自然语言理解功能JAVA DEMO >>>>>>>>>>>>>>>>>>>&g ...

  3. 汇率换算自然语言理解功能JAVA DEMO

    >>>>>>>>>>>>>>>>>>>>>>>> 欢迎转 ...

  4. 基于TensorRT的BERT实时自然语言理解(上)

    基于TensorRT的BERT实时自然语言理解(上) 大规模语言模型(LSLMs)如BERT.GPT-2和XL-Net为许多自然语言理解(NLU)任务带来了最先进的精准飞跃.自2018年10月发布以来 ...

  5. 基于TensorRT的BERT实时自然语言理解(下)

    基于TensorRT的BERT实时自然语言理解(下) BERT Inference with TensorRT 请参阅Python脚本bert_inference.py还有详细的Jupyter not ...

  6. 支持语音识别、自然语言理解的微信小程序(“遥知之”智能小秘)完整源码分享

    记录自己搭建https的silk录音文件语音识别服务的调用过程,所有代码可在文中找链接打包下载 >>>>>>>>>>>>> ...

  7. 《自然语言理解(Natural Language Understanding)》(2016-03-17)阅读笔记

    原文链接:https://yq.aliyun.com/articles/8301 作者:李永彬 发布时间:2016-03-17 16:37:47 自然语言理解(Natural Language Und ...

  8. 从零开始学习OpenCL开发(一)架构【转】

    转自:http://blog.csdn.net/leonwei/article/details/8880012 多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/ ...

  9. 【并行计算-CUDA开发】从零开始学习OpenCL开发(一)架构

    多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/article/details/8880012 本文将作为我<从零开始做OpenCL开发>系列文章的 ...

随机推荐

  1. 关于Spring MVC 中地址栏访问 /WEB-INF下的.jsp

    WEB-INF是对资源的保护,直接在地址栏访问WEB-INF目录下的页面,会显示404,关于为什么要把页面放在WEB-INF下,可以自行百度 在这里我是用SpringMVC 对WEB-INF目录下的页 ...

  2. Webservice返回json数据格式

    问题: 我将结果内容用字符串拼接成Json数据并返回的时候,会在结果前面添加xml头部,结果如下. <span ><string xmlns="http://tempuri ...

  3. Codeforces 585D Lizard Era: Beginning

    Lizard Era: Beginning 折半之后搜就完事了, 直接存string字符串卡空间, 随便卡卡空间吧. #include<bits/stdc++.h> #define LL ...

  4. 【Java】 剑指offer(39) 数组中出现次数超过一半的数字

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如 ...

  5. Ubuntu 安装 H3C iNode 客户端

    Ubuntu 安装 H3C iNode 客户端 ​ 之前在网上找了很多方法,也找了不少的安装包,却由于各种各样的问题,最后都没有成功(因为自己太菜).而学校用的就是iNode,客户端装不了,只能用Wi ...

  6. IdentityServer4-用EF配置Client(一)

    一.背景 IdentityServer4的介绍将不再叙述,百度下可以找到,且官网的快速入门例子也有翻译的版本.这里主要从Client应用场景方面介绍对IdentityServer4的应用. 首先简要介 ...

  7. springboot Autowired BeanNotOfRequiredTypeException

    现象 org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'xxxxImpl' is expect ...

  8. SpringMvc 文件下载 详解

    最近SSM 需要用到文件下载,以前没用过,在百度上找了好久发现没有一篇博客,对于此段代码进行详细讲解, 这里是本人的个人总结,跟大家分享一下!!!不谢 /** * 文件下载 * ResponseEnt ...

  9. Javascript实现对象的创建

    能使用{}创建对象就不要使用new Object,能使用[]创建数组就不要使用new Array,JS中字面量的访问速度要高于对象. 1.通过object构造函数创建单个对象 var o = new ...

  10. HDU.5628.Clarke and math(狄利克雷卷积 快速幂)

    \(Description\) \[g(i)=\sum_{i_1|i}\sum_{i_2|i_1}\sum_{i_3|i_2}\cdots\sum_{i_k|i_{k-1}}f(i_k)\ mod\ ...