前言 框架
意图识别是经过分类的办法将句子或者咱们常说的query分到相应的意图种类。举一个简单的例子,我想听周杰伦的歌,这个query的意图即是属于音乐意图,我想听郭德纲的相声即是属于电台意图。作好了意图识别之后对于不少nlp的应用都有很重要的提高,好比在搜索引擎领域使用意图识别来获取与用户输入的query最相关的信息。举个例子,用户在查询"生化危机"时,咱们知道"生化危机"既有游戏还有电影,歌曲等等,若是咱们经过意图识别发现该用户是想玩"生化危机"的游戏时,那咱们直接将游戏的查询结果返回给用户,就会节省用户的搜索点击次数,缩短搜索时间,大幅提升用户的体验。再进一步说,作好意图识别之后,咱们能够将一个用户的query 限定到一个垂直领域好比经过意图识别之后发现该用户输入的生化危机就是想找"生化危机"的游戏进行下载,那么咱们在游戏这个领域下进行搜索能够获得更高质量的搜索结果,进一步提升搜索体验。dom
咱们再举一个目前最火热的聊天机器人来讲明一下意图识别的重要性。目前各式各样的聊天机器人,智能客服,智能音箱所能处理的问题种类都是有限制的。好比某聊天机器人目前只有30个技能,那么用户向聊天机器人发出一个指令,聊天机器人首先得根据意图识别将用户的query分到某一个或者某几个技能上去,而后再进行后续的处理。若是一开始的用户意图识别识别错了,那么后续的工做直接就是无用功了,会给用户带来很是很差的用户体验。搜索引擎
说了这么多,其实只是想说明意图识别是一件很是重要的工做。咱们再来看看目前工业界的水平,就业界来看,目前一些公司的在特定领域的意图识别准确率已经能够达到96%甚至更高了,在能够预见的将来意图识别的准确率只会更高,覆盖范围只会更广, 在通用领域达到99%,甚至99.9%也只是时间迟早的问题。而这个时间也许在两到三年来就能够到来。spa
作好了意图识别之后,那种相似于电影场景里面人机交互就有了实现的可能,用户向机器发来的每个query,机器都能准确的理解用户的意图,而后准确的给予回复。人与机器连续,多轮天然的对话就能够借此实现了。想起来真的是很是的激动。日志
意图识别的前提索引
在作这个工做以前,咱们首先得想好意图的划分问题,这种划分业界有不少叫法,好比技能。咱们的聊天机器人有30个技能,潜在乎思即是咱们的意图有30类。在2018年的CES上面,Google Assistant 号称有100万个技能,这个真的只能说太厉害了。还有一种很通用的叫法叫领域 或者doamin,搜索引擎中的垂域搜索的意思是把用户的query分为不少特定的领域好比电台领域,音乐领域。搜索的时候根据意图识别认为这个query属于电台领域,因而便在电台领域进行搜索。若是意图识别的准确率比较高的话,这样即可以大大加快搜索的速度和准确性。游戏
不少Google Assistant的技能也许只是简单的堆叠,可是对于聊天机器人来讲,咱们业界一直有个观点,意图识别虽然是聊天机器人很是重要的一个部分,可是解析用户的语义已经慢慢再也不成为对话机器人的核心,识别用户的意图之后提供的服务开始成为对话机器人的产品差别化的核心。Goole Home 的100万个技能,绝对是这个领域杀手级别的竞争力。ci
其次是应该想好意图识别的可扩展能力,尤为是在搜索领域,对话系统领域,随着意图覆盖的范围急剧增长,如何保证意图的识别的准确率不降低甚至还能有提高实际上是个很困难的事情,可是也很是的重要,甚至也许是意图识别最重要的一件事。否则你覆盖的技能数上去了,可是意图识别的准确率下来了,其实不少时候是没有什么意义的。开发
意图识别可扩展能力的另一方面体如今简单技能的自动化生成,复杂技能的半自动化生成或者第三方开发者的开发技能的快速接入。在能够预见的将来,对话机器人的技能增长速度会很是的快。相似于Google Assistant 的100万个技能,单凭人力或者某一家公司去开发100万个技能,得开发到猴年马月去了。自动化生成对话系统的技能,而且保持足够的开放性是每一家有追求的聊天机器人厂商应该严肃思考的问题。从业界来看,不少国内聊天机器人的公司这一块可能才刚刚起步,嘴上说着要开放,心里其实比较抗拒,工做排期排的很后。至于技能自动化生成也许尚未思考到这一步来。博客
最后一个方面是技能的评价问题,当一个开发者开发完一个技能或者模型自动化生成一个技能之后如何评价一个技能生成的好坏也是很是重要的。简单一点来讲虽然咱们生成了一个技能,可是也不能生成一个技能就接入到咱们的搜素引擎当中或者对话系统中来,必需得符合必定的标准。好比咱们在搜索引擎当中开发了音乐 domain的垂域搜索.当咱们的意图识别准确的判别用户的query"我想听周杰伦的歌"属于音乐这个domain,并将query分过来到音乐领域进行垂域搜索。若是音乐的垂域搜索作的不好给用户返回的都是陈奕迅的歌。用户体验也不会很好。就我看来,技能评价应该至少包括两个方面评价。第一个方面是效果上面的,若是咱们用precision和recall来评价的话,每个接入的domain或者技能 的F1值必需大于某个值才能够接入。第二个方面是工程上面的,每一个接入的技能都必须考虑到访问量大了之后不能宕机。这个对本公司开发的技能不会有大的问题,可是第三方开发的技能,不少时候只考虑了功能的实现和效果上面的问题,每每不会考虑访问量或者qps大了之后怎么处理,结果就会形成总体服务超时。因此这一点也是须要慎重考虑的。
意图识别的基本方法
1.基于词典以及模版的规则方法
不一样的意图会有的不一样的领域词典,好比书名,歌曲名,商品名等等。当一个用户的意图来了之后咱们根据意图和词典的匹配程度或者重合程度来进行判断,最简单一个规则是哪一个domain的词典重合程度高,就将该query判别给这个领域。这个工做的重点即是领域词典便须得作的足够好。
2.基于查询点击日志
若是是搜索引擎等类型业务场景,那么咱们能够经过点击日志获得用户的意图。
3.基于分类模型来对用户的意图进行判别
使用分类方法是咱们本次博客的重点,咱们将会使用paddle做为模型的基本框架以CNN外接softmax 和LSTM外接softmax来进行意图识别方面工做的探索。本系列也初步定为三篇博客,本篇会做为开端篇作一些意图识别方面的介绍。第二篇是会使用LSTM+softmax来进行文本分类。第三篇会使用CNN 外接softmax来进行文本分类。
意图识别的难点
当前意图识别工做的难点有不少,在以前的介绍中也提到了一些,可是最大的难点实际上是在于标注数据的获取。目前标注数据的获取主要来自两方面,一方面是专门的数据标注团队对数据进行标注,一方面是经过半监督的方式自动生成标注数据,我后续会在调研之后,来专门进行这方面的介绍。本次会利用已有的标注数据来进行介绍。
总结
本次介绍了意图识别是什么,意图识别的重要性,意图识别的难点以及后续的博客计划,本质上来讲意图识别是属于文本分类的一种,和情感分析这类工做没有什么很大的区别。可是相比于情感分析,意图识别的分类种类要比以前多了不少,准确性以及可扩展性的要求也高了很多。敬请期待后续博客的更新。