FlowSeq
大多数seq2seq模型是自回归的,它们通过对先前生成的标记进行调节来生成每个标记。相比之下,非自回归seq2seq模型一次性生成所有标记,通过在GPU等硬件上进行并行处理,从而提高效率。然而,直接同时对所有tokens的联合分布进行建模是非常具有挑战性的,即使模型的结构越来越复杂,其准确性也明显落后于自回归模型。本文提出了一个简单、高效的模型,用于使用潜在变量模型的非自回归序列生成。具体来说,引入生成流( generative flow ),这是一种使用神经网络对复杂分布进行建模的技术,并为序列潜在变量的条件密度建模设计了几层专门的流。
图1. FlowSeq的神经网络结构,包括编码器、解码器和后验网络,以及先验流的多尺度结构
首先概述FlowSeq的结构(如图1所示)和训练过程。与经典的seq2seq模型类似,在训练和测试时,FlowSeq首先读取整个输入序列x并为序列中的每个词计算一个向量,即源编码。
训练阶段,首先,从当前的后验q_φ(z|y, x)中抽取潜在代码z的样本。接下来,将Z和源编码一起送入解码器网络和先验,以计算P_θ(y|z, x)和 p_θ(z|x),以优化ELBO
测试阶段,通过执行生成过程,首先从先前的流程中对潜在代码z进行采样。对于一组潜在变量υ∈Υ,引入一个简单的先验分布p_Υ(υ)。然后,定义一个bijection function f:Z→Υ (g=f-1),据此可以定义一个关于变量z的生成过程
在这个步骤中,将编码器生成的源编码用作条件输入。然后,解码器接收采样的潜在编码z和源编码器的输出,从P_θ(y|z, x)生成目标序列y。
源编码器。
源编码器将源序列编码为隐性表征,在生成后验网络和先验网络的潜在变量以及与解码器的交叉注意力时,利用这些隐性表征计算注意力。任何标准的神经序列模型都可以作为其编码器,包括RNN或Transformer。
Posterior
潜在变量的生成。将潜在变量z表示为连续随机向量的序列z = {z_1, . . . , z_T }, 每个z_t是一个d_z维的向量,其中d_z是潜在空间的维度。后验分布q_φ(z|y, x)将每个z_t模拟为具有学习均值和方差的对角高斯:
零初始化。虽然对网络的大部分层进行了标准的随机初始化,但对产生μ和log σ^2值的最后一个线性变换再进行零初始化。这确保了后验分布是一个简单的正态分布,有助于更稳定地训练非常深的生成流。
Token Dropout。为了模拟生成过程中的不确定性,将潜在变量z引入模型。因此,z需要捕捉到y中的tokens之间的上下文相互依存关系。然而,有一个明显的局部最优,即后验网络生成的潜在向量z_t只编码相应的目标token y_t的信息,而解码器只是在每个步长t以z_t为输入生成 "正确 "的token。
解码器。
对于解码器,将潜在序列z作为输入,通过一个神经序列模型(如Transformer)的若干层运行,直接预测y中单独和独立的输出token。值得注意的是,与标准的seq2seq解码器不同,该解码器不进行causal masking以防止关注未来的token,从而使得模型完全非自回归。
Flow Architecture for Prior
整个流程架构基于Glow,将一系列的流程步骤结合在一个多尺度的架构中(见图2)。每个流程步骤包括三种类型的基本流程—actnorm、可逆多头线性( invertible multi-head linear )和耦合( coupling )。
图2. FlowSeq的神经结构,包括编码器、解码器和后验网络,以及先验流的多尺度结构
Predicting Target Sequence Length
在自回归seq2seq模型中,可以通过简单地预测一个特殊的EOS token来动态地确定序列的长度。然而,对于FlowSeq来说,要平行地预测整个序列,它需要提前知道其长度,以生成潜在序列z。具体做法是:不预测目标序列的绝对长度,而是使用一个范围为[-20, 20]的分类器来预测源序列和目标序列之间的长度差。这个范围内的数字是通过将源编码最大限度地集中到一个单一的向量中,通过线性层运行,并采取softmax来预测得到。这个分类器与模型的其他部分共同学习。
Decoding Process
在推理阶段,模型需要通过对所有可能的潜在变量进行边际化处理来识别具有最大条件概率的序列,这在实践中是难以实现的。文中提出了三种近似的解码算法来减少搜索空间:Argmax Decoding、 Noisy Parallel Decoding (NPD)、 Noisy Parallel Decoding (NPD)。
当前 SOTA!平台收录 FlowSeq 共 1 个模型实现资源。
项目 | SOTA!平台项目详情页 |
FlowSeq | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/flowseq |
mBART
mBART是一个seq2seq的去噪自动编码器,使用BART目标函数在多语言大规模单语语料库中进行预训练。mBART是第一个通过对多语言的完整文本去噪来预训练完整的seq2seq模型的方法,而以前的方法只关注编码器、解码器或重建部分文本。预训练一个完整的模型,可以直接为监督(句子级和文档级)和无监督的机器翻译进行微调,无需针对具体任务进行修改。
mBART使用一个标准的seq2seq Transformer架构,有12层编码器和12层解码器,模型维度为1024的16头(∼680M参数)。在编码器和解码器的顶部引入一个额外的规范化层,作用是在FP16精度下能够稳定训练。模型架构如图3。
图3. 多语言去噪预训练框架(左)和对下游MT任务的微调(右),使用句子互换和词跨度掩码两种方式作为注入的噪声。在编码器和解码器上都添加了一个特殊的语言ID token。所有任务都使用一个多语言预训练模型
训练数据涵盖K种语言。D = {D_1, ..., D_K},其中,每个D_i都是语言i的单语文本的集合。假设可以获得一个噪声函数g,它可以用于破坏文本,训练模型以预测给定g(X)的原始文本X。目标是如下式最大化L_θ:
在g中引入两种类型的噪声。首先,删除文本的跨度,用一个掩码标记代替。根据泊松分布(λ=3.5)随机抽出一个跨度长度来掩码每个实例中35%的单词。然后,对每个实例中的句子的顺序进行替换。解码器的输入是带有一个位置偏移的原始文本。利用一个语言id符号<LID>作为预测句子的初始标记。
对于一个批次的每个实例,取样一个语言id符号<LID>,并尽可能多地从<LID>的相应语料库中取样连续句子,直到它遇到文档边界或达到512的最大标记长度。实例中的句子由句末(</S>)token分开。然后,附加选定的<LID> token,以代表该实例结束。在 "多句子 "层面的预训练使我们能够同时进行句子和文件的翻译工作。
当前 SOTA!平台收录 mBART 共 2 个模型实现资源。
项目 | SOTA!平台项目详情页 |
mBART | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/mbart-2 |
BERT-fused
首先使用BERT来提取输入序列的表征,然后通过注意力机制将表征与NMT模型的每一层编码器和解码器融合,即将BERT的表征输入所有层,而不是只作为输入嵌入。使用注意力机制控制每一层与表征的互动方式,并处理BERT模块和NMT模块可能使用不同的单词分割规则、进而导致不同的序列(即表征)长度的情况。与标准的NMT相比,除了BERT之外,Bert-fused模型还有两个额外的注意力模块,即BERT-encoder注意力和BERT-decoder注意力。首先,将输入序列转换为BERT处理的表征。然后,通过BERT-encoder注意力模块,每个NMT编码器层与从BERT获得的表征进行交互,并最终利用BERT和NMT编码器输出融合的表征。解码器的工作原理与此类似,它融合了BERT表征和NMT编码器的表征。
图4. BERT-fused模型结构。左图和右图分别代表BERT、编码器和解码器。虚线表示残差连接。H_B(红色部分)和(H_E)^L(绿色部分)分别表示BERT和编码器的最后一层的输出
图4给出了算法说明。BERT、编码器和解码器逐步处理输入x∈X。
第1步:给定任何输入x∈X,BERT首先将其编码为表征:H_B=BERT(x)。H_B是BERT中最后一层的输出。h_B,i∈H_B是x中第i个词条的表征。
第2步:令(H_E)^l表示编码器中第l层的潜在表征,令(H_E)^0表示序列x的字嵌入,对于任何i∈[l_x],将(H_E)^l中的第i个元素表示为(h_i)^l。对于第l层,l∈[L],则有:
进一步,利用 FFN(·) 处理 (˜h_i)^l,则第i层有:(H_E)^l= (FFN(˜h_1)^l, · · · , FFN(˜h_x)^l)。编码器最终输出 (H_E)^L。
第3步:令(S<t)_l表示解码器中第l层在时间步长t之前的隐状态。第l层则有:
其中,attn_S、attn_B和attn_E分别表示自注意力模型、BERT-解码器注意力模型和编码器-解码器注意力模型。上式经过层层迭代,最终可以得到(s_t)^L。(s_t)^L通过线性变换和softmax进行映射,得到第t个预测词yˆt。解码过程一直持续到遇到 end-of-sentence token。
在该框架中,BERT的输出作为一个外部序列表征,使用注意力模型将其纳入NMT模型。这是一种利用预训练模型的一般方法,与标记化方式无关。
本框架还提出了一个Drop-net以确保BERT和传统编码器输出的特征得到充分的利用。在每个训练迭代中,对于任何一层l,从[0,1]中均匀地抽取一个随机变量U^l,然后所有的 (˜h_i)^l按以下方式计算:
同样地,对于解码器的训练,利用Drop-net,则有
当前 SOTA!平台收录 BERT-fused 共 3 个模型实现资源。
项目 | SOTA!平台项目详情页 |
BERT-fused | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/bert-fused |