对话系统综述

简介

今天来读一篇对话系统综述。《Recent Advances in Deep Learning Based Dialogue Systems: A Systematic Survey》是由南洋理工大学于 2021 年发表的论文,目前收录在 arxiv 中。该文调研了对话系统中的历史研究工作,并从模型和系统两个方面进行分析,确定了可能的未来研究方向。此外,本文还涵盖了相关框架、数据集的介绍。

具体而言:

  • 模型类型层面,分析广泛应用于对话系统的不同模型的原理、特点和应用。
  • 系统类型层面,讨论对比面向任务的对话系统和开放域对话系统。

背景

按照应用,对话系统通常可以分为两类:

面向任务的对话系统(Task-oriented dialogue systems),用于解决特定领域的特定问题,例如机票预订等。传统的面向任务的对话系统往往以流水线结构组织,包含四个基本模块:自然语言理解、对话状态跟踪、策略学习和自然语言生成。近期工作探索使用端到端的方法,以实现更好的效果。

开放域对话系统(Open-domain dialogue systems),旨在不受域的限制地与用户聊天,通常完全由数据驱动。开放域对话系统通常可以分为三类:

  • 生成系统。使用 Seq2Seq 模型将用户输入和历史消息生成回复,可以灵活生成上下文相关的回复,但有时缺乏连贯性并且乏味(例如我不知道)。
  • 基于检索的系统。根据用户输入从语料库中检索回复,受有限语料库的影响,有时检索到的回复与对话上下文相关性较弱。
  • 集成系统。结合生成和检索的方法,从二者中选出最优的。

此外,生成系统还可以用于改进检索得到的回复。

传统的对话系统大多基于有限状态的、基于统计学习和机器学习方法。基于有限状态的系统易于实现并且可以生成自然的回复,应用于早期的一些场景固定、对话流程确定的产品中。基于统计学习与机器学习的方法通常使用模板填充来处理任务,相较基于有限状态的系统,要更为灵活。但由于模板固定,应用场景和回复的多样性也受到限制。

深度学习的发展则提高了对话系统的性能,其广泛应用于各种 NLP 任务中,也是近些年的研究热点。

神经模型

本节讨论的模型包括:卷积神经网络 (CNNs)、循环神经网络 (RNNs)、Vanilla 序列到序列模型、分层循环编码器 - 解码器 (HRED)、记忆网络、注意力网络、Transformer、指针网络和 CopyNet、深度强化学习模型、生成对抗网络 (GAN)、知识图增强神经网络。

CNN

卷积神经网络Convolutional Neural Networks,CNN)包含卷积层,池化层和前向层,架构如下图所示。输入为长度为 7,特征维度为 5 的序列,使用 6 个卷积核得到 6 个特征图,池化后拼接得到 6 维向量,接一个全连接层后进行分类。

卷积核的操作如下。其中,m 和 n 代表结果矩阵行列的索引,f 是输入矩阵,h 是卷积核。滑动窗口使得卷积层能够捕获局部特征,池化层则用于扫描产生全局特征,赋予了 CNN 局部和全局感知能力。而参数共享机制可以降低模型的复杂度。 \[ G(m,n)=(f*h)(m,n)=\sum_j\sum_k h(j,k)f(m-j,n-k) \] 由于这些特性,CNN 广泛应用于 CV 中,在 NLP 中也得到了一定应用。CNN 是很好的文本特征提取器,但它们可能不是理想的序列编码器。虽然一些对话系统直接使用 CNN 作为编码器编码语言和知识,但是大多数历史最佳对话系统选择在编码文本信息之后,使用 CNN 作为层次特征抽取器。这是由于 CNN 的固定输入长度(输入尺寸改变,全连接层参数也需要改变)和有限的卷积跨度(难以捕捉长距离依赖)。

通常,CNN 用于处理编码信息的对话系统主要有两种情况:

  • 应用 CNN 基于来自编码器的特征向量提取特征。从 character-level embeddings 中抽取特征,证明了 CNN 的层级抽取能力。
  • 在响应检索任务中提取特征图。使用单独的编码器对对话上下文和候选响应进行编码,使用 CNN 作为从编码对话上下文和候选响应计算的相似度矩阵的提取器。实验表明,该方法可以在响应检索任务中取得良好的性能。

近几年较新的工作不选择 CNN 作为对话编码器的主要原因是,它们无法连续、灵活地跨时间序列提取信息。

RNN

标准神经网络和 CNN 的两个限制在于:假设数据不同位置相互独立;输入为固定长度。对于存在依赖、长度可变的输入序列,网络性能受到限制。循环神经网络(RNN)应运而生。公式的介绍可以参考我的博客循环神经网络 RNN 及其变体 GRU、LSTM | 一隅 (tqnwhz.github.io),这里就不再赘述。

在对话系统中,RNN 多用于编码器和解码器。编码器用于编码对话上下文、对话状态、对话历史以及外部知识等信息。解码器通过 greedy search 或者 beam search 进行解码。

HRED

HRED(Hierarchical Recurrent Encoder-Decoder)是一个上下文感知的 Seq2Seq 模型,使用两个层次的 RNN 对 token-level 和 turn-level 的序列进行建模,架构如下图所示。token-level RNN 编码器序列得到序列表征(同时也是解码器),turn-level RNN 编码对话历史的序列表征,得到当前的上下文向量,并作为解码器的初始状态。

HRED 还有一些变体。例如 VHRED 在解码阶段引入隐变量,以建模更复杂的序列依赖关系。最近在对话相关任务中的许多工作都应用了基于 HRED 的框架来捕获分层对话特征。其中有一些改进工作,例如参考 Transformer 引入自注意力,引入新的层次捕获全局知识、主题信息等。

Memory Network

记忆网络(Memory Network)是解决有关外部知识问题的重要网络。诸如 LSTM 类的模型,虽然有记忆功能,但记忆模块太小(只有一个固定维度的向量),无法精确地记录全部内容。因此 Weston et al. (2014) 提出了记忆网络,包含四个模块:

  • 记忆模块:存储记忆事实表示
  • I(Input)模块:将输入的记忆事实映射到嵌入式表示
  • G(Generalization)模块:决定记忆模块的更新,简单起见可以直接将新记忆插入,不进行遗忘和更新
  • O(Output)模块:根据输入和现有的记忆状态输出
  • R(Response)模块:根据 O 模块输出产生最终响应

端到端的记忆网络架构如下,流程分为三个阶段:

  • 权重计算:使用模型 A、B 分别将输入记忆和输入查询映射为向量,计算权重 \(p_i=Softmax(u^Tm_i)\) 代表查询 \(u\) 与记忆 \(m_i\) 的关系。
  • 记忆选择:使用模型 C 将输入记忆编码为嵌入向量 \(c_i\),并计算加权和 \(o=\sum p_ic_i\)。这实际上跟 Attention 类似,是一种 soft-alignment。
  • 最终预测:将记忆和查询的和映射为概率向量,即 \(\hat \alpha=Softmax(W(o+u))\)

记忆网络广泛用于 QA、面向任务的对话系统中,记忆模块用于存储外部知识等信息。记忆网络的思想也在很多模型中得到了体现。

注意力 & Transformer

为解决 Seq2Seq 将输入序列编码为固定维度向量带来的信息损失,Bahdanau et al. (2014) 提出注意力机制用于机器翻译任务。其思想是解码的每一步与整个输入序列关联,公式描述如下: \[ P(y_i|y_{t<i})=g(y_{i-1},s_i,c_i)\\ s_i=f(s_{i-1},y_{i-1},c_i)\\ c_i=\sum_{j=1}^{T_x}\alpha_{ij}h_j \] 其中,h 和 s 分别为编码器和解码器的隐藏状态,i 代表时间步,\(y\) 代表输出的 token。g 和 f 为计算输出和更新隐藏状态的函数,由 RNN 的种类决定。\(c_i\) 为解码的第 i 步与整个输入序列的注意力结果,\(\alpha_{ij}\) 为注意力分数,计算公式为: \[ \alpha_{ij}=\frac{exp(e_{ij})}{\sum_{k=1}^{T_x}exp(e_{ik})} \\ e_{ij}=a(s_{i-1},h_j)\\ \] a 是相关性度量函数,根据注意力的类型有不同的形式,\(\alpha_{ij}\) 即是相关性上进行归一化(Softmax)。注意力的图示如下:

此后,注意力机制大行其道,基本成为 Seq2Seq 的标配。但是由于 RNN 的不可并行性、难以捕捉长距离依赖等缺点,研究者提出了 Transformer,详细的介绍可参考我的博客 Transformer | 一隅

... 待补充

参考