前言

意图识别是通过分类的办法将句子或者我们常说的query分到相应的意图种类。举一个简单的例子,我想听周杰伦的歌,这个query的意图便是属于音乐意图,我想听郭德纲的相声便是属于电台意图。做好了意图识别以后对于很多nlp的应用都有很重要的提升,比如在搜索引擎领域使用意图识别来获取与用户输入的query最相关的信息。举个例子,用户在查询"生化危机"时,我们知道"生化危机"既有游戏还有电影,歌曲等等,如果我们通过意图识别发现该用户是想玩"生化危机"的游戏时,那我们直接将游戏的查询结果返回给用户,就会节省用户的搜索点击次数,缩短搜索时间,大幅提高用户的体验。再进一步说,做好意图识别以后,我们可以将一个用户的query 限定到一个垂直领域比如通过意图识别以后发现该用户输入的生化危机就是想找"生化危机"的游戏进行下载,那么我们在游戏这个领域下进行搜索可以得到更高质量的搜索结果,进一步提高搜索体验。

我们再举一个目前最火热的聊天机器人来说明一下意图识别的重要性。目前各式各样的聊天机器人,智能客服,智能音箱所能处理的问题种类都是有限制的。比如某聊天机器人目前只有30个技能,那么用户向聊天机器人发出一个指令,聊天机器人首先得根据意图识别将用户的query分到某一个或者某几个技能上去,然后再进行后续的处理。如果一开始的用户意图识别识别错了,那么后续的工作直接就是无用功了,会给用户带来非常不好的用户体验。

说了这么多,其实只是想说明意图识别是一件非常重要的工作。我们再来看看目前工业界的水平,就业界来看,目前一些公司的在特定领域的意图识别准确率已经可以达到96%甚至更高了,在可以预见的未来意图识别的准确率只会更高,覆盖范围只会更广, 在通用领域达到99%,甚至99.9%也只是时间早晚的问题。而这个时间也许在两到三年来就可以到来。

做好了意图识别以后,那种类似于电影场景里面人机交互就有了实现的可能,用户向机器发来的每一个query,机器都能准确的理解用户的意图,然后准确的给予回复。人与机器连续,多轮自然的对话就可以借此实现了。想起来真的是非常的激动。

意图识别的前提

在做这个工作之前,我们首先得想好意图的划分问题,这种划分业界有很多叫法,比如技能。我们的聊天机器人有30个技能,潜在意思便是我们的意图有30类。在2018年的CES上面,Google Assistant 号称有100万个技能,这个真的只能说太厉害了。还有一种很通用的叫法叫领域 或者doamin,搜索引擎中的垂域搜索的意思是把用户的query分为很多特定的领域比如电台领域,音乐领域。搜索的时候根据意图识别认为这个query属于电台领域,于是便在电台领域进行搜索。如果意图识别的准确率比较高的话,这样便可以大大加快搜素的速度和准确性。

很多Google Assistant的技能也许只是简单的堆叠,但是对于聊天机器人来说,我们业界一直有个观点,意图识别虽然是聊天机器人非常重要的一个部分,但是解析用户的语义已经慢慢不再成为对话机器人的核心,识别用户的意图以后提供的服务开始成为对话机器人的产品差异化的核心。Goole Home 的100万个技能,绝对是这个领域杀手级别的竞争力。

 其次是应该想好意图识别的可扩展能力,尤其是在搜索领域,对话系统领域,随着意图覆盖的范围急剧增加,如何保证意图的识别的准确率不下降甚至还能有提升其实是个很困难的事情,但是也非常的重要,甚至也许是意图识别最重要的一件事。不然你覆盖的技能数上去了,但是意图识别的准确率下来了,其实很多时候是没有什么意义的。

意图识别可扩展能力的另外一方面体现在简单技能的自动化生成,复杂技能的半自动化生成或者第三方开发者的开发技能的快速接入。在可以预见的未来,对话机器人的技能增加速度会非常的快。类似于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来进行文本分类。

意图识别的难点

当前意图识别工作的难点有很多,在之前的介绍中也提到了一些,但是最大的难点其实是在于标注数据的获取。目前标注数据的获取主要来自两方面,一方面是专门的数据标注团队对数据进行标注,一方面是通过半监督的方式自动生成标注数据,我后续会在调研以后,来专门进行这方面的介绍。本次会利用已有的标注数据来进行介绍。

总结

   本次介绍了意图识别是什么,意图识别的重要性,意图识别的难点以及后续的博客计划,本质上来说意图识别是属于文本分类的一种,和情感分析这类工作没有什么很大的区别。但是相比于情感分析,意图识别的分类种类要比之前多了很多,准确性以及可扩展性的要求也高了不少。敬请期待后续博客的更新。

如何使用padlepadle 进行意图识别-开篇的更多相关文章

  1. 使用LSTM和Softmx来进行意图识别

    前言 在前面我们大致介绍了什么是意图识别,把这个问题抽象出来其实是一个分类问题.在结构上面,我们使用LSTM来提取特征,Softmax来进行最后的多分类.由于语料的限制,我们目前仅考虑电台,音乐,问答 ...

  2. 计算广告(5)----query意图识别

    目录: 一.简介: 1.用户意图识别概念 2.用户意图识别难点 3.用户意图识别分类 4.意图识别方法: (1)基于规则 (2)基于穷举 (3)基于分类模型 二.意图识别具体做法: 1.数据集 2.数 ...

  3. 智能问答中的NLU意图识别流程梳理

    NLU意图识别的流程说明 基于智能问答的业务流程,所谓的NLU意图识别就是针对已知的训练语料(如语料格式为\((x,y)\)格式的元组列表,其中\(x\)为训练语料,\(y\)为期望输出类别或者称为意 ...

  4. 浅谈意图识别各种实现&数学原理

    \[ J_\alpha(x) = \sum_{m=0}^\infty \frac{(-1)^m}{m! \Gamma (m + \alpha + 1)} {\left({ \frac{x}{2} }\ ...

  5. Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)

    所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的 ...

  6. 任务型对话(一)—— NLU(意识识别和槽值填充)

    1,概述 任务型对话系统越来越多的被应用到实际的场景中,例如siri,阿里小密这类的产品.通常任务型对话系统都是基于pipline的方式实现的,具体的流程图如下: 整个pipline由五个模块组成:语 ...

  7. 【NER】对命名实体识别(槽位填充)的一些认识

    命名实体识别 1. 问题定义 广义的命名实体识别是指识别出待处理文本中三大类(实体类.时间类和数字类).七小类(人名.机构名.地名.日期.货币和百分比)命名实体.但实际应用中不只是识别上述所说的实体类 ...

  8. 搜索系统核心技术概述【1.5w字长文】

    前排提示:本文为综述性文章,梳理搜索相关技术,如寻求前沿应用可简读或略过 搜索引擎介绍 搜索引擎(Search Engine),狭义来讲是基于软件技术开发的互联网数据查询系统,用户通过搜索引擎查询所需 ...

  9. Microsoft Azure Project Oxford 体验

    2015年4月29日,微软在Build 2015大会上发布了一个震撼人心的项目: Project Oxford, 可以帮助直接实现图像理解.人脸识别.语音识别.语音合成等功能.虽然说这是号称研究院的项 ...

随机推荐

  1. IT服务(运维)管理实施的几个要点--第一章 IT服务质量的标准

    子曰"干的最好就是个60分,稍有纰漏就是不及格" 谈一个事情,最先要谈的就是统一标准,又或者这个标准已经约定俗成,广泛认可,所以就可以略过.对于IT服务质量来说,确实有一个统一的标 ...

  2. Java NIO (二) 缓冲区(Buffer)

    缓冲区(Buffer):一个用于特定基本数据类型的容器,由 java.nio 包定义的,所有缓冲区都是 Buffer 抽象类的子类. Java NIO 中的Buffer 主要用于和NIO中的通道(Ch ...

  3. linux下后台运行MATLAB

    原帖:http://sypeterli1.blog.163.com/blog/static/2283740492013101745824207/ 后台运行matlab脚本文件的方法:nohup     ...

  4. C# 给枚举类型增加一个描述特性

    前言 相信很多人对枚举并不陌生,枚举可以很方便和直观的管理一组特定值.如果我们在页面上直接输出我们希望匹配的汉语意思或则其他满足我们需求的语句就更好了,当然,通常小伙伴们都会再页面上if(enum== ...

  5. python爬虫如何爬知乎的话题?

    因为要做观点,观点的屋子类似于知乎的话题,所以得想办法把他给爬下来,搞了半天最终还是妥妥的搞定了,代码是python写的,不懂得麻烦自学哈!懂得直接看代码,绝对可用 #coding:utf-8 fro ...

  6. Python爬虫知识点二

    一.request库 import json import requests from io import BytesIO #显示各种函数相当于api # print(dir(requests)) u ...

  7. 巧用CSS居中未知高度的块元素

    在网页中让一个未知高度的块元素水平垂直居中是一个老生常谈的问题,但是总是有些特殊场景让你无法得心应手的实现居中,本文介绍几种常用的经典的居中方法,总有一种适合你! 1. position .paren ...

  8. Java学习笔记27(集合框架一:ArrayList回顾、Collection接口方法)

    集合:集合是java中提供的一种容器,可以用来存储多个数据 集合和数组的区别: 1.数组的长度是固定的,集合的长度是可变的 2.集合中存储的元素必须是引用类型数据 对ArrayList集合的回顾 示例 ...

  9. linux sshd服务

    1.ssh介绍:SSH是secure shell protocol的简写,由IETF网络工作小组制定,在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后再进行传输,确保传递的数据 ...

  10. web服务器,应用程序服务器,http服务器的区别

    WEB服务器.应用程序服务器.HTTP服务器有何区别?IIS.Apache.Tomcat.Weblogic.WebSphere都各属于哪种服务器? 这个概念很重要. Web服务器的基本功能就是提供We ...