Press "Enter" to skip to content

初识智能对话系统-从多轮对话说开去

“帮我转个账吧!”
“好的,请问你要转给谁呢?”
“给马云吧。”
“好的,请问你要转多少钱呢?”
“100。”
“好的,给马云转账100元,转账页面跳转中...”

 

上面这段人机对话,看似普通简单,实则蕴含着自然语言处理领域两大核心技术:文本分类(意图识别)和命名实体识别(人名、数字识别),同时也是智能对话系统中典型的多轮对话模式:机器人在识别出用户的意图后,为了获取必要的信息,引导用户有目的的进行信息补全的交互模式。

 

一般来说,智能对话系统主要分为两类:任务导向型(task-oriented)对话系统和非任务导向型(non-task-oriented)对话系统。上文转账的例子明显是任务导向型的,而像“什幺是直销银行?”、“你吃了吗?”这种业务知识问答或闲谈聊天则属于非任务导向型。非任务导向型对话系统一般采用基于检索的方式实现的:利用语义相似度计算模型,将知识库中与用户问题最相近的问题的答案推送给用户,如图1所示。

 

 

图1.非任务导向型对话系统示意图

 

任务导向型对话系统一般采用管道(pipeline)方法,如图2所示,主要包含四个模块:自然语言理解(NLU)、对话状态维护(DST)、动作候选排序(Policy)和自然语言生成(NLG)。以上文转账的例子简单说一下这四部分的功效:

 

NLU负责进行意图的识别(转账)和人名(马云)、数字(100)等实体的提取;DST+Policy负责判断系统应该跳转到什幺状态(缺少收款人姓名、转账金额)以及执行什幺动作(提示用户补全收款人姓名、转账金额); NLG负责最终推送给用户的语言的组织。

 

 

图2.任务导向型对话系统

 

由于篇幅有限,本文将主要介绍任务导向型对话系统的设计,并着重关注NLU部分的实现。以我管窥之见,任务导向型的对话主要就是一个意图识别+填充词槽(slot)的过程,NLU模块起着重要作用。下面将详细介绍意图识别和填充词槽这两部分内容。

 

意图识别,实际属于文本分类问题:在给定的分类体系下,根据文本内容自动确定文本类别的过程。我们日常接触最多的应该就是“垃圾邮件过滤”这个文本分类的典型应用了,其实意图识别也很容易理解,就是类别从“是垃圾邮件”、“不是垃圾邮件”变换成“转账”、“查流水”等意图类别而已。文本分类的算法也有很多,如逻辑回归(LR)、支持向量机(SVM)、决策树(DT)和神经网络(NN)等。本文选择了Facebook开源的文本分类模型Fasttext,该模型属于浅层的神经网络模型,在文本分类任务中,往往能取得和深度网络相媲美的精度,却在训练时间上比深度网络快许多数量级,因此在工程上此模型的出镜率很高。

 

Fasttext模型的结构如图3所示,与Word2vec的CBOW模型很相像,由输入层、隐含层和输出层组成。输入层为词序列的词嵌入(embedding),为了考虑进词语顺序信息,引入了n-gram特征。但由于n-gram特征数量远比词库数量大很多,因此采用了hash bucket方法对其做了映射。输入层的参数矩阵的形状如图4所示,V是词库大小,Bucket是哈希桶大小,dim是embedding的维度。隐含层单纯对输入层的embedding进行了求和取平均,没有使用任何非线性激活函数。输出层使用了softmax来进行多分类的映射,为了提升运算效率采用hierarchical softmax或negative sampling方式进行。

 

 

图3.Fasttext模型结构示意图

 

 

图4.输入层参数矩阵示意图

 

填充词槽,实际属于命名实体识别过程。识别出意图后,为达成用户所想,需要获得一些必要的信息,填入我们提前设置好的必填词槽中,就像上文提到的转账例子,需要提取出收款人姓名和金额两个实体。命名实体识别是典型的序列标注问题,即对于一个一维线性输入序列,对每个元素(token)都打上标签。若采用BIO标注法,“给 马 云 转 账”就标注为了“O B-PER I-PER O O”,其中B-PER表示人名首字,I-PER表示人名非首字,O表示不属于命名实体。本文选择了BiLSTM-CRF这个经典算法来实现此功能,模型结构如图5所示。

 

 

图5. BiLSTM-CRF结构示意图

 

其中BiLSTM完成对文本序列特征的自动提取,CRF则可以为最终预测的标签添加约束确保它们符合常理。如果记输入文本序列为 x=(x 1 ,x 2 ,…x n ) ,某一标签序列为 y=(y 1 ,y 2 ,…y n ) ,则BiLSTM-CRF模型对句子 x 的标签等于 y 的打分为各个位置的发射概率和转移概率之和:

 

 

通过softmax得到归一化的概率:

 

 

模型训练时最大化对数似然函数,预测时则采用维特比算法解码即可。

 

以上就是对任务导向型对话系统的简要剖析,图6是一个简单的任务导向性对话流程示意图。先对用户问题进行意图识别,然后进行命名实体识别,判断该意图对应的必填词槽是否填充完整,如果完整则执行指令,否则提示用户补全所需信息。

 

 

图6.任务导向型对话流程示意图

 

下面来看一下实现的效果吧。图7,用户一句话就将转账意图和对应的必要信息表达完整了,因此系统直接就可以准确地执行跳转转账页面的指令了;图8,用户第一句话缺少金额信息,进行提示后,用户补全了该信息,然后执行了跳转转账页面指令;图9,用户第一句话只表明了转账意图,第二三句话表明了收款人姓名,第四句话表明金额后,系统执行跳转转账页面指令。

 

图7.对话效果1

 

图8.对话效果2

 

 

图9.对话效果3

 

本文主要介绍了智能对话系统中,任务导向型系统的相关知识,后续还会带来非任务导向型系统的介绍,谢谢阅读。

 

Thanks !

 

作者简介:

 

侯佳腾:2018年毕业于中国科学院大学,获信号与信息处理专业工学博士学位,2018年7月加入中国民生银行信息科技部创新板块,目前主要致力于自然语言处理、OCR、机器学习等方向的研究和开发工作。

 

常薇:2018年6月毕业于北京理工大学计算机学院,研究生期间方向为自然语言处理,毕业后加入中国民生银行信息科技部创新板块。目前从事人工智能自然语言处理平台相关项目工作。

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注