如果说自然语言处理可被誉为“人工智能皇冠上的明珠”,那么对话系统就是“自然语言处理皇冠上的明珠”。其中以苹果SIRI、Google Assistant为代表的任务型对话系统尤为学术界和产业界所关注。然而,构建一个任务型对话系统依赖于大规模的标注数据,这为系统如何快速迁移到新的领域、新的语言和新的任务都带来了极大的挑战。
2020 年 9 月 25日,由中国科协主办,清华大学计算机科学与技术系、AI TIME 论道承办的《2020 中国科技峰会系列活动青年科学家沙龙——人工智能学术生态与产业创新》上,哈工大计算机学院教授车万翔所作的学术报告《基于迁移学习的任务型对话系统》,重点介绍了他和博士生覃立波在跨领域、跨语言和跨任务的任务型对话系统中所做的一些研究工作。
1
人机对话历史渊源
人机对话的历史,最早可以追溯到图灵测试。1950年,图灵提出检测一个机器是否具备智能的方法,就是和机器进行对话,如果能欺骗人、让其分辨不出交谈的对象是机器还是人,就说明机器已经具备了智能。尽管人机对话作为人机交互的一个重要研究方向存在已久,但并未进入公众视野或真正普及,主要是因为当时对话方式的交互还十分困难、准确率不高。
随着2011年Siri的研发,乔布斯把人机对话正式推向公众,然而技术并不成熟。幸而随着深度学习技术的蓬勃发展,人机对话准确率越来越高,如今通过手机等移动终端以语音的方式和机器交流,不再停留于科幻电影的片段。
从近10年ACL顶会发表的人机对话相关论文占比来看,2015年前人机对话在自然语言处理领域并不火爆,然而2015年后论文数量明显增多。直到2020年,人机对话已经成为ACL论文产量最多的方向。
为何人机对话在2015年后才受到NLP领域的重视呢?
可能是因为2015年之前,语音识别作为基础问题还尚未解决,而语音如果没有转化为文本信息,自然语言的处理就无从谈起。但是2015年以后,语音识别已经达到很高水平,有时甚至超过人的识别能力,后续攻克的都是自然语言处理的问题,所以人机对话也越来越受到NLP领域的重视。
2
探秘任务型对话系统
人机对话可以大体分成四个类型,包括以Siri为代表的任务型对话、以微软小冰为代表的聊天型对话、知识问答以及推荐。
本次报告主要介绍任务型对话,即以任务或者动作为导向的对话系统。事实上,任务型对话技术在实际应用中几乎无处不在,从智能硬件、音箱、车载、个人助理到咨询类机器人等等。
正如斯坦福教授Chris Manning所预言,以虚拟助手为代表的人机对话形式,可能会吞噬整个互联网。现在的网页浏览与搜索的方式,以后可能会被更为便捷的会话和问答所替代,其中任务型对话会起到关键作用。
任务型对话系统的结构 (Pipeline系统)
整个任务型对话Pipeline系统分为几大部分:
首先,用户发出一个语音信号,通过语音识别转化为自然语言的文本,比如“帮我订一张去北京的机票”,接着进行自然语言的理解,包括领域和意图的识别、以及语义槽的填充,比如这句话的领域是机票、意图是订机票、语义槽是到达地等于北京。然后,这项结果传递给下一个步骤,即对话的管理。第一步是状态跟踪,第二步是策略优化,这些都涉及知识库以及一些API的调用。最后,生成自然语言比如“请问您从哪里出发”,经过TTS返给用户,流程不断循环并逐步完善用户的对话状态,最终实现用户查询。
但是,由于经过多重步骤,某个步骤出错会牵连其他步骤,这种传统Pipeline的方式存在错误级联的问题。另一方面,各个模块标注的代价也较大。为解决这个问题,NLP研究者们提出端到端的对话,抛开中间的步骤,直接根据用户的输入以及相应的输出训练模型。
尽管任务型对话系统在深度学习技术的帮助下取得了较大进步,我们仍面临一个问题:大量且高质量的标注数据难以获取。尤其在对话领域,不同的特定领域、新的语言、不同语种的交流以及小语种的迁移,都缺乏相应的数据,标注代价太大。
迁移学习:克服数据不足问题
因此,我们希望利用迁移学习技术解决上述问题。传统的方法针对一个任务训练一个模型,而迁移学习是针对一些原任务共同训练一个模型,再将学到的知识直接迁移到目标任务,从而使用少量标注数据达到不错的效果。得益于深度学习强大的表示能力,迁移学习方法在很多任务上取得了很好的效果。
整个迁移学习可以分为两大类:第一类是归纳式,原任务和目标任务不同,例如领域或者语言的差异;另一类是直推式的,原任务和目标任务相同。一个典型的归纳式迁移学习的预训练范式就是以BERT代表的深度学习预训练语言模型。除此之外,还包括多任务学习、以及跨领域和跨语言的迁移学习。
下面分别介绍在这三个方向近期的工作。
3
跨任务、跨领域和跨语言的迁移学习
1. 多任务学习
对话系统中自然语言理解这部分包括领域识别、意图识别、语义槽填充的任务,三者不能同时进行学习。
前两个任务是典型的分类问题,后一任务是典型的序列标注问题。
传统的方法是按顺序进行,但存在错误级联无法进行知识有效共享的问题,并且后面模块的信息无法传递到前面的模块。
因此我们希望做多任务的联合学习,把多个相关的任务放在一起学习。这种多任务学习之前有一种典型的框架,叫做共享的隐层表示,用LSTM或者Transformer等学习一个共享隐层之后连接不同的任务相关层。然而该做法使得任务之间通过隐式的方式交互,仍存在交互不够充分的问题。
尽管前人有利用Slot-gate机制来显式地建模了槽填充任务和意图识别任务之间的关系,这种交互仍然不够充分,并且无法捕捉每个token上的具体信息,每个句子只有一个意图并进行槽的填充。
因此我们提出一种新的多任务学习框架Stack-propagation,改造了传统的多任务学习方法,即找到任务A的同时支撑任务B、使两者产生联系,把任务A的结果输入给任务B,从而完成更好的多任务学习的方式。
整体框架如下:第一步,将意图识别的结果给语义槽,指导slot预测。第二步,给一个句子,将意图信息打到每一个token上,这样一方面可以解决token级别准确率的问题,同时能更有效利用监督信号、提高最终的性能。
实验结果表明我们的框架在两个数据级上都获得了更好的效果,尤其是在整体的准确率上对比之前的工作有显著提升。后来我们利用了预训练模型BERT之后,效果提升也比较明显。
2. 跨领域的迁移学习
通过用户和机器的对话历史来推测下一步机器说什么话,这可以是一种典型的Seq2seq模型。类似于机器翻译,我们把一句话翻译成相应输出的结果;但是和机器翻译不同,我们需要用到大量当前的知识。机器翻译对于一句话的语义是明确的,但对话中要用到知识库,同一句话根据不同知识会输出不同的结果。
那么,如何充分利用多个领域的数据?
一种最简单的方法就是把多个领域的数据进行混合来共同训练,但是这样简单地共享一套参数难以捕获所有领域的特征,从而忽略了领域之间独有的特点。前人的一个方法叫做共享-私有框架,就是把这些数据混合、变成共享的模块,再针对每个领域做私有的模块。但是,这种encoder和decoder的方法仍然是将每个领域逐个利用,忽略领域之间的细粒度关系,缺少领域之间交互的信息。
我们提出一种动态聚合的多领域融合框架,在利用所有领域的同时,每个具体领域对当前句子提供多大的信息是动态决定的。帮助较大的领域的任务最终权值也相对较大,没有帮助的任务则权值较小。其实相当于学习一个当前的例子和每个领域之间的相关度,也可以看成是一种attention的权重,通过这样自学习出来的权重最终来决策。最终的实验效果也是在两个数据集上进行了验证,效果比以前要好。
3. 跨语言的迁移学习
跨语言迁移是指,在语料充分的源语言上训练了一个模型,然后针对目标语言直接用之前训练好的模型进行标注,而不需要目标语言的标注数据。
针对跨语言学习,前人用多语言的BERT学习了跨语言共同的分布表示,即把多语言数据直接简单混合、训练一个多语言的mBERT。该方法并没有任何跨语言对齐的信号,上下文仍然是单语言的,因此处理跨语言的任务效果并不好。
为解决这个问题,人们提出AIML模型来实现语言的混合,将源语言的句子中某个对最终决策影响最大的词替换成目标语言,构成一个新的训练数据,然后在这上面进行训练。这种方法存在信息的缺失,而且每次只能部署到一种目标语言,效率较低。
我们提出多语言的code-switch,将多种语言混合在一起。
具体做法是从源语言的训练数据中选出一些句子,将句子中某些词语经过简单的词典替换成目标语言,但是目标语言是各种语言随机的替换,从而构成新的训练数据,用这个数据训练意图识别或者是自然语言理解的模型。这个模型训练好之后就可以直接应用于各种目标语言上。
让我们理解下这种方法背后的直觉:最终训练的损失是一样的,但如果输入的语言不同,比如把“eat”换成“吃”,就隐含着学习了两者之间相似的表示,达到了一种跨语言的效果。实验结果显示在西班牙语、泰语等小数据语言上,比传统的方法有20~30个点的明显提升。
4
总结
本次报告中,车万翔教授阐述了任务型对话系统的迁移学习中,如何利用多种知识,即跨领域、跨语言和跨任务知识,来弥补数据不足的问题。
- 多任务,通过Stack-propagation显示交互提高多项任务的性能;
- 跨领域,提出动态聚合shared-private框架提升多领域端到端任务型对话系统性能;
- 跨语言,提出multi-lingual code-switching数据增广方法提升Zero-shot跨语言能力。
欢迎大家进一步习读以下三篇相关论文及代码: