让Transformer关注词序的新编码方法
Transformer神经网络架构在自然语言处理任务中表现出色,因其能够识别长距离依赖关系。例如,在一个包含"rented"一词的句子中,即使"rented"是第二个词而"flat"是第10个词,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系统也能受益。
技术方案比较
在2017年Transformer提出之前,最流行的NLP架构是长短期记忆网络(LSTM)。LSTM按顺序处理序列输入,每个输出都反映先前的输入和输出。LSTM擅长推断局部关系——一个词与其前面两三个词之间的句法和语义关系——但不擅长建模长距离依赖,而这正是Transformer的优势所在。
位置编码试图兼顾两者:既保持对长距离依赖的感知,又对局部词序保持敏感。理想的位置编码应具备三个特性:
- 能处理任意长度序列
- 可从训练数据中学习
- 保持高效性
过去的位置编码方案最多满足其中两个标准。例如原始Transformer论文提出的基于正弦函数族的编码虽然流行但不可学习。
我们的方案FLOATER是首个满足所有三个标准的编码方案。
FLOATER的创新方法
FLOATER不是直接从输入序列中的每个词计算位置向量,而是学习一个函数,从前一个词的位置向量计算当前词的位置向量。
学习通用函数而非直接映射使FLOATER比其他可学习编码方案更加空间高效。而且通用函数可应用于序列中的任何词,无论其位置如何,因此FLOATER对序列长度不敏感。
任何手动设计的位置函数(如原始Transformer论文中提出的正弦函数)都可视为FLOATER通用函数的特例。因此,在预训练网络中,我们可以直接用FLOATER替换任何此类函数,然后在小规模训练数据上进行微调。
实验成果
在一组实验中,我们在四个不同机器翻译任务上比较了我们的位置编码器与两个主要前代方案,发现它在所有任务中都取得了最佳结果。
在另一组实验中,我们将位置编码器添加到先前在三个不同语言理解和问答任务上训练过的Transformer模型中。在23个不同任务中,我们的位置编码器在21个任务上提升了性能。仅在两个低数据版本的任务上性能略逊,而在使用更大训练数据集时,这些任务的性能也得到了改善。
该方法通过学习单一函数应用于每一层,在模型大小和性能改进之间取得了良好平衡。