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"。
从介绍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个任务上提高了性能。在性能稍逊的两个任务上,是训练数据较少的任务版本,而在具有更大训练数据集时,它提高了性能。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。