写点什么

人机对话关键技术及挑战

2019 年 11 月 06 日

人机对话关键技术及挑战

导读:近年来,人机对话受到了学术界和工业界的广泛重视。在研究上,自然语言理解技术逐渐从序列标注向深度学习的方向发展,对话管理经历了由规则到有指导学习再到强化学习的发展过程,自然语言生成则从模板生成、句子规划,发展到端到端的深度学习模型。在应用上,基于人机对话技术的产品也层出不穷,如苹果公司的 Siri、亚马逊的 Echo 音箱、微软的 Cortana、Facebook M 以及谷歌的 Allo 等。同时,各大企业纷纷研发及收购 AI 平台,如微软研发 Luis.ai,三星、Facebook 和谷歌分别收购了 viv.ai、wit.ai 和 api.ai,百度自主研发了 Duer OS 以及收购 kitt.ai,以上种种迹象表明了各大企业将在今后着力发展人机对话技术。本次报告将针对人机对话中的核心关键技术的发展前沿和研究趋势进行综述,主要包括开放域人机对话和任务型对话的关键技术及挑战。


人机对话主要技术方向



虽然人机对话主要包括四个功能:聊天、任务型对话、问答以及推荐,但主要集中在开放域聊天和任务型对话两方面。二者在目标、评价、最终目的上有一定区别,典型的应用系统也不大一样。


一. 开放域聊天


开放域聊天的一个基础系统架构如上图所示。


1. 前沿研究点:回复质量


上图总结了 17 年到 19 年开放域的一些论文和一些相关的知识点,下面的部分主要关注回复质量。回复的话是通顺、流畅的。回复质量是一个基础,包含很多工作,也面临着多方面的挑战。


① 回复质量上存在的挑战



这里举两个例子,左边是单轮回复的例子,右边是多轮回复的例子。从中可以看出两个问题,第一个问题是在单轮回复中由于统计模型 loss function 的一个限制,通常采用的回复都是统计上占优的高频回复,叫做万能回复。而多轮回复可以看出是一个局部依赖的回复,就相当于它没有学到更高层次的上下文信息。这是一个局部学习,与上下文无关的问题。


② 优化初始的解码过程



我们在单轮回复对话中,积累了一些工作,首先是优化了解码器过程,通过观察真实的数据。如果第一个解码出一个高频词,比如我,你,我们,你们,那么通常来说回复不会太好,针对这个问题我们做了一个 learning to start for sequence to sequence 的 framework,后面大家可以把 learning to start 这个模块做进一步改进和提升。但目前来说对原有算法效果已经有了一定的效果。


③ 更好地利用检索结果提高对话生成质量



其次,今年发表在 ACL2019 上面的一篇文章,检索式和生成式是互相对抗又互补的结果,检索式结果可以保证相关性、流畅性比较好,但是多样性受限,不论怎样检索都跑不出编辑好的话术。生成式的好处就是机器可以创造,但生成式模型面临着万能回复的问题。利用检索式结果和生成式结果互相增强的方式,提出这样一个模型。


④ 基于可控内容生成提升对话回复多样性



尽管我们可以把大量的对话数据交给模型,希望可以产生我们期望的结果。但是模型不一定会产生期望结果。所以我们考虑能不能通过一种控制技术让模型更加可控,使其生成包含指定内容的回复。首先在说一句话的时候 inference 出一系列的关键词,关键词不一定要有多个,可能是零个,比如你好,再见,回复里不需要关键词,但是如果是问姚明的身高,在回复中如果不出现一个数字表达式来表示身高就是不精确的一个回复。这里我们做了一个 keyword gating function 加到 sequence2sequence 的框架里,对框架性能有一定的提升。


⑤ 单轮聊天-回复生成技术



整个单轮聊天解决万能回复的问题的技术路线是从模型优化到内容优化的一个发展过程,其中有一定的知识嵌入。知识嵌入不是一件简单的事情,怎样把离散的知识加入到连续的模型中是目前存在的挑战。


⑥ 更好地建模多轮对话历史的语义



除了刚刚讨论的单轮聊天外,多轮聊天上下文无关也是一个比较棘手的问题。之前我们有很多工作,提出了两种 attention 的结构,尽可能保留对话历史的语义,由当前对话输入去决定哪个对话历史对它更有效,更有用,就是这样一个工作,在多个数据集上都取得了比较好的结果。


⑦ 动态建模多轮对话的策略



另外在多轮对话过程中,存在一对多的问题,给定一个对话的输入,其实有很多种对话的输出可以作为它的回复,那我们选择哪一个呢?我们想通过 n-best 的模式生成更好的结果,而且是更多样的一个结果,同时这个结果能够导致话轮的增长,所以我们说聊天的主要目的是延长话轮数目,然后我们以这样一个动机探索了 DQN 的一个方式,利用深度强化学习算法 DQN,使用深度价值网络对每一轮的候选句子进行评估,并选择未来收益最大的而非生成概率最大的句子作为回复的多轮对话策略学习方法。实验结果表明,该文提出的方法相比较于 Seq2Seq 的方法将多轮对话的平均对话轮数提高了两轮。


⑧ 挖掘用户隐式反馈延长对话轮次



下面这个工作是基于强化学习来做的,这里不是为了提高对话轮数。我们在观察“笨笨”(见最后的 demo 部分)的 log 的过程中有很多的用户在抱怨“笨笨”或者是夸赞“笨笨”,比如说“你怎么这么笨?”“你说的这是什么东西?”其实这些都是用户情绪宣泄和反应。但它反应的过程其实是上一轮回复的质量不好,所以我们把用户的反馈作为隐式的信号,加入到人机多轮的对话中。然后一旦我们发现用户对“笨笨”有不太好的评价,下一轮回复中我们要采用这种评价。考量上一轮生成的不好的回复,及时纠正下一轮生成的回复。这里面就是基于用户隐式反馈的一个工作,我们采用了三种隐式信号。


⑨ 多轮聊天-回复生成技术



整个多轮多轮对话过程是从深度学习发展到强化学习的一个过程。


2. 前沿研究点:用户体验


除了对话质量,还有一部分影响用户体验的是上面特色的几个功能,包括情感对话和个性化,风格化,模拟机器人的画像等。


① 个性化回复生成



个性化分为自由文本描述的个性信息和结构化信息表示,自由文本描述的个性信息是外化气质内化的一个表现。比如说你养了一个宠物可能会间接反映出你是一个比较善良的人。结构化个性信息表示例如:你是否戴眼镜,你是否有房,你是否有车,你的年龄多大,你是男是女等等。


② 个性化回复生成代表性工作



我们说的这两个部分实际上都有相关联的一些工作,我们主要研究人性相关的一些信息,并且参加了去年的 NIPS ConvAI2 的一个评测。


③ NIPS ConvAI2 个性化聊天回复生成



我们和哈工大-讯飞联合实验室共同提交了两个系统,一个生成,一个检索,分别取得了第三和第四的成绩。


④ 引入个性化信息提高对话生成的多样性



基于参赛评测,我们也做了一些工作:1. 引入个性化信息,提高对话生成多样性的过程。类似于机器阅读理解,每次回复的是描述用户个性化信息的自然语言的片段。我们也提出了 Per.-CVAE 的模型,将 persona 作为一个 condition 加入到原有的 CVAE 模型中,效果得到了较大的提升;2. 风格化的回复,语言的风格和内容是高度相关的,不像图像的风格和内容是能够分开的,我给你一幅河边的景色图,无论转化成毕加索风格还是梵高风格,一眼就可以辨识出来,语言的风格和内容实际上是绑定的,例如阿里巴巴换成亲,甄嬛传换成小主,换了一个词就换了一种风格。语言的风格和内容实际上是一个绑定的过程。


⑤ 风格化回复的直观印象



我们可以有一个直观化的比较,比如星巴克有聊天机器人可以帮忙点咖啡,下面两种点餐方式达到的目的是一样的,但是用户体验却不一样,之所以带来用户体验的不同是因为机器人说话风格存在差异。


⑥ 已有风格化文本生成工作



Style transfer 不仅限于文本之间,很可能利用图片信息,通过图片的语义信息生成不同风格的 image caption 这样一个过程。


⑦ 风格化生成技术



从 18 年开始有对话上面生成风格化的技术,分别发表在 NAACL,AAAI 和 ACL 上,整个过程是从规则学习到对抗学习。


⑧ 风格化回复:一个初步的尝试



17 年的时候,我们做了一个工作,利用迁移学习进行风格化回复生成,最开始的想法是能不能用一个 bot 去个性化模拟一个人,但是模拟一个特征点可能不太合适,所以我们就模拟一个 CS 背景和一个人文背景不同类别学生之间的差异。我们仍然面临这样一个问题,具有个性化和风格化的数据是很少量的,我们怎样在很少量的数据上学习出它的风格,实际上采用了一个二阶段的迁移学习,一个 initialization 和一个 adaptation 的过程。Initialization 是用大量的百万级的无风格数据来训练,然后在少量有风格化的数据上做一个 adaption 的过程。


二. 任务型对话系统

任务型对话系统的架构



主要过程就是自然语言理解到对话管理到自然语言生成到语音合成。这其中有对知识库 look up 的一个过程,当然知识库不仅在对话管理进行交互,它也影响到自然语言理解和自然语言生成的过程。


前沿研究点


这里我介绍一下我们中心车万翔教授团队的两个工作,是任务型对话自然语言理解方面,主要针对两个比较大的问题。


  1. 意图识别与槽填充能不能联合建模

  2. 在工业型部署系统中,经常会遇到领域的一个迁移,比如今天做母婴领域,明天会做其它领域,或者说我今天卖鞋,明天卖冰箱。这种领域上的迁移不可能每次都找很多人来进行标注,这种情况下就面临着标注数据不足条件下的 NLU 问题。


1. 意图识别与槽填充联合建模


首先是意图识别与槽填充联合建模的问题,这个事件的动机比较明确,如果当作级联建模会存在一个错误结果累积的过程,显然我们可以把它联合建模,domain,intent,slot 都可以联合建模,这里只讨论 intent 和 slot 如何联合建模,这方面有很多之前的工作,包括 16 年开始的一个联合建模的工作,是把 intent 的识别和序列标注的过程当作多任务学习的过程,它们共享的是编码的双层 LSTM 过程。16 年还有一个工作是把序列标注当作一个 sequence2sequence 的过程,这里 intent 和 slot filing 也是共享编码这样一个结构,它们两个模型上虽然有差别,但是其实创新上没有特别大的差别,从上到下,从左到右分别对应 1 到 4 这 4 个工作,上面两个是隐式建模过程,下面两个是显式建模过程。


已有工作



这是现在我们正在做的一个工作,我们现在已有的工作都是输入一句话,我们给这句话打一个唯一的 intent 的标签,但在实际中,比如我们在用户建模 encode 一句话的时候,我想买一个漂亮的文具盒还是手机,这里就有两个不同的 intent 甚至 domain 都不一样,实际上 intent 应该打到词级别上。我们在建模一句话的时候,不同的词有不同的 intent,对最终 intent 的贡献也不一样,那么基于这样一个假设,我们把 intent 打到每个 token 上。


实验结果



实验结果显示我们取得了不错的结果,尤其在加了 Bert 之后效果更好。


2. 标注数据不足条件下的 NLU

下一个工作就是我们说到的新领域的问题,面临标注数据不足条件下的 NLU 的问题。


标注数据的自动扩充



一种方式就是我们造一些伪数据,给定少量用户标注数据,通过已有数据来造一些模板,利用模板将 slot 的值填进去,这样就能生成和当前语义上差不多但形式上不同的数据。



当然我们最主要的一个过程就是相似性排序,最主要的过程除了抽模板,要有一个多样性,是一个 Diversity ranking 的过程,这个 Diversity ranking 的动机也比较简单,就是你给我一句话,我们这两个语义是相似的,但是差一个词,对我这个模型其实是不好的,但是如果表面 surface 差的非常多,但是还表示一样的语义,这样的模板对我们后续的扩展是非常有用处的,所以基于这样一个方式我们提出一个 Diversity ranking 的过程,整个生成过程是一个 seq2seq 的过程。但是我们生成的不是完整的带 slot 值和 value 值,而是带槽的模板,最终我们会把槽和值填回去。


实验结果



最终我们在 ATIS 数据集和斯坦福对话数据集上都取得了一定的效果提升。


三. 总结

最后对分享的内容进行一下总结,分为两方面:一方面是开放域人机对话,另一方面是人机对话。除了讲的内容之外,列出的主要还是一些挑战。比如开放域人机对话中怎样建模情感,用户画像,怎么保证回复的一致性、多样化、个性化、风格化,另外就是上下文建模、隐式反馈我们怎样进一步挖掘。在任务型对话上也有几个比较大的关键点,领域、意图、语义槽三者能不能联合建模,多轮语境下的自然语言怎么去理解,最后是数据自动扩充 v.s. 小样本学习方向抉择问题。


四. Demo

我们实验室的名称是哈尔滨工业大学社会计算与信息检索研究中心,中心的主任是刘挺教授。


我们团队的主要研究方向是:1. 对话理解与对话生成;2. 对话式推荐。


我们实验室将技术做成了一个应用级的 demo,在上面进行持续优化,把所有的技术都应用在上面。16 年 6 月 6 日,人机对话系统“笨笨”正式上线,主要搭载形式是微信公众号以及实体的机器人。主要包括四个功能:闲聊、问答、任务型对话和推荐。



笨笨的系统结构如下,分为三大部分:自然语言理解、对话管理和自然语言生成。



下面给出了一些聊天示例,包括情绪抚慰性的聊天,情绪引导性的聊天,知识性问答,任务执行示例和推荐示例。其中任务执行主要包括机票、火车票、公交车、酒店信息查询等。





作者介绍


张伟男,哈尔滨工业大学计算机科学与技术学院社会计算与信息检索研究中心,副教授/博士。研究兴趣包括人机对话及自然语言处理。在 ACL、AAAI、IJCAI 及 IEEE TKDE 等 CCF A 类国际会议及国际顶级期刊发表论文 20 多篇。目前为中国中文信息学会(CIPS)信息检索专委会委员、社会媒体处理专委会委员、社交机器人工作组副组长、青年工作委员会委员,中国人工智能学会(CAAI)青年工作委员会委员。曾获黑龙江省科技进步一等奖、中国人工智能学会最佳青年成果奖、中国人工智能学会“合创杯”第二届全国青年创新创业大赛三等奖及首届“百度奖学金”。


本文来自 DataFun 社区


原文链接


https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247494879&idx=1&sn=b0cd639c29f62a1619413ec16df110f2&chksm=fbd75eb3cca0d7a5a41942094ca155f9f475841e3af6814ed99e7ce43ab5639103a947f055b4&scene=27#wechat_redirect


2019 年 11 月 06 日 08:002060

评论

发布
暂无评论
发现更多内容

2020-09-03-第十三周学习总结

路易斯李李李

商业通识 : 商业为什么能进步?

Walker

学习 得到 个人成长 商业

透彻理解AQS源码分析系列之AQS基础二

InfoQ_d2212957090d

深入理解JVM垃圾回收机制 - GC Roots枚举

WANDEFOUR

GC Roots枚举 安全点 安全区域 OopMap

ARTS打卡 第15周

引花眠

微服务 ARTS 打卡计划

不支持原子性的 Redis 事务也叫事务吗?

海星

Java redis 事务

2020-09-03-第十三周作业

路易斯李李李

用函数式写法精简Java代码的一个例子

Sean

Java 函数式编程

Go: gops如何与Go运行时交互?

陈思敏捷

go golang gops

读后感之《任正非:以客户为中心》

王新涵

程序的机器级表示-数组的分配和访问

引花眠

计算机基础

为稳外贸保驾护航 区块链交易平台显身手

CECBC区块链专委会

区块链 银行 福费廷

给大家介绍下,这是我的流程图软件 —— draw.io

程序员小航

工具 流程图 draw.io drawio-desktop 画图软件

oeasy教您玩转linux010206 蒸汽机车 sl

o

拥抱K8S系列-05-基于docker部署面临的问题

张无忌

Docker 运维

从湖南“软硬兼施”,管窥三湘水畔的智能浪潮

脑极体

架构师训练营第十三周总结

张明森

给DevOps加点料——融入安全性的DevSecOps

禅道项目管理

DevOps 运维 测试 开发 安全性

如何将VSCode变成绿色版本

lmymirror

vscode 教程

ARTS Week15

时之虫

ARTS 打卡计划

一点思考|工作十几年了,竟从未用过do-while!

王磊

Java

LeetCode题解:239. 滑动窗口最大值,单调队列,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

Spring 5 中文解析测试篇-Spring测试

青年IT男

Spring5 JUnit

云原生 go-zero 微服务框架

Kevin Wan

go golang microservice go-zero 微服务框架

甲方日常 8

句子

工作 随笔杂谈 日常

翻转链表,机器学习视觉训练,对数据的人工标注,使信息丢失,John 易筋 ARTS 打卡 Week 16

John(易筋)

学习 ARTS 打卡计划 翻转链表 Google论文评判人工预处理 大数据架构Spark

学习 Java,有什么书籍推荐?学习的方法和过程是怎样的?

沉默王二

Java 学习 程序员 书单

握草,你竟然在代码里下毒!

小傅哥

Java 程序员 小傅哥 bug 有毒代码

宁波新基建之路 基于制造优势破题智慧发展

CECBC区块链专委会

新基建

阿里巴巴发布国内首个公益区块链标准 用技术让公益公开透明

CECBC区块链专委会

区块链 公益

怎么向女朋友解释什么叫区块链?

艾小仙

比特币 区块链 以太坊 defi

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

人机对话关键技术及挑战-InfoQ