上篇 | 如何设计一个多轮对话机器人
导语:多轮对话聊天机器人,作为人工智能的典型应用场景,也是一项极具挑战的任务,不仅涉及多方面异构知识的表示、抽取、推理和应用,还涉及包括自然语言理解在内的其他人工智能核心技术的综合利用
简介与相关技术调研
目前,多轮对话聊天机器人已经产生了很多应用,有萌妹子小冰,有佛法大师贤二,也有应用在各行各业的智能客服。多轮对话聊天机器人,作为人工智能的典型应用场景,也是一项极具挑战的任务,不仅涉及多方面异构知识的表示、抽取、推理和应用(如语言知识、领域知识、常识知识等),还涉及包括自然语言理解在内的其他人工智能核心技术(如用户画像、对话管理等)的综合利用。
实现对话机器人常见的方法,可以从最简单的“关键字匹配”,到最前沿的深度学习“端到端生成”应答。分别应用到不同的场景:闲聊、任务(垂直领域)、问答(QA)。
设计一个聊天机器人
要想机器能与人产生对话,那么第一步,就必须先“理解”人说话的内容,对于机器来说,“理解”就是把自然语言转成具有结构化的表达。机器解析结构化表达的内容,根据知识库(可能是QA对、可能是if-then规则、可能是业务流程等)获取相应的回答。
如下图,一次对话,就是一个会话的接入,语义理解就是理解人说话的内容,应答引擎就是根据理解的内容做出的应答。
1、语义理解
建立语言模型
因为人类语言的本质是为了传递人与人之间的信息(意思)。那么,我们可以定义出N种意思分类(意思的种类越多,机器人的理解能力越强)。所以,一个语言模型就是一个多标签的数学模型,把自然语言转成具有结构化的表达。有以下三个步骤:
1)文本预处理:切词、词向量、词义消解等(这里内容很大,不详细介绍)。
2)样本准备:抽取一些经典的发言,在我们的myModel平台进行标注。
3)序列模型:多标签模型,如下图就是一种CNN与LSTM组合的神经网络方法。
尽管已经在一个垂直的领域,而且看似简单的三步,但是要做一个好的语义理解模型,是非常难的,例如一个小改动导致预测结果差异,可分两种:
1)一种是句中的词语位置变了、辅助词变了,如:“这就是给我的回复?”与“你们就这么回复我?”。
2)一种是增加一些无关核心内容的词,如:“但是我后面没开挂都被制裁”与“但是我后面没开挂都被制裁我就想不通了”。
备注:增加更多有标注的样本量、基于大规模数据训练的模型(如BERT等)二次训练、神经网络增加attention、结合知识库等,都是一些优化的手段。
语言模型在系统中的应用
理解用户说话的意思,我们分为了三层:第一层,是理解当前聊天处于哪一个话题,有没有切换话题;第二层,是理解具体的内容,含有意图与实体;第三层,是理解当前发言的情感,跟踪用户的情绪变化。
1) 话题模型(Topic模型)
在我们系统中,它是一个分类模型,与后面的应答引擎是有对应的关系,根据不同的话题,进入不同的业务流程,所以模型的标签的业务的分类。
2) 意图理解(Act-Slot模型、Value模型)
A. Act-Slot模型
在我们系统中,它是一个多标签模型,相同一句话,不同的角度,有不同的理解。所以,模型的标签是意图与实体类型,如下图的“inform,QQ”。
例如,在具体的项目中,我们定义了:
B. Value模型
在我们系统中,获取到用户发言的Act-Slot之后,根据Act-Slot的意图,得到其相对应的实体值。总共设计了三种方法以获取不同类型的Value,方法如下:
正则表达式:如抽取时间、等级等有一定格式的实体。
词库对比:如安图恩等游戏专有词汇。
LSTM模型:当句式中不明显表达实体时,将通过模型分到6类中:
ENV:涉及到电脑环境相关信息。
MAPID:涉及到地图相关信息。
ROLE:涉及到角色相关信息。
TEAM:涉及到组队相关信息。
LOGIN:涉及到登录相关信息。
EQUIP:涉及到装备相关信息。
备注:并非所有聊天机器人都这么设计,有些系统会把意图作为一个模型,实体与value作为一个模型。
3) 情感模型
在我们系统中,它是一个分类模型,把用户的发言分为了以下几种不同级别的情绪(标签):脏话、生气、平和、赞扬。
2、应答引擎
定义业务描述语言
为了能快速接入各种服务,基于XML描述语言,定义了一套业务流程的描述语言。总共分为三层,最底层是基础流程控制单元,如分支if、循环while、顺序sequence、并行parallel;第二层,是每个话题都需要的通用组件,如询问QQ号、游戏名、情绪安抚等;最顶层是具体的业务应用服务,如装备找回流程、被盗处理流程等。
例子:获取QQ号与大区号流程。
业务流程控制引擎
如下图所示,有Task1到Task5,共5个业务流程(业务应用),这些业务流程可以使用上述描述语言刻画出来。而下图中涉及到的为上述语言的解析过程。
话题切换监听器:作为旁路分类模型,用于跟踪聊天话题的切换。以用户发言为输入,输出1、2、3、4、5,分别代表Task1,Task2 …. Task5。(用户每次输入,都会有一次判断,反映话题是否有变化与切换到哪一个Task)
会话信息:表示在对话当抽取出来的上下文信息,局部信息表示在本Task可见,全局信息表示所有Task可见。
状态:表示Task运行状态。而流程中断的位置,并非所有位置都可以中断,如下图标记红点的是可被中断(当运行到有标记红的地方,就会请求“话题切换监听器”,当前是否有话题变化)。
挂起:表示当前流程暂停(如下图,P2表示Task1中的第二个点挂起)
未激活:“-”表示该Task没有启动过。
激活:Running表示正处于该Task的流程中。
结束:Close表示该Task已结束。
备注:每一个红点的地方,都可能由于用户发言导致切换到另一个Task流程中。会话开始时,会根据“起始问题识别”,得到需要走哪一个Task,作为起始Task。在起始Task流程中,如果遇到红点的地方,并且话题切换监听到需要转到另外的Task,刚切换到新的Task流程,新流程走完后再回到切换话题的断点处,继续原流程一直走完。
一个业务流程例子
例子:假设有四个业务流程Task,每个流程都根据流程控制单元画出相应的流程图。
Task1为“处罚查询”流程。
Task2为“处罚申诉”流程。
Task3为“修改密码”流程。
Task4为“实名验证”流程。
备注:每个Task都可以单独由“起始问题识别”触发,也可以如下例子嵌套对话。
TP小天
对话是一种比网页或APP更自由的表达形式,用户有了主动表达诉求的空间,可以实现有别于网页或APP的一些特殊功能:用户安全教育、舆论监控、信息收集。
根据上述的机器人设计方法,我们设计了TP小天,用户可以通过游戏安全中心公众号,咨询游戏安全相关的信息。如下图所示,已经接入了处罚查询、申诉、举报、帐号冻结等游戏安全功能与话题。
在实战中,一个可运营的聊天机器人,还会涉及到很多其它的内容,如何提升语义理解的丰富性、大样本推荐标注、FAQ应答、快速可配置修正、对话生成多样性、闲聊等等。
上篇 | 如何设计一个多轮对话机器人相关推荐
- 【NLP】自己搭一个多轮对话聊天机器人(附实现源码)
[NLP]自己搭一个多轮对话聊天机器人(附实现源码) 01 项目框架 02 模型 2.1 粗排 2.1.1BM25 2.1.1 Bool检索 2.2 精排 意图识别 03 API交互 04 微信前端 ...
- rasa开发多轮对话机器人进阶
使用rasa开发多轮对话机器的时候,发现配置很麻烦,且配置很容易出错,配置之间还存在关联关系,即便是使用界面也很繁琐.本文有一个新的思路,即通过一个引导生成对话机器人的机器人来创建对话机器人.这里以工 ...
- 智能多轮对话机器人案例剖析(附源码)-张子良-专题视频课程
智能多轮对话机器人案例剖析(附源码)-269人已学习 课程介绍 智能多轮对话机器人案例剖析(附源码) 三个完整案例,体验式教学: 一套开源框架,所学即所用: 课程收益 掌握任务 ...
- 如何判断一个对话机器人有多智能?
有些对话机器人总让人崩溃,也许是智能级别不够高.本文,就来一起看看如何判断一个机器人的智能程度. 随着智能对话技术的发展,对话机器人越来越多地出现在人们的日常工作和生活中. 从企业的角度,在合适的业务 ...
- 打造一个window桌面应用:在线聊天对话机器人
大家好,我是辰哥~~~ 本文目标:打造一个window桌面应用:在线聊天对话机器人. 今天辰哥教大家做一个在线聊天对话机器人桌面应用,已经打包成exe可执行文件,读者可以直接拿来使用, 先上演示图 聊 ...
- 对话机器人在瓜子的实践
本文根据车好多NLP方向负责人王文斌老师在DataFun"AI+"Talk-- "Application of AI In Second Hand Market" ...
- 回顾·智能导购对话机器人实践
本文根据智能一点联合创始人&CTO莫瑜老师在DataFunTalk人工智能技术沙龙"自然语言处理技术应用实践"中分享的<开源节流的智能导购对话机器人实践>编辑整 ...
- mxm智能教育机器人无法智能对话_零代码使用腾讯TBP打造智能对话机器人
点击观看大咖分享 心疼你独自一人承担生活的苦难,寂寞夜里陪伴你的只剩无人倾诉的压抑和无处安放的焦虑.养个宠物,它却不能get到你的"宠言宠语".找个伴侣,还要浪费吵架的时间和精力. ...
- 对话机器人---智能客服
https://blog.csdn.net/qq_40027052/article/details/78723576 详细的介绍了对话机器人涉及到的所有知识和技术. 整个对话机器人涉及到的知识点,本人 ...
最新文章
- Android 中 include的使用
- 深度学习100例 -卷积神经网络(ResNet-50)鸟类识别 | 第8天
- BigData之Hive beeline:beeline的简介、使用方法之详细攻略
- 利用cross join 构造大量测试数据
- 计算机组成的ir是指,2002.10计算机组成原理§1控制器的基本概念⑵指令寄存器IR指令.ppt...
- turtle生成二叉树
- esx4克隆后的处理工作
- Go基础学习记录 - 编写Web应用程 - 完善Blog Model
- python executemany_Python MySQLdb executemany
- 2018牛客网暑假ACM多校训练赛(第六场)I Team Rocket 线段树
- JD_Source Code for problem 1581
- android textview api,Android API中文文档TextView
- JDK11使用HSDB
- windows powershell快捷键
- 学Dapr Actors 看这篇就够了
- socket.io实现多人聊天
- 【AGC031E】Snuke the Phantom Thief(费用流)
- [ipsec][crypto] 什么是AEAD加密算法中的AAD 及aad length
- PHP软件工程近三年的文献,软件工程论文参考文献
- 微信公众号关于百度地图和腾讯地图本地定位api的调用(js)
热门文章
- cocos2d-x 调色
- Math.abs为Integer.Min_VALUE返回错误的值
- iptables tcp wrappers
- Linux之物理页面的分配
- 上海理工大学第二届“联想杯”全国程序设计邀请赛 - Dahno Dahno(SW)
- 牛客 - 第k小数(线性寻找第 k 小数)
- js一键批量打印_js批量打印文件夹
- Python实战-获取鼠标键盘事件
- 高二计算机水平测试题,高二计算机学业水平测试 模拟试题(附答案)
- vuedraggable自由拖拽html,vue中draggable拖拽列表的使用