Naturali 奇点机智创始人兼 CEO 邬霄云博士受 Datafun 社区的邀请,与NLP从业者分享了机器阅读理解技术及其应用。
以下是邬博士分享的全文:
奇点机智在今年百度举行的中文阅读理解大赛上拿了冠军,而且比第二名高出三个点左右。我听到过许多的反馈,大家对机器阅读理解的技术这方面比较感兴趣,那么今天要讲的东西呢,主要分成三部分:
第一部分是问答系统和阅读理解的基本概念,介绍一下比较传统的模块化的问答系统;第二部分,是讲一个比较新的端到端的系统技术,我们在百度的阅读理解竞赛中夺冠正是使用的这项技术;除此之外本次我还会分享一些奇点机智在语音对话交互领域的落地应用和本行业趋势。
一、自动问答与阅读理解
第一个是自动问答和阅读理解。斯坦福大学从2017年就开始做 SQuAD,它把这个竞赛变成了一个类似于 ImageNet 一样大家可以刷榜的竞赛,所有的人都在争第一,同时变相的促进了技术的进步。最早的 MSA 周铭老师的队伍,后来科大讯飞和哈工大的老师一起做,成绩也都不错。
SQuAD 1.0 的时候榜单上最好的成绩是83%左右,但是后来斯坦福的专家将数据集进行了更新,进入了 SQuAD 2.0 时代,在换了一些似是而非的答案后,很多解决方案都一夜回到将解放前,准确率一度降低到60%多。
最近不知道大家有没有关注 Google 出了个模型叫做 Bert ,奇点机智内部笑称它是大力出奇迹。它的具体原理很简单,就是找一个 model 能够融合所有的数据,然后让它自己训练。Google这样资金充足算力强的公司,需要等两周,但对于我们普通公司来说,会等待相对更长的时间。NLP是一件比较综合的事情,做好还是比较难的,我们这一行有两个不太好的状况:我们现在拿到的GPU最早是给Image设计的,都是四四方方的,它对图像处理是得天独厚的。NVDIA对图像的处理积累了20多年,但对 NLP 的作用就不是那么大,DNN 对 Image 领域的受益是最大的。自然语言不是一个规则的东西,做结构化分析和链式分析都不是很好做,这些事情在GPU上运行是非常非常难受,需要做很多额外的预处理操作;回到 Bert,它真的是大力出奇迹,它就是硬算,不考虑其他任何东西,然后结果竟然非常好。
1.1模块化问答系统
问答系统在自然语言处理里其实已经有很多很多年了,是一个 NLP 的标杆性应用。
我们在实际的生活中也经常用问答来查看对象是否真的理解:比如说老师对学生的问答,可以查看学生们的理解水平。现在问答在 NLP 里面有很多作为核心技术的应用,比如说智能客服和手机上的虚拟助手,比如说苹果 siri 或百度的小度、微软小冰等等。
下面简单介绍一下问答系统,我们可以把问题简单的分成几类,一类是简单的事实,比如:地球直径多大;第二类是定义的事实类;第三类是列表类;第四类是长答案类,最后一类为是非类,看着很简单,实际上这是最难的一类问题。下图是业界常见的问答 系统:
1.2传统化回答方法
下面我们看看模块化问答系统的回答方法,它们有很多种,比如说有特制服务的问答,比如说有一个叫做 Wolfram|Alpha 这个专门基于数学问题的网站,你可以在上面搜索任何数学问题。
最近还有基于知识图谱的问答和基于搜索的自动问答。比如说微软的一个应用:用户问一个问题“明天需要带伞吗?” Bing 除了去搜索文档外还会有一个专门回答问题的 bot,将把你当前位置的地理位置的天气显示出来。但是这个问答系统的更新方式是非常落后的,需要经常维护更新知识库。
然后我们介绍一下基于搜索的问答系统的结构,下图是一个比较传统的结构,它是一个模块化的系统。第一步,有了用户的 query 以后,我们并行计算一边对 query 进行分析,另一边将其送入 Google 的搜索引擎找到相应的 docs,然后我们在其中根据 query 匹配答案;阅读理解跟基于搜索的问答非常像,只不过这个问答文档不用你自己找,而是已经输入给系统了,让系统在文档中找出答案。
二、端到端阅读理解
2.1阅读理解数据集
接下来是端到端阅读理解。阅读理解数据集 SQuAD 我之前已经讲过,它是以 Wikipedia 页面中的段落作为来源文档,根据文档人工编写问题,答案是文档里面的一个连续片段(span)。还有一个不太有名的比较复杂的数据集是MS MARCO,它的问题来自搜索引擎真实用户提出的问题,相关文档也是信息检索系统从真实网页得到的段落,每个问题对应多个段落,因为标注答案是人工根据文档总结撰写,就增加了复杂度,他和 SQuAD 的区别是他的答案不仅是一个 span,还需要做一些提取和综合,因为比较复杂,所以做的人不是很多,百度前段时间在这个上面拿了第一,但是普适性不是很好。那么具体该怎么做呢?
2.2端到端阅读理解系统
首先我讲一下端到端的阅读理解系统的基础架构,如图所示前面是一个模块,后面我们把整个的各种各样的模块都放进一个神经网络里面进行训练。
比如用户问个问题“什么酶可以分解淀粉?”回答这个问题时,第一步,找到问题中的焦点词 Focus words ,焦点词分为显性和隐性两种,它声明了答案的类型;第二步骤是在文档中将那些有可能是答案的东西找出来。在这个环节里,有个概念是回答的类型,它与焦点词是非常相关的,它主要是找到焦点词所指的类型是什么,这里我们要知道如何运用算法才能识别这个预期答案类型,同样的问答类型的识别可以用粗颗粒答案类型和直接使用 query 中的焦点词作为答案的类型。
2.3模型整体结构
我将从宏观上介绍一下模型的整体结构。几乎所有的模型分成四块:最底层是 Representation(特征表示层),作用是看这个词在这个场景中是什么意思,确定出问题的类型,将问题和篇章的词语转化为向量化特征表示并进行此行的标注;接下来是编码层,主要是衔接底层的特征;然后是匹配所有问题的匹配层。
要想找到所有的答案,我们要在 model 中把问题的信息通过这个机制对每一个字进行重新表示,利用注意力机制融合问题和篇章信息,我们用的模型是 Match-LSTM 、BiDAF 和 DCA 等;最后我们再通过一种对应准则把每一个字的新表达 span 给找出来,也就是答案片段抽取层负责的工作,这时我们就可以利用两个步的指针网络对组成答案的 span 进行相应的提取操作。相应的细节大家可以在 Paper 上面找,我这里就不详细讲了。如果大家想做这个方面的问答技术实现,我建议大家先跑通这个模型,然后再做一些微调,阅读大量文献找到感觉后再进行创新和改进,从一个好的点到一个更好的点是需要循序渐进的,我认为这样的效率会更高些。
三、语音交互技术和行业发展趋势
我们公司要做的事情和现有的大家的想法可能不太一样。虽然大家都知道人工智能的三大要素是算法+数据+算力,不过我认为用户体验是最重要的粘合剂,有了这个粘合剂,才能使AI真正的落地。我非常认同对话的用户体验是一个更自然的体验。
对任何人来说,最重要的就是时间;因为每天都是24小时,时间过去了再也不会回来。几乎每个人在第一次用外卖 app 的时候,都需要适应一段时间,它有一定的学习成本。当我们第一次想要在买 app 上点一份麻辣烫,需要操作很多步骤才能达成目的。但其实“学习怎么用 app ”不是我们的目的,“点一份外卖麻辣烫”才是我们想要的,这些服务我们希望能跳过“学习用 app”这一步,直接由语音对话帮忙完成。
"学习用app"这件事我们年轻人来说还好,但是对于我们的父母或者其他老人来说学习门槛还是很高的。现在有一个趋势是:人们终于发现 app 不太具有吸引力了,大家都开始关注小程序和快应用了,或许小程序和快应用会慢慢替代掉 app 这种形式。人的一辈子是单次路程,我们小学毕业一次,中学毕业一次,大学毕业一次,我们去某地旅游,去一个餐馆吃一次饭,可能就吃这么一次,再也不会去了。同理,我们手机上安装六、七十个 app,但我们一天能用几次呢?
奇点机智的愿景就是当用户知道自己要做什么时,帮他们通过一句话搞定复杂操作,而不需要浪费时间和精力,去想怎么操作图形界面。
语音交互两部分,一个是语音交互本身,另一个是商业逻辑。我们公司本身,关注的是商业逻辑。如果想让语音交互能和图形界面交互拥有同样好的体验,那么就要做到任何一个程序员都可以很方便的把他擅长的领域中的体验给做出来,这一点很重要,但是过去国内外企业对这方面积累比较少。
语音交互的流畅便捷其实具有一定的社会意义,相应地,它的技术细节比较麻烦,不好实现。但语音交互仍将成为未来主流的人机交互方式之一。技术更新迭代大爆发即将来临,我希望奇点机智能够成为时代的弄潮儿。
最后,我想留一些悬念。关于语音体验的优化,举个例子:在自然语言中,头痛和头疼是一件事,关键在于如何将表达同一含义的说法进行泛化?如何让语音交互的商业逻辑容易地表达出来?如何高效的用声音来控制图形界面操作和业务?
我们会有很多很多后续的技术分享和成果发布,请大家保持关注。最后,对NLP领域感兴趣的朋友,欢迎投简历到jobs@naturali.io,2018机器阅读理解技术竞赛冠军团队期待你的加入!