【好书提炼】聊天机器人技术原理与应用
本文作者:王小草 资深算法工程师
本文是对2019年3月出版的《自然语言处理实践-聊天机器人技术原理与应用》的全书内容提炼,若有不当之处,请联系本文作者。在此感谢本书作者王昊奋、邵浩、李方圆、张凯、宋亚楠。
阅读方法:
对聊天机器人、NLP有基础的同学,可以通过本文迅速了解当前聊天机器人或智能对话的系统知识、框架,对感兴趣的点可以自己去深入研究;
对聊天机器人、NLP没有基础但又想了解的同学,可以对照着原书进行阅读,本文是对原书的浓缩、提炼,帮助你更快得掌握核心知识,而非读过就忘。没时间读原著的话,也可以直接阅读本文进行一个概况了解。
一、聊天机器人概述
1.1 聊天机器人发展历史
阶段 | 时间 | 发明人 | 机器人 | 实现方式 |
---|---|---|---|---|
溯源与萌芽阶段(1950-1990) | 1950 | 图灵 | 提出图灵测试 | |
1966 | 麻神理工约瑟夫·魏泽鲍姆 | name:ELIZA,目的:临床模拟罗杰斯心里治疗 | 关键词匹配+人工编写回复规则 | |
1972 | 美国精神病学家肯尼思-科比尔 | name:PARRY,目的:模拟偏执型精神分裂症 | 会话策略比ELIZA更严谨 | |
1988 | 英国程序员罗洛·卡彭特 | name:Jabberwacky,目的:模拟自然的人际聊天 | 上下文模式匹配技术,没有硬编码的规则 | |
1988 | UK Berkeley罗伯特·维斯林斯 | name:UC,目的:帮助用户学习使用UNIX操作系统 | 规则+建模,提高了聊天进机器人的智能话程度 | |
1990 | 美国科学家休·勒布纳 | 设立仍只能年度比赛,测试机器聊天与思考的能力 | ||
研究兴起阶段(1990-2010) | 1995 | AI科学家理查德·华勒斯 | name:Alice,目的:聊天 | 阈值问题模板匹配(本文作者对ALICE有相关介绍:https://blog.****.net/sinat_33761963/article/details/79232894) |
2001 | name:SmartChild,目的:应用于短信和即时聊天工具 | |||
2006 | IBM | name:最强大脑Watson,目的:搜索只是问答 | 基于IBM“深度问答”技术的超级计算机,采用上百种算法3秒内找出特定问题的答案 | |
2010年至今 | 2010 | 苹果 | siri,目的:个人助理 | 实体驱动+NLU |
2014 | 微软 | 小冰、小娜(cortana),目的:娱乐 | 深度学习+搜索 | |
阿里 | 小蜜 | |||
京东 | JIMI | |||
网易 | 七鱼 | |||
2014 | 亚马逊 | echo,目的:智能助手 | ||
2016 | 谷歌 | Allo | 个人助理、深度学习、用户内嵌 | |
2016 | 公子小白,目的:社交 | 自我认知 | ||
2017 | 小米 | 小米音箱,目的:多种技能,智能家居 | ||
2017 | 阿里 | 天猫精灵,目的:生活购物 |
1.2 聊天机器人分类
1.2.1 基于应用场景分
场景类别 | 功能 | 当前产品 |
---|---|---|
在线客服聊天机器人系统 | 自动回复产品、服务的相关问题,降低企业客服运营成本,提升用户体验 | 京东JIMI, 阿里小米 |
基于娱乐的聊天机器人系统 | 不限主题的闲聊、用于陪伴与慰藉;也提供特定主体服务,如查天气等 | 微软小冰、微信“小微”、北京龙泉寺“贤二机器僧” |
教育场景下的聊天机器人系统 | 帮助用户学习某种语言;指导用户深入熟悉某项技能;帮助辅助学习 | UC、儿童教育机器人 |
个人助理聊天机器人系统 | 实现用户个人事务的查询代办 | siri、小米音箱、echo |
智能问答聊天机器人系统 | 回答用户以自然语言形式提出的事实型及复杂推理的问题,帮助用户获得信息于辅助决策 | waston |
1.2.2 基于实现方式分
实现方式类别 | 介绍 |
---|---|
检索式 | 回答是提前设定好的,通过规则引擎、模式匹配、机器学习模型,在知识库中挑选一个最佳的回复给用户,优点是回答自然,缺点是需要准备超大只是库 |
生成式 | 不依赖于提前定义的回答,利用大量的语料训练监督模型,使得该模型能输入用户问题,自动生成一个回复,有点是能覆盖任意领域,缺点是生成式的效果存在问题,比如句法错误,通顺度等 |
1.2.3 基于功能分
功能类别 | 功能 | 场景 | 当前产品 |
---|---|---|---|
问答系统 | 获取用户需要的知识 | 客服、知识检索 | watson |
任务型对话系统 | 完成用户的某个任务, | 如打电话,充话费、订机票、订酒店 | siri |
闲聊系统 | 陪用户闲聊 | 娱乐、情感陪伴 | 微软小冰 |
主动推荐系统 | 信息推荐 | 个性化推荐 | 今日头条 |
本文作者:前三者为当下聊天机器人的主要的3个方向,问答系统主要应用的是语言理解、匹配与检索技术;任务型对话系统主要技术是意图识别、对话管理;闲聊主要是自然语言检索与生成。
1.3 聊天机器人生态系统
聊天机器人的系统一般有以下5部分组成:
语音识别–>自然语言理解–>对话管理–>自然语言生成–>语音合成
其中语音识别和语音合成是语音方面的知识,暂且不在本书中作为讲解对象。
语音识别:语音转换成文字
自然语言理解:将自然语言转换成计算机能理解的表征
对话管理:根据当前对话管理状态判断系统应采取的策略
自然语言生成:将系统策略转换为自然语言回复给用户
语音合成:将文本转换为语音
二、聊天机器人技术原理
1.自然语言理解
1.1聊天机器人中的自然语言理解
聊天机器人的自然语言理解一般包含以下几个方面:
NLP | 解释 |
---|---|
实体识别 | 人名、地名、机构吗、专有名词德国 |
意图识别 | 显式意图与隐式意图 |
情感识别 | 显式情感与隐式情感 |
指代消解 | 明确代词的指代对象 |
省略恢复 | 恢复被省略掉的句子成分 |
回复确认 | 当用户意图模糊时,聊天机器人主动询问,确认用户意图 |
拒绝判断 | 主动拒绝识别及恢复超出范围的或者设计敏感话题的用户输入 |
1.2 自然语言理解的基本技术
基本技术 | 分类 |
---|---|
词法分析 | 汉语分词 |
词性标注 | |
句法分析 | 依存句法分析 |
短语结构句法分析 | |
深层文法句法分析 | |
语义分析 | 将自然语言表征成及其可理解的向量 |
1.3 自然语言表征与理解
句子、段落、文章的表示 | 词袋模型 bag of words | |
---|---|---|
tf-idf | ||
词的表示 | one-hot表示 | |
通过训练语言模型 | ||
使用深度学习encoder-decoder | ||
BERT |
1.4 基于知识图谱的自然语言理解
1.4.1 知识图谱的基本知识框架
概念:
知识图谱可以被看成是结构化的语义知识库,旨在以符号的形式描述真实世界中存在的各种实体或概念及其互相关系。
知识图谱的组成:
(1)实体-关系-实体 三元组
(2)实体-属性 对
知识图谱的结构:
知识表示 | 使用图和树的数据结构来表征实体与关系 |
---|---|
知识构建 | 从传统数据库的结构化数据中映射到知识图谱; 从HRML等半结构数据中利用AI与规则抽取模式信息到知识图谱中; 在非结构化的文本与图像中利用文本挖掘技术进行信息抽取,利用图像技术进行图像处理。 |
知识融合 | 将多个数据源抽取的指数进行融合 |
1.4.2 聊天机器人对知识图谱的需求
聊天机器人需要个性化的知识图谱,简历机器人与用户的个性化稠密小图;
聊天机器人需要静态图谱与动态图谱,比如刻画用户的生活轨迹,日程安排;
聊天机器人需要客观知识的知识图谱与主管情感的知识图谱,感知用户情感,并输出相应情感的答案;
聊天机器人需要对接外部服务API,主要是任务型聊天机器人中,如订餐的任务调用饿了么的API;
聊天机器人需要纯文本的知识图谱,也需要多媒体知识的知识图谱。
2.自然语言生成
自然语言生成系统的两大主要架构:
(1)流线型pipline自然语言生成系统
系统由几个不同的模块组成,模块之前相互独立,一般包括文本规划(决定说什么),句子规划(决定怎么说),句子实现(让句子更连贯)
(2)一体型integrated自然语言生成系统
模块之间相互左右,后续模块可以参与前面模块的决策。更符合人脑思维,但实现较为困难。因此较常用的未流线型自然语言生成系统
自然语言生成系统的两大技术:检索、生成
2.1 基于检索
需前期准备大量的qa对语料库,通过排序与深度匹配技术,在已有语料库中找到适合当前输入的最佳回复。
缺点:
(1)强烈依赖对话库 (2)回复不够灵活 (3)缺乏多样性
优点:
(1)实现相对简单 (2)容易部署
2.2 基于模板的
事先人为地定义模板,模板由句子模板和词汇模板组成,句子模板是包含若干个含有变量的句子,词汇模板是句子模板中的变量对应的可能的值。
典型的基于模板的自然语言生成开元框架:AIML
(博客教程:https://blog.****.net/sinat_33761963/article/details/79232894)
适合:任务型对话系统
2.3 基于深度学习的
通过编码-解码的过程,逐字或逐词地生成回复。
通过对抗圣城网络GAN生成自然语言。
3.对话管理
3.1 对话管理功能
对话管理的主要任务:维护更新对话状态,动作选择。
对话状态是指当前用户与机器对话数据的表征;
动作选择是指基于当前的对话状态,选择接下来合适的动作
3.2 对话管理关键技术
对话行为识别:
相当于是意图识别,封闭式的行为识别是讲用户意图映射到预先设定好的意图类别中,如在任务型对话中有订机票、点外卖、搜美食等。开放式行为识别是没有预先设定的行为类别的,一般用于闲聊系统。
对话状态识别:
对法状态识别需要考虑进对话的上下文与对话行为的相关信息,在某时刻的对话行为序列即为某时刻的对话状态。
对话策略学习:
通过离线的方式,预先让机器进行对话策略学习,从人-人的真实对话中学习对话行为、状态等,然后再人-机对话过程中进行策略选择。
对话奖励:
评价对话系统的评价机制,比如槽位填充效率、回复的流行度,以及日渐火爆的强化学习中的长期奖励机制。
3.3 对话管理的4种方法
基于有限状态自动机 finit state machine, FSM
人工显式地定义出对话系统可能出现的所有状态,对话状态会根据当前输入在预定的状态间进行跳转,从而根据新的状态去选择合适的动作。
优点:简单易用。
缺点:人工设计状态,与状态对应的动作,难以应用于复杂场景。
基于统计的对话管理
将对话过程表示成一个部分可见的马尔科夫决策过程。设定系统在每个特定的状态下执行某一特定动作都会获得对应的回报,因此选择动作时会选择期望回报最大的那个动作。
优点:(1)只需定义马尔科夫决策过程中的状态与动作,机器可以通过学习得到不同状态下的转移冠关系;(2)可以使用强化学习的方法学习出最有的动作选择策略
缺点:仍然需要人工定义对话系统的状态,在不同的领域中通用性不强。
基于神经网络对话管理方法
将自然语言理解的输出以及其他各类特征作为神经网络的输入,将选择的动作作为神经网络的输出。对话状态由神经网络的隐状态表示。
优点:不需要人工定义对话状态
缺点:需要大量的训练数据
基于框架的对话管理
框架即槽-值对,明确规定特征槽状态下的用户动作对应的系统动作。
优点:用于特定领域的对话系统
缺点:难以衍生到其他领域
其他新方法:
one-shot-learning,zero-shot learning用于解决样本量少或者无样本的问题,解决对话系统的冷启动。
深度强化学习用于策略选择
seqGAN采用对抗网络实现离散序列数据的生成模型。
三、问答系统
1.问答系统的类别
(1)基于web信息检索的问答系统(Web question anwser, WebQA):WebQA以搜索引擎为支撑,根据用户意图搜索相关答案反馈给用户。
(2)基于知识图谱的问答(Knowledeg based question answer, KBQA):根据已有的知识库、数据库资源、非结构化文本信息,构建知识图谱作为问答系统的后台支撑,并可根据知识推理,得到更深层次语义理解的答案。
(3)基于文本的问答:答案句子选择、阅读理解(答案短语选择)。
(4)基于表格的问答:从表格中选择答案,并进行自然语言生成。
(5)社区问答系统(Community question answer, CQA):基于社交媒体(百度知道、知乎问答),问题由网友提供,问答系统会检索社交媒体中与用户提问相似的问题,并将答案返回给用户。数据的形式一般是问答对。也
以下主要对KBQA, 表格问答,文本问答进行展开分析。
2.KBQA系统介绍
2.1KBQA知识库形式
知识图谱(SPARQL)
非结构化文本知识库(机器阅读理解)
数据库(nlp2sql)
2.2 KBQA系统组成
问句输入——>问句理解——> 答案信息抽取——> 答案排序和生成——>答案输出
2.3 主流KBQA方法
方法 | 解释 | 评价 |
---|---|---|
1.基于模板匹配 | 模型定义—>模板生成—>模板匹配—>答案排序 | 优点:响应快,准确率高 缺点:需要建立庞大模板库 |
2.基于语义分析 | 将自然语言转换成逻辑形式—>通过逻辑形式访问只是库中的知识进行推理和查询 例: what’s clalifirnia’s capital? >captital.california > sacre=amento |
优点:准确率高;可回答相对复杂的符合wenti 缺点:人工编写大量规则;编写规则模板有限 |
3.基于图遍历法 | 问句理解—>图遍历找到最佳路径—>焦点约束排序 典型产品:IBM的WARSON |
|
4.基于深度学习 | 1.利用深度学习对传统的方法进行改进 2.端到端的方法,在系统中输入问句和知识库,系统返回答案 |
缺点:无法处理时序敏感性问题;处理复杂问题不如传统方法 |
5.其他优化方法 | 1.多知识库融合 2.HybirdQA:基于知识库与web只是进行问答 |
优点:覆盖大量问题范畴 |
3.KBQA系统实现
3.1 系统简介
实现目标:用户询问天气类问题,理解意图,从天气知识图谱中检索答案,或经过推理生成答案,答案排序,返回最终答案给用户。
系统功能:
(1)回答天气基本信息(上海天气怎么样?)
(2)回答天气相关场景问题(今天上海出门需要带伞吗?)
3.2 系统模块
部分模块的解释:
映射问题表示:相同的意思会有不同的词汇表示,该步骤是将问句中的词汇映射到知识图谱中的词汇进行消歧;另外天气服务接口与知识图谱中的标准表示也得进行映射==》方法:字符串匹配,同义词匹配等。
构建查询:将自然语言理解输出的问句进行处理表示成查询知识图谱的语言,如SPARQL.
知识推理:若询问的是未定义的天气应用场景问题,则需要推理获得答案,如问“明天是否带伞?”,需要构建规则:天气为下雨则带伞,否则不带伞。
天气知识图谱与交互:
3.3 具体实现
伪代码的方式表示实现过程,以下是算法整体流程,输入问句,返回答案,中间经历三个步骤:自然语言理解、候选答案生成,答案排序与选择后反馈
自然语言理解算法流程:该步骤有两部,首先提取问句中的信息(分词、实体、时间等),然后判断用户的意图类别(此处假设是有询问天气和天气场景的两个意图),最后输出信息于意图类别。
查询映射算法流程:首先映射问题与知识图谱的本体,然后知识图谱向服务发送一个请求获取天气信息,将天气信息与知识图谱再进行一次本体映射,最后结合意图与规则推导答案
答案生成算法流程:消歧、打分、排序后获得唯一答案进行返回
4.表格问答
4.1 表格检索
目标:从候选的表格集中找到存在用户输入question答案的表格,返回该表格。
步骤:
(1)候表格检索 :可以将表格内容链接成一篇文档,利用文档检索技术检索表格,如BM25.
(2)候选表格排序
4.2 答案生成
目标:基于表格T对问题Q给出答案
方法:
(1)基于排序的方法,假设答案肯定在表格中,就给每个表格的单元格进行打分排序,选出最可能的。
(2)基于语义的方法
(3)基于神经网络,将Q转换成向量,表格也转换成向量,进行神经网络预测
5.文本问答
5.1 句子检索
5.2 阅读理解
目标:找到能回答问题的短语
四、对话系统
1 概述
1.1 分类
类型 | 目的 | 评价标注 | 实现方式 |
---|---|---|---|
开放领域对话系统 | 支持闲聊对话,用户没有明确目的性 | 以用户主观体验为主 | 海量检索; 端到端生成 |
任务型对话系统 | 帮助用户完成任务,对话有明确目的性 | 以任务完成情况衡量 | 基于规则; 基于数据 |
1.2 主要模块
模块 | 功能 |
---|---|
自然语言理解 | 领域识别 |
意图识别 | |
槽填充 | |
对话管理 | 根据语义表示、对话上下文、用户个性化信息等找到合适的执行动作 |
自然语言生成 | 自然语言技术生成自然语言 |
1.3 可用语料
DSTC(Dialog state tracking challenge)
utuntu Linux系统对话语料
航空旅游信息系统数据集 ATI
2.任务型对话系统技术原理
任务驱动的对话系统如下两类:
类别 | 过程 | 技术 |
---|---|---|
模块化的对话系统 | 串行的NLU,DST,DPL,NLG | 采用规则or数据驱动 |
端到端的对话系统 | 输入直接到输出,中间过程黑盒 | 数据驱动 |
端到端的方法尚且不成熟,在工业界使用较少,下面将接模块化的4个步骤。
2.1 自然语言理解NLU模块
包含两个子模块:
子模块 | 实现方式 | 评价 |
---|---|---|
意图识别 | 文本分类 | 分类准确率 |
槽位填充 | 序列标注 | F1-score |
以上两个模块,可以串行独立进行,也可以并行联合训练。
以天气问答为例,先进行领域分类,再在该领域内进行意图分类,最后提取地点、时间填充槽位输出。
2.2 对话状态跟踪DST模块
对话状态包括:
a.目前为止的槽位填充情况
b.本轮对话用户动作
c.对话历史
在模块中,系统跟踪并记录下每一轮的对话状态。
NLU输出的槽位可以是带置信度的多个选择,因此在DST模块中也可以是根据置信度维护多个状态:
2.3 对话策略学习DPL模块
该模块根据DST输出的对话状态选择最优的动作作为输出。
**方案一:**以点表示数据(槽位),以边表示操作(系统动作)。弊端是槽位数量增加,对话状态数量也会急剧增加。
**方案二:**以边表示数据(槽位), 以点表示操作(系统动作)
有些槽值缺失可以不进行多轮询问,直接以默认方式填充,会提升用用户满意度
2.4 自然语言生成NLG模块
一般会采用基于规则生成对应回答。
3 面向任务的对话系统的实现
根据4个步骤,整体算法流程为:
输入问句,输出回答,中间经历4个步骤
NLU模块:
输入问句,经过意图分类,槽值填充,输出用户动作
DST模块:
输入用户动作与历史对话,若意图存在,记录状态,要是有缺少的槽值并无需追问的就填充默认值;若意图不存在,则有两种可能,要么是在多伦对话中,要么就是无法识别的意图,若为前者那就去历史对话中意图,并且更新对话状态。
DPL模块:
输入对话状态,根据状态选择动作,是追问呢,还是返回答案呢
五、闲聊系统
1 基于对话库检索系统
1.1 对话库建立
数据来源:电影对白、小说对白、网络社区对话、开源对话语料等等
1.2 检索技术
(1)弱相关模型,分别单数对Q和A进行向量表征的获取,再将两两向量求相似性作为QA对的相似性
如下一个经典模型一看便知:
(2)强相关模型,将Q与A进行联合建模,通过多层感知机得到最终匹配。
1.3 检索式闲聊系统的实现步骤
2.基于生成式的系统
2.1 概述
采用深度学习对海量对话语料进行学习,进行端到端的序列生成。
2.2 优化方向
(1)安全回答
(2)个性一直
(3)对话连续
2.3 实现
六、聊天机器人评测
评测会议 | 评测数据集 | 评测指标 | |
---|---|---|---|
问答系统 | 1.Trec QA Rrack 2.NTCIP评测 3.CLEF的QALD评测 4.INEX Linked Data Track 5.Semantic Search挑战 6.Bio ASQ Workshop 7.EPCQA汉语问答测评(中科院) |
1.Trec QA TrackData数据集 2.Free17 3.WebQuestions 4.QALD 5.simple Questions 6.SQUAD阅读理解问题 |
1.召回率 2.准确率 3.F-测度 |
对话系统 | 微软DSTC | DSTC数据集2013年-2018年 | NLU:分类问题、准确率、召回率,F-score DST:DSTC标准 DPL:任务完成率,平均对话轮数 NLG:基于模板,不做评测 |
闲聊系统 | 1.BLEU 2.METEOR 3.ROUGE |