语言建模是 NLP 中的一种重要技术,因为它能够应用在各种 NLP 任务中,如机器翻译和主题分类等。目前,处理语言建模问题有两种最先进的架构——循环神经网络(RNN)和 Transformer。前者处理输入表征(单词或字符),逐个学习它们之间的关系;后者接收一段表征,并使用注意机制学习它们之间的依赖关系。

虽然这两种架构都取得了令人瞩目的成就,但它们的主要局限在于捕获长期依赖性,例如使用文档开头的重要单词来预测后面的单词。谷歌和卡内基梅隆大学的一篇新论文《Transformer-XL:超越固定长度上下文的注意力语言模型》结合了这两种方法的优点。新模型在输入数据的每个段上使用 Transformer 的注意力模块,并使用循环机制来学习连续段之间的依赖关系。

Transformer-XL 在多种语言建模数据集(如单词级别的 enwik8 和字符级别的 text8)上实现了最目前先进的结果,且该模型在推理阶段速度更快,比之前最先进的 Transformer 架构快 300 到 1800 倍。

背景介绍:Transformer 架构

语言建模的一种常用方法是循环神经网络(RNN),因为这种网络可以很好地捕获单词之间的依赖关系,尤其是当其中含有 LSTM(详见 https://colah.github.io/posts/2015-08-Understanding-LSTMs/)等模块时。然而,受梯度消失问题的影响,RNN 往往速度很慢,且其学习长期依赖的能力比较有限。

2017 年提出的 Transformer 架构(详见 https://arxiv.org/abs/1706.03762)为语言建模问题提供了一种全新的解决方案:注意力模块。注意模块不是逐个地处理表征,而是接收一整段表征,并使用三个可训练的权重矩阵——查询(Query),键(Key)和值(Value)来一次性学习所有输入表征之间的依赖关系。这三个权重矩阵构成了注意力头(Attention Head)。Transformer 网络由多个层组成,每个层都有几个注意力头(和附加层),用于学习表征之间的不同关系。

与许多 NLP 模型一样,Transformer 会首先将输入表征嵌入到向量中。由于注意模块中含有并发处理机制,模型还需要添加有关表征顺序的信息。这个步骤被称为位置编码(Positional Encoding),可帮助网络学习其位置信息。通常,该步骤使用正弦函数完成。该函数根据表征的位置生成向量,而不需要学习任何参数。

图:单个表征(E1)上的单个注意力头的示例。其输出是使用自身的 Query 向量及所有标记的 Key 和 Value 向量计算的(图中只显示一个额外的标记 E2)。Query 和 Key 定义每个表征的权重,其输出是所有 Value 向量的加权和。

注:有关 Transformer 的更深入讨论,可参考 Jay Alammar 的这篇博文

https://jalammar.github.io/illustrated-transformer/

最初的 Transformer 架构被用于机器翻译(含有编码器 - 解码器机制)。据此,Al-Rfou 等人(见 https://arxiv.org/abs/1808.04444)提出了一种语言建模架构。该架构的目标是根据之前的字符预测片段中的字符。例如,它使用 x1 ... xn-1 预测字符 xn,而右边的下一个字符则被屏蔽(参见下图)。这种 64 层变换器模型仅限于处理 512 个字符这种相对较短的输入,因此它将输入分成段,并分别从每个段中学习。如果在测试阶段需要处理较长的输入,该架构会在每一步中将输入向右移动一个字符,以此实现对单个字符的预测。

图:vanilla Transformer 语言模型的训练和测试示意。来源:Transformer-XL(https://arxiv.org/abs/1706.03762)

该模型在常用基准测试(enwik8 和 text8)上的表现优于 RNN 模型,但它仍然存在以下两个缺点:

  1. 上下文相关性有限。字符之间的最大依赖距离受输入长度的限制。例如,该模型不能“使用”出现在几个句子之前的单词。

  2. 上下文破碎。对于长度超过 512 个字符的文本,其每个段都是从头开始单独训练的。因此,对于每个段的第一个表征以及各个段之间,根本不存在上下文(依赖性)。这会使得训练效率低下,并会影响模型的性能。

Transformer-XL 的工作机制

Transformer-XL 架构基于 Al-Rfou 等人提出的 vanilla Transformer,但引入了两点创新——循环机制(Recurrence Mechanism)相对位置编码(Relative Positional Encoding),以克服 vanilla Transformer 的缺点。与 vanilla Transformer 相比,该架构的另一个优势是它可以被用于单词级和字符级的语言建模。

循环机制

循环机制的目标是通过利用之前段的信息来实现长期依赖性。与 vanilla Transformer 类似,Transformer-XL 处理第一个标记段,但它会保留隐藏层的输出。处理后面的段时,每个隐藏层都会接收两个输入:

  1. 该段的前一个隐藏层的输出,和 vanilla Transformer 相同(如下图中的灰色箭头所示)。

  2. 上一个隐藏层的输出(如绿色箭头所示),可以使模型创建长期依赖关系。

从技术上讲,这两个输入会被拼接,然后用于计算当前段(当前层的当前头部)的 Key 和 Value 矩阵。该步骤为网络提供了更多关于每个表征的权重(重要性)的信息,但它不会更改 Value 矩阵。

图:Transformer-XL 语言模型的训练和测试示意。来源:Transformer-XL(https://arxiv.org/abs/1706.03762)

该概念可以扩展到更长的依赖上。使用相同的方法,利用前面多个段的信息,只要 GPU 内存允许,在测试阶段也可以获得更长的依赖。

循环机制的另一个优点是其测试速度快。在每个步骤中,它可以一次前进一整个段(而不是像在 vanilla Transformer 中一次只能前进一个表征),并使用先前段的数据来预测当前段的表征。

相对位置编码

循环机制引入了新的挑战——原始位置编码将每个段分开处理,因此,来自不同段的表征会具有相同的位置编码。例如,第一和第二段的第一个表征将具有相同的编码,虽然它们的位置和重要性并不相同(比如第一个段中的第一个表征可能重要性低一些)。这种混淆可能会错误地影响网络。

针对此问题,论文提出了一种新的位置编码方式。这种位置编码是每个注意力模块的一部分。它不会仅在第一层之前编码位置,而且会基于表征之间的相对距离而非绝对位置进行编码。从技术上讲,它对注意力头分数(Attention Head’s Score)的计算方式不再是简单的乘法(Qi⋅Kj),而是包括四个部分:

  1. 内容权重——没有添加原始位置编码的原始分数。

  2. 相对于当前内容的位置偏差(Qi)。该项使用正弦类函数来计算表征之间的相对距离(例如 i-j),用以替代当前表征的绝对位置。

  3. 可学习的全局内容偏差——该模型添加了一个可学习的向量,用于调整其他表征内容(Kj)的重要性。

  4. 可学习的全局偏差——另一个可学习向量,仅根据表征之间的距离调整重要性(例如,最后一个词可能比前一段中的词更重要)。

实验结果

论文作者比较了模型在单词级别和字符级别数据集上的表现,并将其与其他著名模型(RNN 和 Transformer)进行了比较。Transformer-XL 在几个不同的数据集基准测试中实现了最先进的(SOTA)结果:

  1. 在大型单词级别数据集——WikiText-103 数据集上,18 层的 Transformer-XL(含有 257M 参数)获得了 18.3 的困惑度(Perplexity)。这个结果优于之前 Baevski 和 Auli(论文链接:https://arxiv.org/abs/1809.10853)得到的最优值 20.5。

  2. 在字符级数据集 enwik8上,12 层 Transformer-XL 达到了 1.06 位每字符(bpc),与 Al-Rfou 等人之前的 SOTA(链接:https://arxiv.org/abs/1808.04444)类似,但相比于 Transformer-XL,Al-Rfou 等人却使用了六倍以上的参数。另外,24 层 Transformer-XL 实现了一个 0.99 bpc 的新 SOTA。

  3. 有趣的是,在仅具有短期依赖性的数据集(如仅包含单个句子 One Billion Word 数据集)以及小型数据集(如仅含有 1M 表征的 Penn Treebank 数据集)上,Transformer-XL 也实现了 SOTA 结果。这表明该模型在这些情景中也可能有效。

循环机制和相对位置编码的优点如下面的图表所示。图中比较了不同上下文长度(即注意力头中使用的之前的表征的数量)中包含或不包含循环机制,以及使用或不使用新编码方式的困惑度得分。完整的 Transformer-XL 明显优于其他模型,并能够有效利用长期依赖性。此外,它还能够捕获比 RNN 更长的依赖性(延长了 80%)。

图:Transformer-XL 的对比实验。来源:Transformer-XL(链接:https://arxiv.org/abs/1706.03762)

最后,如前所述,该模型在推理阶段的速度也明显快于 vanilla Transformer,特别是对于较长的上下文。例如,对于 800 个字符的上下文长度,Transformer-XL 比 vanilla Transformer 快 363 倍;而对于 3800 字符的上下文,Transformer-XL 快了 1874 倍。

实现细节

该模型是开源的,并使用 TensorFlow 和 PyTorch 实现(链接:https://github.com/kimiyoung/transformer-xl/)。作者也上传了预先训练好的模型。每个数据集的训练具体需要多长时间并未明确给出。

结    论

Transformer-XL 在几种不同的数据集(大 / 小,字符级别 / 单词级别等)均实现了最先进的语言建模结果。它结合了深度学习的两个重要概念——循环机制和注意力机制,允许模型学习长期依赖性,且可能可以扩展到需要该能力的其他深度学习领域,例如音频分析(如每秒 16k 样本的语音数据)等。

此模型尚未在情感分析或问题回答等 NLP 任务上进行测试。另外,这种强语言模型与其他基于 Transformer 的模型(如 BERT,参见 https://www.lyrn.ai/2018/11/07/explained-bert-state-of-the-art-language-model-for-nlp/)相比有何优点,仍然有待解答。

相关资料传送门:

论文地址:

https://arxiv.org/abs/1901.02860

代码开源(包含 PyTorch 和 TensorFlow 的模型实现,而且带有预训练的模型):

https://github.com/kimiyoung/transformer-xl

原文链接:

https://www.lyrn.ai/2019/01/16/transformer-xl-sota-language-model/

转载:https://mp.weixin.qq.com/s/Xf3tCCTX6awd3bbjcSUAvQ

推理速度快千倍!谷歌开源语言模型Transformer-XL相关推荐

  1. 谷歌开源文本生成新方法 LaserTagger,直击 seq2seq 效率低、推理慢、控制差三大缺陷!

    目前,在序列到序列( seq2seq )的自然语言生成任务中,主流预训练模型仍然面临一些重大缺陷,例如:生成输出与输入文本之间长度匹配问题.需要大量训练数据才能实现较高性能.推断速度慢等. 因此,Go ...

  2. 谷歌开源缩放模型EfficientNets:ImageNet准确率创纪录,效率提高10倍

    晓查 发自 凹非寺 量子位 出品 | 公众号 QbitAI 最近,谷歌基于AutoML开发了EfficientNets,这是一种新的模型缩放方法.它在ImageNet测试中实现了84.1%的准确率,再 ...

  3. 程序员拒带电脑回家被开除获赔 19.4 万;库克称,很多功能来自中国消费者反馈;谷歌开源1.6万亿参数语言模型 | 极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 丁恩华 出品 | CSDN(ID:CSDNnews ...

  4. 150亿参数,谷歌开源了史上最大视觉模型V-MoE的全部代码

    来源:机器之心 本文共2400字,建议阅读5分钟 本文为你介绍谷歌开源史上最大视觉模型V-MoE的全部代码. 还记得谷歌大脑团队去年 6 月份发布的 43 页论文<Scaling Vision ...

  5. AutoML大提速,谷歌开源自动化寻找最优ML模型新平台

    为了帮助研究者自动.高效地开发最佳机器学习模型,谷歌开源了一个不针对特定领域的 AutoML 平台.该平台基于 TensorFlow 构建,非常灵活,既可以找出最适合给定数据集和问题的架构,也能够最小 ...

  6. 每秒处理240万帧游戏画面,AI训练成本降低80%,谷歌开源RL并行计算框架

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 对土豪来说最痛苦的是什么,就是有一大堆硬件却不能实现1+1=2的效果. AI训练中的并行计算就是如此,纵使你有一千张GPU,也无法实现单机 ...

  7. AutoML大提速,谷歌开源自动化寻找最优ML模型新平台Model Search

    作者|魔王.杜伟 来源|机器之心 为了帮助研究者自动.高效地开发最佳机器学习模型,谷歌开源了一个不针对特定领域的 AutoML 平台.该平台基于 TensorFlow 构建,非常灵活,既可以找出最适合 ...

  8. 用AutoML找到更小、更快、更好的模型,谷歌开源Model Search

    本文转载自机器之心. 作者:Hanna Mazzawi等 编辑:魔王.杜伟 为了帮助研究者自动.高效地开发最佳机器学习模型,谷歌开源了一个不针对特定领域的 AutoML 平台.该平台基于 Tensor ...

  9. AI周报丨全新图像分类方法ViR,性能全面超越ViT;谷歌开源最大视觉模型V-MoE

    01# 行业大事件 全新图像分类方法ViR,参数量下降85%,性能全面超越ViT 近一年来,视觉 Transformer(ViT)在图像任务上大放光芒,比如在图像分类.实例分割.目标检测分析和跟踪等任 ...

最新文章

  1. 网站架构之统一数据服务平台技术
  2. UA MATH571B 试验设计 QE练习题 平衡非完全区组设计BIBD
  3. Swift - 本地消息的推送通知(附样例)
  4. 优化算法求解复杂约束问题策略(以粒子群算法为例讲解求解复杂约束问题的多种策略)
  5. BZOJ2154: Crash的数字表格 BZOJ2693: jzptab
  6. Mybatis框架中SqlSessionFactory
  7. Istio 中的 Sidecar 注入及透明流量劫持过程详解
  8. 《朝花夕拾》金句摘抄(三)
  9. 电脑屏幕卡住了按什么都没反应_手机突然“死机”了关机也不行,怎么按都没反应,怎么办?...
  10. C++新特性探究(13.6):右值引用再探究
  11. Thinkphp 实现上一篇与下一篇的方法
  12. Hadoop CapacitySchedule配置
  13. AVOD-理解系列(二)
  14. Linux 在线词典
  15. 在线教育直播平台对比(钉钉/保利威/小鹅通)
  16. KEIL5创建新工程模板 以及文件简介概述
  17. Typescript 类型推断
  18. MacBook Air无电源合盖外接显示器休眠解决方案
  19. PYTHON笔记第十一章之pygame.mixer
  20. 张忠谋:摩尔定律将死,物联网是“Next Big Thing”

热门文章

  1. asp.net signalR 专题—— 第一篇 你需要好好掌握的实时通讯利器
  2. rm -rf误删文件的恢复(extundelete工具的使用)
  3. zw版【转发·台湾nvp系列Delphi例程】HALCON DivImage2
  4. 惠新宸:我也曾经是“不适合”编程的人
  5. DotNetBar for Windows Forms 11.8.0.8冰河之刃重打包版
  6. 正式开通我的开源博客
  7. 【拯救赵明】UTM解决网络安全大问题
  8. C语言两个同名头文件,C lang: C语言中两个头文件引入相同的头文件(Header.h)
  9. mysql常用的语句_MySQL常用语句集锦
  10. 数据挖掘概念与技术_文本挖掘