abstract:
- 目前seq2seq任务大多是从左到右一个词一个词生成的
- 神经网络的方法,比如LSTM或者self-attention,可以充分利用历史信息,但是不能利用未来信息(future information),从而导致结果的不平衡(左边由于右边)
- 本文提出一种同步双向推理模型:
- 提出平衡搜索策略,利用同步双向解码
- 同时交互使用left2right和right2left的双向解码,以便同时使用历史信息和未来信息
- 提出两种参数优化的策略
- 在机器翻译和摘要生成的实验上,比baseline实现了显著的提升
Introduction
- 目前许多自然语言处理的忍辱,例如机器翻译,摘要生成和机器人都是一个seq2seq的生成问题,也就是讲一个序列作为输入,生成另一个序列的问题。目前主流的seq2seq框架都是从左向右,依赖之前的输出生成当前的输出。目前的方法主要还是在探索如何的利用好历史信息
- 无论是L2R模型还是R2L模型,都会造成结果的不平衡
- L2R模型:左边效果优于右边
- R2L模型:右边效果优于左边
- 目前充分利用L2R模型和R2L模型的方法如下:
- 【6,7】加强训练过程中L2R和R2L的一致性来提高L2R的推理
- 【8.9】用R2L模型重排L2R模型的top-n结果
- 【10】首先得到R2L的输出,利用输入和R2L的输出,共同生成L2R的输出
上述方法虽然都用到了L2R模型和R2L模型,但是存在以下缺点:
- 训练过程中分别训练L2R模型和R2L模型
- 在推理的过程中,L2R模型和R2L模型没有进行交互
- 本文提出一种同时利用L2R和R2L进行解码并进行交互的同步双向推理模型,模型如下图:
- 提出一种同时适用于L2R和R2L模型的平衡搜索算法
- 在推理的每一步,每办个分支分别保留来自L2R和R2L推理的假设,每个假设都是利用两个方向的已预测输出生成的
- L2R模型和R2L模型之间的推理交互是通过一个同步attention实现的,这样可以同时利用历史信息和未来信息
箭头的方向代表信息的传递方向
- 实箭头代表历史信息
- 虚箭头代表未来信息
- 为了检验本文模型的生成能力,我们分别用LSTM和self-attention表示上述模型,在机器翻译和摘要生成两个任务上进行验证。此外提出两种参数的优化策略。
Synchronous Bidirectional Inference:
- Seq2seq模型的目标就是在已知输入序列的前提下,寻找输出序列是的下面的条件概率最大
- 单向模型(Unidirectional Inference)
- 将上述公式分解为L2R模型:
- 将上述模型分解为R2L模型:
无论是L2R模型还是R2L模型都缺少信息,L2R模型缺少未来信息,R2L模型缺少历史信息
- 同步双向模型(Synchronous Bidirectional Beam Search)
- 希望同时利用历史信息和未来信息,但是这不切实际。因为预测yi+1需要用到yi的信息,预测yi有需要用到yi+1的信息,因此每一步的预测都需要用到所有的context信息。所以我们后退一步,不在利用所有的context信息,而是利用尽可能多的context信息
- 算法1
- 算法2
- 算法3:
Synchronous Bidirectional Inference for LSTM-based Seq2Seq Framework
- 无论哪种类型的seq2seq模型,都有一个编码器和一个解码器。给定输入序列x将其转化为contex表示C,再将C解码成输出序列y
- 基于LSTM的seq2seq框架:
- 编码器:学习context向量C
利用上述公式,分别计算L2R和R2L的输出,将其输出通过全连接层得到最终输出
- 解码器:根据C选择最合适的输出:
其中zi是attention的输出
Context向量的计算是通过attention,其中系数越大贡献越大
- 基于LSTM的同步双向推理:
- L2R模型
利用到双向信息
其中z_i是第i个位置的L2R输出,ci是input根据attention计算的input context,cz_i是根据R2L模型的输出通过attention计算的output context(右)
- R2L模型
其中z_i是第i个位置R2L的输出,ci是input根据attention计算的input context,cz_i是根据L2R模型的输出通过attention计算的output context(左)
- Synchronous Bidirectional Inference for Self-attention based Framework
在decoder步骤使用双向信息
对于L2R模型,利用了两个attention,分别计算z_past(query为第i个位置的输出,key和value都是历史信息)和z_future (query为第i个位置的输出,key和value都是未来信息)
对于R2L模型,利用了两个attention,分别计算z_past(query为第i个位置的输出,key和value都是未来信息)和z_future (query为第i个位置的输出,key和value都是历史信息信息)
Z = z_parst + λ*tanh(z_future)
- 以上所说的未来信息是右边的信息,历史信息是左边的信息
- Tranning
目标函数:
无论是L2R模型还是R2L模型,都同时用到了历史信息和未来信息。这样做存在的问题是,会自己预测自己,这样是not reasonable。所以本文提出两种参数优化方案:
- Two-pass Training
Step1.利用数据,分别训练L2R模型和R2L模型
Step2.第二步训练时,L2R模型用未来信息采用step1中训练的R2L模型的输出,类似的R2L模型利用历史信息则用step1中的L2R模型的输出
- Fine-tuning Strategy
Step1.并行训练L2R模型和R2L模型利用三元组和下面的公式
Step2.训练收敛后,在对数据集中10%数据进行解码,得到(x,yL和yR),在进行Two-pass Training的step2
- Fine-tuning Strategy比Two-pass Training好的一点是不需要分别训练两个模型(同时训练两个模型,在我看来没什么差别),不需要对整个数据集进行decode,效率会好一点