©PaperWeekly 原创 · 作者 | 褚维芜
学校 | 北京邮电大学研究生
研究方向 | 自然语言处理
笔者最近阅读了一些对话系统预训练相关的文章,其所采用的模型大致可以分为两类:生成式(GPT 系)和判别式(BERT 系、ConveRT 系)。其中判别式模型大多可以用于检索式对话系统的构建,本文主要对检索式对话系统预训练相关工作进行了整理和介绍。
背景
1.1 检索式对话系统
目前对话系统的建模主要有三种方式:生成式、检索式以及生成和检索融合的方式。检索式对话系统(Retrieval-based dialogue system)是根据对话历史和当前用户话语选择最合适的系统回复来与用户进行对话的系统。顾名思义,一个检索式对话系统的任务就是在大量的候选回复中选择一个最佳的回复反馈给用户,如下图所示。
检索式对话系统将对话建模为回复选择任务,这种方式构建的对话系统具有许多优势,例如:不需要专家定义结构化的领域本体,减少人工;避免了困难的语言生成(language generation)问题;回复选择模型的输出更方便进行约束和组合;不需要设计专用的用于决策的策略模块等。
然而,想要将对话系统应用于新的领域就需要足够多的域内数据来训练回复选择模型,获取这样的数据代价高昂且数据集的规模非常有限。尽管检索式对话系统的概念非常有吸引力,它仍然面临数据短缺(data scarcity)的问题。
1.2 预训练语言模型
目前,预训练语言模型(如 BERT、GPT 等)已经广泛应用于许多 NLP 任务。这些模型是基于大量的文本语料库(如:Wikipedia)进行自监督训练的,进一步 fine-tune 模型输出的表示可以在各种下游任务上取得很好的成果。
然而,由于文本和对话的语言模式存在一定的差异,传统的文本预训练模型很难在对话数据上进行 fine-tune。因此,近年来有研究者利用社交媒体的闲聊数据(如:Twitter、Reddit)来预训练语言模型,得到专用于对话系统的预训练语言模型,并将其运用于对话任务,取得了很好的效果。
在现有的研究中,对话系统预训练大量的工作是针对生成式对话系统(采用 GPT 系模型),也有一些以回复选择任务为主要目标的工作,这类工作更多地是应用于检索式对话系统。本文旨在对检索式对话系统预训练的一系列工作进行整理和介绍。
模型
2.1 pretrain (general-domain) + fine-tune (target domain) 模式
2019 年 6 月,PolyAI 团队发表了论文:Training Neural Response Selection for Task-Oriented Dialogue Systems [1](2019 ACL Paper),该论文提出了一种新的方法来训练面向任务型对话的回复选择模型。该方法先在 Reddit 数据集上预训练一个通用的回复选择模型,然后针对不同的对话领域对其进行 fine-tune,解决了任务型对话数据匮乏的问题。并通过实验验证了 pretrain+fine-tune 模式的有效性。
训练方式的选择:为什么使用 pretrain + fine-tune,不采用其他方式?
本文采用的方案是利用 Reddit 进行 pretrain(only run once),再利用预训练好的模型再各个领域 fine-tune。而其替代方案是,域内数据和 Reddit 数据融合成一个单一的训练集,但是这种方式存在如下的问题:
需要对每个任务进行昂贵的再训练
域内数据和 Reddit 数据大小之间的不平衡,目标任务信号被消除
初步实验结果表明,该方案的结果低于提出的轻量级 fine-tune 策略
所以 pretrain + fine-tune 才是时间上、性能上均为最佳的模式。
数据集的选择:为什么使用 Reddit 数据集?
Reddit 数据集包含原生的对话结构,且其数据量大、话题广泛、回复长度不受限制、回复话语更自然,所以非常适用于回复选择任务。
模型结构及训练
模型结构
预训练目标函数:Scaled Cosine Similarity Scoring
计算 input 和 response 之间的相似度: