如何让Transformer模型关注词序:FLOATER位置编码新方法

6 阅读5分钟

如何让Transformer模型关注词序

Transformer是一种神经网络架构,因其能识别长距离依赖关系,在自然语言处理任务中已被证明极为有用。例如,在一个包含“rented”一词的句子中,即使“rented”是第二个词而“flat”是第十个词,Transformer也能识别出“flat”更可能表示“公寓”而非其他含义。

然而,在其最基本的形式中,Transformer并不关心词的顺序。它能识别“rented”和“flat”之间的关系,但不关心哪个词在前。但词序对意义的影响可能非常大。试比较以下两个句子:“我们租了一套虽小但干净、设备齐全的两居室公寓”和“我们租了一辆虽小但干净、设备齐全的平板卡车”。

这些图像将输入文本序列的252个词(y轴)映射到由两种不同位置编码方案识别的512个潜在位置特征上。较浅的颜色表示特征值较高,较深的颜色表示特征值较低。FLOATER(底部)比早期的方案(顶部)产生了更规律的位置编码,早期的方案也从训练数据中学习其位置特征集。顶部可视化图底部附近的垂直线表明,该编码模型在处理比训练时遇到更长的输入序列时,只是在重复使用相同的编码,而FLOATER从浅到深的平滑渐变则表明其编码能轻松泛化到更长的序列。

自从那篇介绍Transformer的论文开始,研究人员提出了一系列位置编码器,旨在将词序信息注入Transformer模型。在最近的国际机器学习大会上,提出了一种新的位置编码器,它在多个自然语言处理任务上实现了优于前驱的性能。

该位置编码器的设计使其能够集成到现有的Transformer模型中,从而将优势赋予那些已在大数据集上经过广泛训练的NLP系统。

在Transformer于2017年推出之前,最流行的NLP架构是长短期记忆网络。LSTM按顺序处理序列输入,每个输出都反映了其之前的输入和输出。LSTM非常擅长推断局部关系(一个词与其紧邻的前两三个词之间的句法和语义关系),但在建模长距离依赖方面不如Transformer出色。这正是Transformer的强项。

位置编码的尝试旨在实现两全其美:既保持对长距离依赖的感知,又对局部词序敏感。理想的位置编码应具备三个特性:

  1. 能够处理任意长度的序列;也就是说,不应锁定在某个最大序列长度。
  2. 可从训练数据中学习;不同的任务可能适用不同的编码。
  3. 高效;添加位置编码不应不合理地增大神经模型的规模。

以往的位置编码方案最多只能满足其中两项标准。例如,最初的Transformer论文提出了一种基于正弦函数族的编码;该编码至今仍很流行,但它不可学习。

这个新方案名为FLOATER,是首个满足所有三项标准的方案。

编码位置最朴素的方法是简单地给输入序列中的连续词分配连续的数字。但这在机器学习背景下有缺点。如果模型在运行时遇到的序列长度未在训练中见过,它将不知所措。

因此,大多数位置编码方案转而使用位置向量,这些向量携带可用于推断两个输入相对位置的信息。然而,如果这些方案是完全可学习的,它们往往会增大模型规模;或者,为了控制模型膨胀,它们限制了可以比较相对位置的距离。

函数方法 FLOATER不是学习直接从输入序列中的每个词计算位置向量,而是学习一个函数,该函数根据前一个词的位置向量计算当前词的位置向量。

学习一个通用函数而非直接映射,使得FLOATER比其他可学习的编码方案空间效率高得多。但通用函数也可以应用于序列中的任何词,无论其位置如何,因此FLOATER对序列长度不敏感。

任何给定的手工设计的位置函数(例如最初的Transformer论文中提出的正弦函数)都可以看作是FLOATER通用函数的一个特例。因此,在预训练网络中,可以简单地用FLOATER替换任何此类函数,然后在一小部分训练数据上进行微调。

过去关于位置编码的工作表明,在Transformer网络的每一层重新编码位置信息可以提高NLP任务的性能。如果允许FLOATER为每一层学习不同的函数,模型规模将再次开始膨胀。

因此,替代方案是学习一个在每一层都应用的单一函数。由于各层的输入不同,这会导致每层产生不同的位置编码。实验表明,这种方法在模型规模和性能提升之间取得了良好的平衡。

在一组实验中,将新的位置编码器与两个领先的前辈在四个不同的机器翻译任务上进行了比较,发现它在所有任务中都取得了最佳结果。

在另一组实验中,将新的位置编码器添加到了之前在三个不同语言理解和问答任务上训练过的Transformer模型中。

在总共23个不同的任务中,添加新位置编码器后,有21个任务的性能得到了提升。在其性能略有下降的两个任务上,是那些在训练数据量更大时性能反而得到提升的、数据量较少的任务版本。