如何让Transformer模型关注词序
新型位置编码方案在多项自然语言处理任务中实现了最先进的性能提升。
Transformer是一种神经网络架构,因其能够识别长距离依赖关系而在自然语言处理任务中表现出色。例如,在一个包含"rented"一词的句子中,即使"rented"是句子中的第二个词而"flat"是第十个词,Transformer也能识别出"flat"更可能表示"公寓"而非其他含义。
然而,在最基本的形式中,Transformer对词序并不敏感。它能够识别"rented"和"flat"之间的关系,但不关心哪个词先出现。词序对意义可能产生重大影响。例如比较以下两个句子:“We rented a small but clean, well-equipped two-bed flat"和"We rented a small but clean, well-equipped flat-bed truck”。
这些图像将输入文本序列的252个词(y轴)与通过两种不同位置编码方案识别的512个潜在位置特征进行映射。较浅的颜色表示特征值较高,较深的颜色表示特征值较低。FLOATER(底部)比早期方案(顶部)产生更规则的编码,早期方案也从训练数据中学习其位置特征集。顶部可视化底部的垂直线表明编码模型对训练期间未见过的更长输入序列简单地使用相同的编码,而FLOATER从浅到深的平滑渐变表明其编码能够轻松推广到更长的序列。
从介绍Transformer的论文开始,研究人员提出了一系列位置编码器,将词序信息注入Transformer模型。在国际机器学习会议上,我们提出了一种新的位置编码器,在一系列自然语言处理任务中实现了比其前身更好的性能。
我们设计的位置编码器可以集成到现有的Transformer模型中,为已经在大数据集上广泛训练的NLP系统带来其优势。
在Transformer于2017年推出之前,最流行的NLP架构是长短期记忆网络(LSTM)。LSTM按顺序处理序列输入,每个输出既反映输入也反映其前面的输出。LSTM非常擅长推断局部关系——一个词与其前面两三个词之间的句法和语义关系——但在建模长距离依赖方面不如Transformer。
位置编码试图实现两全其美:既关注长距离依赖又对局部词序敏感。理想的位置编码应具备三个特性:
- 能够处理任意长度的序列
- 可从训练数据中学习
- 高效,不会不合理地增加神经模型的大小
过去的位置编码方案最多只能满足其中两个标准。例如,原始Transformer论文提出基于正弦函数族的编码,该编码仍然流行,但不可学习。
我们的方案FLOATER是第一个满足所有三个标准的方案。
编码位置的天真方法是简单地为输入序列中的连续词分配连续数字。但在机器学习环境中这有缺点。如果在运行时模型遇到训练期间未遇到的长度的序列,它将困惑于如何继续。
因此,大多数位置编码方案使用位置向量,这些向量携带可用于推断两个输入相对位置的信息。然而,如果这些方案完全可学习,它们往往会增加模型大小;或者为了控制模型膨胀,它们限制了可以比较相对位置的距离。
函数方法
FLOATER不是学习直接从输入序列中的每个词计算位置向量,而是学习一个函数,从前一个词的位置向量计算每个词的位置向量。
学习通用函数而不是直接映射使FLOATER比其他可学习编码方案更加空间高效。但通用函数也可以应用于序列中的任何词,无论其位置如何,因此FLOATER对序列长度不敏感。
任何给定的手动设计的位置函数——例如原始Transformer论文中提出的正弦函数——可以被视为通用FLOATER函数的特例。因此,在预训练网络中,我们可以简单地将FLOATER替换任何此类函数,然后在小训练数据集上对其进行微调。
过去关于位置编码的工作表明,在Transformer网络的每一层重新编码位置信息可以提高NLP任务的性能。如果我们允许FLOATER为每一层学习不同的函数,模型大小将再次开始膨胀。
因此,我们学习一个在每一层应用的单一函数。然而,由于输入不同,这会导致每一层产生不同的位置编码。我们的实验表明,这种方法在模型大小和性能改进之间取得了良好的平衡。
在一组实验中,我们将我们的位置编码器与其两个主要前身进行了比较,在四个不同的机器翻译任务中,发现它在所有任务中都取得了最佳结果。
在另一组实验中,我们将我们的位置编码器添加到先前在三个不同语言理解和问答任务上训练的Transformer模型中。
在23个不同的任务中,添加我们的位置编码器在21个任务上提高了性能。在两个性能略逊色的任务上,是在训练数据量较大的版本中它能够提高性能的低数据版本任务。