[细读经典]基于扩散模型做非自回归文本生成-综述

[细读经典]基于扩散模型做非自回归文本生成-综述

背景

最近刷到一篇文章,讲基于“扩散模型”来做“非自回归文本生成”(NAR, non-autoregressive,非自回归)的,感觉很有意思,就拿来学习一下。

128.84.21.203/pdf/2303.

人民大学为主,好久没有看到有人用163邮箱了。。。很多年前的回忆。。。

0 摘要:

目前的痛点:非自回归模型,解码速度(推理速度)快,但是精度不够高。

解法:基于扩散模型来做“非自回归”式文本生成,提升了生成质量。


本文就是做个综述:

  1. 介绍一下扩散模型,本文扩散模型的一般定义;
  2. 其在非自回归生成上的优势;
  3. 基于预训练模型来做“文本扩散模型”,以及引入面向文本数据的“优化技术”;
  4. 未来的几个方向。


本文的目标:

为相关研究人员提供,面向非自回归文本生成的,文本扩散模型,的综述。启发思维,提纲挈领。

1 介绍

自回归太慢,因为参考了y1, y2, ..., yt的目标序列“上下文”,所以解码速度是和目标序列的长度相关的。

但,非自回归效果又不好,因为没有考虑y1, y2, ..., yt这个“上下文”来生成y_t+1。

那就需要一些方法来提升非自回归的效果,例如,知识蒸馏,大规模预训练等。

当然,当红炸子鸡,扩散模型,也被从图片生成,引入到了文本生成里面了。


重要的一点:

扩散模型基于一个 多步骤去噪过程 ,把一个随机噪音,转换为一个数据样本。

那么扩散模型咋就行了呢:

  1. 扩散模型迭代式地,修复基于数据数据产出的中间结果。这一招,可以处理更复杂的条件约束下的高质量的文本生成【Li + NeurIPS 2022, Diffusion-LM的那个文章】
  2. 如果定义采样加速算法得当【Song Yang +, 2021】,那么扩散模型可以很好地在“解码速度”和“生成质量”之间平衡,从而提高生成的文本的质量。

当前有两个流派:

  1. continuous diffusion [Li + 2022] 连续扩散,【扩散过程,在连续的latent representations里面执行】
  2. discrete diffusion [Hoogeboom+ 2021, Austin + 2021] 离散扩散,【扩散过程在离散的文本tokens里面执行】

当然,这不是个简单的任务,之前的工作有些细节上的优化:

  1. 修正训练目标;
  2. 基于文本调节noise schedules,并继承预训练模型(大规模的PLMs).
11篇文章,这两年的和非自回归相关的“扩散模型”的工作

上面的表格里面,给出了11篇文章。

这里,UCG代表的是,无条件约束的生成,UnConditional Generation,

以及,A2T,attribute-to-text,属性到文本生成,

T2T,文本到文本生成。


2. 文本扩散模型的概览


2.1 扩散模型 DDPM

这里主要是介绍DDPM,没有介绍另外一个流派score-based models。

这个B站,就很多相关的视频介绍了。有兴趣的同学可以自查一下。


借鉴的是图片扩散模型中的思路。q分布负责炸楼,p分布负责盖楼。

下面是ddpm中常用的loss function以及其简化版本:


ddpm中的损失函数,以及其simple(简化)形式


2.2 文本扩散模型


离散文本下的,其开始噪音是[mask]这样的tokens,

连续文本下的,其开始噪音是 随机高斯噪音。


去噪过程,一般依赖于一个 参数化的去噪神经网络(parameterized denoising network),其一般通过transformer架构实现。

训练阶段:

去噪网络学习,基于给定的 噪音schedule,目标函数,以及条件策略,

来学习如何恢复中间(带噪声)的结果。

解码阶段:

从一个随机噪声Y_T出发,去噪网络逐步从Y_T及后续中间结果中,擦除噪声,一直到生成目标文本。

需要注意的是,每一步,基于非自回归生成策略,文本扩散模型并行预测所有隐变量(latent variables),这个过程可以被公式表示为:

非自回归文本生成中的,扩散模型的建模

上面的公式中,

  1. c是输入条件,如果是翻译,那么c就是源语言的一个句子文本;
  2. t是时间步,刻画的是不同“量级”的噪声,以及“扩散程度”,上面的公式中,t是从T-1到0的,代表了“解码过程”,即逐步“从噪声恢复到无噪声样本点”的过程;
  3. 这里的i是从1到n的,代表了目标序列中是n个tokens,一直不变;
  4. Y是目标文本序列。


也就是说,每一步都是从y_t+1,参考条件c,来构造出来y_t的。所以,可以确保y_t+1和y_t是等长的,但是c是啥长度,就不重要了,因为c是扮演了key, value的角色的memory。


2.3 NAR中扩散模型的优点

对于单纯的NAR而言,其虽然可以降低解码延迟,但是难于捕捉tokens之间的依赖关系,从而导致相对低的准确率。

幸运的是,文本扩散模型,可以有效的提高NAR生成的准确率。

本综述文章,列出了三个“文本扩散模型”的优点:

  1. 带约束的迭代式“精修” ,constrained iterative refinement。文本扩散模型,提供一个带约束的迭代式精修过程,来逐步提高生成文本的质量。其中每一步,都是限定为对一个带有预先定义好方差的“随机噪声”,进行去噪。如此这般,多步迭代过程是稳健的,并且逐级地恢复出来目标序列。这一方法,也适用于多种文本生成任务。
  2. 引入中间的控制 ,introducing intermediate control。已有的方法包括,向中间结果注入控制条件,这包括通过增加额外的分类器【Li + 2022】或者使用 无分类器控制【Strudel + 2022】来实现。已经有理论上的和实践上的证明,这些方法可以直接引导 中间预测结果 向着 满足控制约束需求的, 目标文本前进 。【即,生成可控的中间结果,而且控制条件,在每一步迭代的时候,都起作用】
  3. 在时间成本和文本质量上做平衡 ,trading off between time cost and quality。在解码的时候,现有的NAR方法,在时间成本和文本质量上寻求平衡。例如,主要通过微调迭代轮数(iterative turns)来实现这个目标。当减少迭代轮数的时候,可以提高解码速度,但是会降低生成的文本质量。但是,迭代轮数(例如,decoder部分的层数,这里的decoder是直接接到encoder后面的,不是自回归的那个decoder)一般在训练阶段就被定死了。在解码阶段,不容易重置(reset)这个迭代轮数。与此对应,文本扩散模型,则可以提供更自由的方式来平衡“时间成本”和“文本质量”,例如基于DDIM【Song+ 2021】方法。实验已经证明,这些方法可以自由地调节迭代步数,而这一“骚操作”,对文本质量的影响不大。从而,文本扩散模型,提供了一种更好的平衡“时间成本”和“文本质量”的方法。

3 为文本定制扩散模型

扩散模型是连续空间下的,而文本都是离散的。

即,离散的文本tokens,无法直接被连续空间的噪音,添乱。

所以,我们需要魔改一下已有的扩散模型。


本节,我们就概览一下已有的两个流派:

  1. 基于离散tokens的扩散模型;
  2. 基于tokens的隐表示(word embedding)的扩散模型。

3.1 离散文本扩散模型

离散的文本扩散模型,架构图(流程图)

上面主要是用[Mask]这样的tokens来作为”离散噪音“。左边的x_T是全[Mask]的序列,其和最右边的x_0是等长的。而最右边的x_0是原始没有被”糟蹋“的”清白的“文本序列。


有三个工作,值得提一下。

其一,【Sohl-Dickstein +, 2015】二元扩散过程,预测连续数据的,二元表示(binary representations)。


其二,【Hoogeboom+, 2021】进一步探究了,使用uniform transition kernel(均匀的迁移核函数)来做离散状态的扩散过程。


其三,【D3PM, Austin+ 2021】提出了一个,面向离散状态的,统一的扩散模型框架。

并首次在大规模语料库上,测试了其”离散扩散模型“。

对于一个取值范围为1, ..., K的离散数据x,

D3PM定义一个迁移矩阵(transition matrix):

[\textbf{Q}_t]_{ij} = q(x_t=j|x_{t-1}=i)

来腐蚀x。

从而,前向扩散过程,是如下的形式:

离散扩散过程的,炸楼部分,无可训练参数

D3PM,引入了一个“带吸收状态”的迁移矩阵,允许每个token,基于一个概率beta_t,被转变成[Mask] token。

而在解码阶段,D3PM从一个全[mask]的序列出发,迭代式地用word tokens替换掉[Mask] tokens,从而最终想要的文本,被生成出来。

【也就是说,一旦一个mask被变成了实际的word,那就没有机会再从这个word,变成其他的word了!】


3.2 连续文本扩散模型

连续空间下的,文本扩散模型

这个图,看起来就熟悉很多了,每个词分配一个向量(word embedding),然后就是在dense space上,做ddpm应该做的事情了。

向左是扩散过程,向右是重建过程。

这个word embedding矩阵,是可学习的!

而在重建过程中,已有的工作,例如Diffusion-LM,使用了一个rounding step,来把最终的生成的dense vectors,转换成离散的tokens。(借助了softmax的力量了)。


解码阶段:

从随机噪声出发,依据逆向扩散过程(即,重建过程),把噪音恢复成word embeddings, 然后再基于rounding step,把word embeddings,映射到word tokens.


为了联合学习“去噪网络”和“词嵌入和词tokens之间的映射关系”,Diffusion-LM使用如下的训练目标:

Diffusion-LM中用的损失函数的拆解。


和上面的,把tokens映射到word embeddings的操作不同,

SSD-LM (Han+, 2022)则是使用simplex representation,(单纯形表示?)对词表V,操作,来表示tokens。

给定一个token w,其单纯形表示为:

上面的是SSD-LM的一些技巧,不过还是需要看原始论文的。。。

上面提到的,

  1. simplex representation,单纯形表示;
  2. logits-projection operation,logits映射算子;
  3. almost-one-hot representations,大约-one-hot 表示。

这仨货是啥,还需要进一步看SSD-LM的论文了。。。TODO


待续了。

发布于 2023-03-24 05:27 ・IP 属地日本

文章被以下专栏收录