微软自然语言理解平台LUIS:从零开始,帮你开发智能音箱
今年微软开发者大会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:从零开始,帮你开发智能音箱的更多相关文章
- 如何使用OLAMI自然语言理解开放平台API制作自己的智能对话助手小程序
我们经常在电影中看到机器和人对答如流,随着越来越多自然语言开放平台的出现,IT爱好者制作一个自己的APP或者小玩具等逐渐可以变为现实. 自然语言对话即你的APP或者你制作的工具.机器人等能够对用户输入 ...
- java自然语言理解demo,源码分享(基于欧拉蜜)
汇率换算自然语言理解功能JAVA DEMO >>>>>>>>>>>>>>>>>>>&g ...
- 汇率换算自然语言理解功能JAVA DEMO
>>>>>>>>>>>>>>>>>>>>>>>> 欢迎转 ...
- 基于TensorRT的BERT实时自然语言理解(上)
基于TensorRT的BERT实时自然语言理解(上) 大规模语言模型(LSLMs)如BERT.GPT-2和XL-Net为许多自然语言理解(NLU)任务带来了最先进的精准飞跃.自2018年10月发布以来 ...
- 基于TensorRT的BERT实时自然语言理解(下)
基于TensorRT的BERT实时自然语言理解(下) BERT Inference with TensorRT 请参阅Python脚本bert_inference.py还有详细的Jupyter not ...
- 支持语音识别、自然语言理解的微信小程序(“遥知之”智能小秘)完整源码分享
记录自己搭建https的silk录音文件语音识别服务的调用过程,所有代码可在文中找链接打包下载 >>>>>>>>>>>>> ...
- 《自然语言理解(Natural Language Understanding)》(2016-03-17)阅读笔记
原文链接:https://yq.aliyun.com/articles/8301 作者:李永彬 发布时间:2016-03-17 16:37:47 自然语言理解(Natural Language Und ...
- 从零开始学习OpenCL开发(一)架构【转】
转自:http://blog.csdn.net/leonwei/article/details/8880012 多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/ ...
- 【并行计算-CUDA开发】从零开始学习OpenCL开发(一)架构
多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/article/details/8880012 本文将作为我<从零开始做OpenCL开发>系列文章的 ...
随机推荐
- NodeMCU入门(1):刷入At固件,透传数据到TcpServer和Yeelink平台
准备工作 1. NodeMCU LUA ESP8266 CP2102 WIFI Internet Development Board,仔细看背面可以看出自带cp2102模块,可以通过普通的手机充电 ...
- 被忽视的META标签之特效(页面过渡效果)
在web设计中使用js可以实现很多的页面特效,然而很多人却忽视了HTML标签中META标签的强大功效,其实meta标签也可以实现很多漂亮的页面过渡效果. META标签是HTML语言HEAD区的一个辅助 ...
- 【noip模拟赛4】汽艇 模拟
描述 一天sxc,zsx,wl到gly坐汽艇,本来和其他的人约好了一起去,结果被放了鸽子,3人便只有一人负担x元去坐汽艇(很贵哦).坐了才发现如果汽艇上人多了位置就不宽敞,就不好玩了.而3个人貌似是最 ...
- JQuery框架2.位置属性|筛选方法|事件
1.位置属性 jquery的css position获取匹配元素相对父元素的偏移位置:offset获取匹配元素在当前视口的相对偏移,返回的对象包含两个整型属性:top 和 left $("p ...
- 第八章| 1. MySQL数据库|库操作|表操作
1.初识数据库 我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个 专门的处理软件,这就是mysql等数据库管理软件的 ...
- C#简单画图Draw研究学习
命名空间:using System.Drawing; Graphics类:有道词典翻译 在C#里是封装一个 GDI+ 绘图图面,此类不能被继承. Pen类:定义用于绘制直线和曲线的对象. 此类不能被继 ...
- 2n皇后问题【dfs】
<题目链接> 题目描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后 ...
- poj2184 Cow Exhibition【01背包】+【负数处理】+(求两个变量的和最大)
题目链接:https://vjudge.net/contest/103424#problem/G 题目大意: 给出N头牛,每头牛都有智力值和幽默感,然后,这个题目最奇葩的地方是,它们居然可以是负数!! ...
- 使用 Spring Boot 搭建一套增删改查(无多余代码)
前言 这是我学习 Spring Boot 的第三篇文章,终于可以见到效果了.错过的同学可以看看之前的文章 我们为什么要学习 Spring Boot Spring Boot 入门详细分析 在入门的基础上 ...
- MyBatis之ResultMap标签
ResultMap标签基本作用:建立SQL查询结果字段与实体属性的映射关系信息 在深入ResultMap标签前,我们需要了解从SQL查询结果集到JavaBean或POJO实体的过程. 1. 通过JDB ...