首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >追溯XLNet的前世今生:从Transformer到XLNet

追溯XLNet的前世今生:从Transformer到XLNet

作者头像
AI科技大本营
发布于 2019-07-16 02:18:05
发布于 2019-07-16 02:18:05
1.6K0
举报

作者丨李格映

来源 | 转载自CSDN博客

导读:2019 年 6 月,CMU 与谷歌大脑提出全新 XLNet,基于 BERT 的优缺点,XLNet 提出一种泛化自回归预训练方法,在 20 个任务上超过了 BERT 的表现,并在 18 个任务上取得了当前最佳效果!从 BERT 到 XLNet,预训练模型在不断进步,本文将解读 XLNet 的诞生过程,回顾它的前世今生。

前言

正当 GPT-2 还拿着 15 亿参数的模型吊着人们的胃口时,XLNet 带着开源的代码和 20 项 SOTA 的成绩悄悄发布了。从 BERT 到 XLNet,大一统预训练模型的成功,无疑昭示着行业的快速进步。现在是最好的时机。回到正题,本文虽篇幅较长,但能提供不一样的视角,帮你迅速理清模型的细节。废话不多说,笔者这就将带你快速品读,XLNet 诞生之路上最重要的三篇论文:

  • Attention Is All You Need (12 Jun. 2017)
  • Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context (9 Jan. 2019)
  • XLNet: Generalized Autoregressive Pretraining for Language Understanding (19 Jun. 2019)

一、Attention Is All You Need

论文链接:https://arxiv.org/abs/1706.03762

代码链接:https://github.com/tensorflow/tensor2tensor

这篇论文诞生于 2017 年 6 月,彼时 RNN、LSTM、GRU 早已名扬天下,发迹于 2015 年的 Attention 机制也在经历各种变形的考验,两者相互合作,占据了 NLP 的半边天。循环神经网络最大的缺陷,在于其序列依赖性,上一时刻输出的隐藏状态(以及 LSTM 的记忆细胞)和本时刻的输入共同作为新一轮的单元细胞处理材料,如此往复。

出于自回归的特性,单单凭借一到两个矩阵完整而不偏颇地记录过去几十个甚至上百个时间步长的序列信息,显然不太可能,其权重在训练过程中反复调整,未必能刚好应用到测试集的需求上。更不用提训练时梯度消失导致的难以优化的问题。这些缺陷从 LSTM 的单元公式便足以看出。后续新模型的开创者们始终没有推出一个可以完美解决以上问题,同时保证特征抽取能力的方案,直到 Transformer 出现。(下图为应用于文本摘要任务的模型结构示例,结构为双向 LSTM 搭配 Attention 机制)

在各种情景下历经切除试验而始终保持稳健性的 Attention 机制不能抛弃,于是 Transformer 的发明者选择将其保留,而彻底摒弃循环神经网络的设计架构。取而代之的,是回炉再造后焕然新生的 Attention 机制,叫做 Self-Attention,意为 “Attention on oneself”。

▌Attention机制

在介绍 Self-Attention 前,我们首先回顾一下 Attention 机制的原理,委屈一下对 Attention 机制熟悉的读者。Attention 机制的目的是作为 Encoder 的附加层,提取更为丰富的特征信息。其核心在于三个要素:Query, Key 和 Value,公式如下,

Attention(Q,K,V)=Similarity(Q,K)V

其中分dk一般为词向量的维度。在此基础上进一步变形,将 Query, Key, Value 经过多组线性变换后分别放入 Scaled Dot-Product Attention,对得出的结果进行合并并进行二次线性变换,这样的 Attention 机制称为 Multi-Head Attention:

在另一方面,以上问答系统案例中的 Query 和 Key 分别来自与文本和问题有关的隐藏状态,而当 Query 和 Key 来自同一组对象时,即计算相似度时我们将词向量与文本本身的其他词向量组合求相似度,不引用任何其他信息,这样的 Attention 机制称为 Self-Attention。自注意力输出的特征直接替换原隐藏状态,不再与其合并。以上四者的结合便是 Attention 机制在 Transformer 中的应用,更多细节我们将在下文中介绍。除以上几者之外,Attention 还有诸多不同的变形方式,包括拼接后导入感知机代替点积进行相似度计算,以及以加权平均的方式代替 Attention 输出特征与 Query 的纵向合并,感兴趣的读者可自行了解。

▌Transformer

使用循环神经网络搭配 Attention 机制进行各种变形形成 Encoder,再接一个作为输出层的 Decoder 形成 Encoder-Decoder 架构,是 Transformer 诞生前夕各类主流 NLP 神经网络的设计思路。

例如动态协同注意网络 (Dynamic Coattention Network, DCN) 使用作为 Encoder 的单向 LSTM + 协同注意力编码器对来自文本和问题的隐藏状态进行多次线性/非线性变换、合并、相乘后得出联合矩阵,再投入由单向 LSTM、双向 LSTM 和 Highway Maxout Networks (HMN) 组成的动态指示解码器 (Dynamic Pointing Decoder) 导出预测结果;双向注意流网络 (Bi-Directional Attention Flow, BiDAF) 除特殊的由循环神经网络构成的结构外,同时使用问题到文本和文本到问题的注意力矩阵提取特征。

在问答领域还包括 DrQA、AoA、r-Net 种种变形后表现有所提升的模型,其他领域则更多。但无论如何,始终摆脱不掉 RNN 或 CNN 的影子。

Transformer 超脱于其中,是第一个使用自注意力机制,彻底摆脱循环或卷积神经网络依赖的模型。模型结构如下:

左侧和右侧分别是基础的 Encoder 单元和 Decoder 单元,两者搭配在一起组成一个 Transformer 层 (Transformer-layer)。为行文清晰,我们将模型细节由浅入深,整理为以下要点:

  • Inputs:模型的训练基于单向 many-to-many,不要求 Inputs 和 Outputs 的长度相等,两者不等长时将空缺部分填充为 0 向量。
  • Outputs (shifted right):在一般任务下,模型训练的目的为预测 next token probability,从而保持 Inputs 和 Outputs 等长,Outputs 取自于文本中相对于 Inputs 右移一个位置,即 shifted right;在进行翻译任务的训练时,则输入一个不等长的句子对。
  • Nx:论文中的 Transformer 深度为六层。在每一层的结尾,Encoder 输送隐藏状态给下一层 Encoder,Decoder 同理。
  • 三个箭头:通向每个注意力层的三个并列的箭头从左到右分别为 Value、Key 和 Query。Encoder 在每一层将隐藏状态通过线性变换分化出 Key 和 Value 输送给 Decoder 的第二个注意力层。
  • Input Embedding:使用预训练词向量表示文本内容,维度为 dmodel ,论文中 dmodel=512.
  • Positional Embedding:依据单词在文本中的相对位置生成正弦曲线,以记录序列长度信息,针对 pos pospos 位置上的奇数维和偶数维,

  • Masked Multi-Head Attention:仅应用于 Decoder 的第一个注意力层。在 Multi-Head Attention 的基础上做 Masking 处理,其目的在于计算某一位置 Self-Attention 时不利用到右侧我们将要预测的信息,所有与右侧位置的点积不参与计算,直接取值为 −∞,这样一来经过 Softmax 归一化处理,右侧位置的权重将接近于 0。
  • Linear:输出模型结果的概率分布,输出维度为预测目标的词汇表大小。

以上概括虽简短,但皆是论文内容的高度浓缩,相信读者到这里已经非常清楚 Transformer 的架构了。由于引入了自注意力机制,Transformer 避免了使用自回归模型提取特征的弊端,得以充分捕获近距离上文中的任何依赖关系。不考虑其优良的并行特性,在应对文本总长度小于词向量维度的任务时 (例如机器翻译),模型的训练效率也显著高于循环神经网络。夸归夸,Transformer 也有不足之处。之所以说是捕获近距离的任何依赖关系,是因为论文没有提到,当输入文本的固定长度持续增长时,其训练时间也将呈指数上涨。也因此,Transformer 的序列建模长度不如 LSTM,输入句子对是标准的训练形式。

▌成绩

论文作者在两项机器翻译任务上训练 Transformer,并刷新了历史最佳成绩。分别为 WMT 2014 年英德翻译数据集 (包含450万个句子对),和 2014 年英法翻译数据集 (包含3,600万句子对)。前者预测的是德语语料的双字节编码 (byte-pair encoding),词汇大小为 37,000,后者则是纯粹的单词,共计 32,000 个。

每次投入包含 25,000 个源语言词汇以及 25,000 个目标语言词汇的句子对批量进入模型训练。训练在 8 块 Nvidia P100 GPU 上进行,依据上文所述超参数进行配置的基础模型使用了 12 个小时训练了 100,000 个步长,平均每个步长耗时 0.4 秒;而经过反复调参,表现最好的大参数模型花费 3.5 天训练了 300,000 个时间步长,每个步长耗时 1 秒。

优化器选用 Adam Optimizer。训练时采用了三种正则化方式:1)在每一个注意力层和前馈层后接一个概率为 Pdrop=0.1 的 Dropout 层;2)在将 Input 或 Output Embedding 和 Positional Embedding 进行加法运算后以同样的概率随机 Dropout;3)对模型标签采用 els=0.1 的平滑处理。这三种方式都一定程度地提高了模型的泛化能力。更多细节请读者自行参考论文。

最终 Transformer 在第一个任务上将历史最佳表现提升两个百分点到 BLEU 28.4,第二个任务提升 0.5 个百分点到 BLEU 41.8。除这两个任务以外,论文阐述了在英文句法分析 (Consituency Parsing) 上也取得了不错的效果。

Transformer 最大的成就在于引入自注意力机制,摆脱了序列模型自回归式的设计。由于没能在实际任务的应用上大范围地刷新 RNN 系模型的成绩,因而没有引起如同 BERT 和 XLNet 诞生之时的轰动。在此期间,仍然有大量的学者致力于研究 LSTM 梯度消失问题的解决方案,包括调整参数初始化,增强记忆结构,调整单元架构等等,没有将注意力放在 Transformer 上。正是借助 OpenAI GPT、BERT 这些表现亮眼的上层模型,Transformer 才在一两年后逐渐奠定它的江湖地位。

二、Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context

论文链接:https://arxiv.org/abs/1901.02860

代码链接:https://github.com/kimiyoung/transformer-xl

这篇论文发布于今年年初 (9 Jan. 2019)。论文中,Transformer-XL 旨在于解决长期以来困扰 NLP 界的难题:捕捉长距离依赖关系,这也是其名称的由来 XL: extra long。有学者研究表明,LSTM 的平均上下文长度为 200 (Transformer 低于 50)。而在同等的计算力下,Transformer-XL 最终可以捕获的依赖关系距离比循环神经网络远 80%,更超出 Transformer 450%。

这还不够,next token prediction 速度更是 vanilla Transformer (Transformer 在字符级和深度上的改良版本) 的 1,800+ 倍。这其中的秘诀在于 Transformer-XL 对自注意力机制引入的两项调整 —— 循环机制 (recurrence mechanism) 和 相对位置编码 (relative positional encoding)。但 Transformer-XL 和 Transformer 的区别还远不止于此,我们会在下文中逐步展开相关介绍。

▌Vanilla Transformer

两者还存在诸多区别的原因,在于 Transformer-XL 并非直接从 2017 年发布的原始 Transformer 演化而来,而是一个叫 vanilla Transformer 的版本。该版本首次出现在 Rami Al-Rfou 等人于 2018 年发布的 Character-Level Language Modeling with Deeper Self-Attention (9 Aug. 2018),论文链接。(该论文中并没有提到 vanilla 的字样,至于本文作者为何称呼该模型为 vanilla,笔者暂未找到答案,尚且沿用这一称呼)。

Vanilla Transformer 将 Transformer 的深度扩展到 64 层,并应用了 标准 Transformer 架构 (standard Transformer architecture):将每一层中的 Decoder 剔除,并将 Encoder 中的自注意力层改为 Masked 自注意力层,由此一来模型结构大大简化,使得 Transformer 具备成为优秀特征提取器的资质 (如同当年 RNN 那样)。在下文中介绍 BERT 和 XLNet 时我们将会多次提到这一概念。

Vanilla Transformer 还引入了一些其他独特的设计,包括在中间层添加辅助损失函数提前参与收敛,这里不进行赘述。训练时,首先将完整的语料分成若干个等长的 segment,计算 self-attention 不考虑本 segment 以外的语料信息,由此预测 segment 内部的 next token probability。而在推理 (预测) 时,逐字划分 segment 边界,每过一个时间步长则向右滑动一个单位。如下图所示:

本论文指出,这样的设计存在两个重要缺陷:1)捕捉长距离依赖关系依然受限于 segment 的长度,同时无法充分利用自注意力机制的优化优势;2)将语料序列直接划入等长的 segment 将把句子横空切断,造成上下文碎片化 (context fragmentation)。

▌循环机制

爱之深,责之切。批评过后,论文提出了解决方案:循环机制。同 vanilla Transformer 一样,将语料事先划分为等长的 segments,训练时将每一个 segment 单独投入计算 self-attention。每一层输出的隐藏状态作为记忆存储到内存中,并在训练下一个 segment 时,将其作为额外的输入,代表上文中的语境信息。这样一来便在上文与下文之间搭建了一座桥梁,使得模型能够捕获更长距离的依赖关系:

数学上,假设两个相邻的 segment 分别为,

▌Transformer-XL

将循环机制和相对位置编码结合起来,也就得到了完整的 Transformer-XL 模型。最终表达式为,

▌成绩

Transformer-XL 承袭了 vanilla Transformer 适用于字符级 (character-level) 任务的特性,并能够连续生成包含数千个字符的文本 (尚且不知同等参数量下,生成效果和后来大名鼎鼎的 OpenAI GPT-2 相比如何)。

论文作者将 Transformer-XL 广泛应用在词汇级和字符级的数据集上,包括 WikiText-103,enwik8,text8,One Billion Word,以及 Penn Treebank。前三个数据集重在检测长距离依赖关系的捕捉能力,Transformer-XL 不负所望,所有表现皆优于当下 SOTA 模型;

第四个数据集 One Billion Word 由于句子被打乱,考验的是短距离依赖关系的捕捉能力,Transformer-XL 依旧刷新了最佳成绩;第五个数据集体量仅有100万,不足前四者的百分之一,考验的是小数据集训练后的泛化能力,Transformer-XL 表现仍然亮眼。模型设置方面,注意力长度 O(N×L) O(N\times L)O(N×L) 训练时从 384 起底,最高 784,而预测时 Large 模型更是达到了原来不可想象的 3,800 的高度;Encoder 和 Decoder 层数从 12 层到 24 层不定。

▌RECL

abbr. Relative Effective Context Length。在论文的结尾,作者提出了将 RECL 作为判断模型有效文本利用长度的基准,换句话说,衡量模型对长距离关系的捕获能力。原理在于找出 r rr 百分比个最难预测的 token,求得能极小化损失函数的注意力长度。设定 r=0.1 r=0.1r=0.1,Transformer-XL 最终的成绩为 900,这便是前文中 80% 和 450% 数字的由来:

而在预测速度上,1,800+ 的数字来自于:

既能捕获长距离依赖关系,也能充分利用短距离依赖关系,Transformer-XL 名副其实地成为第一个同时在字符级和词汇级任务上超越循环神经网络的自注意力模型,并在为构建集成网络,刷新问答、分类、推理等 NLP 领域的成绩做着全面的准备。

三、XLNet: Generalized Autoregressive Pretraining for Language Understanding

论文链接:https://arxiv.org/abs/1906.08237

代码链接:https://github.com/zihangdai/xlnet

6 月 19 日,带着 Transformer-XL 的优良特性,XLNet 终于问世。自一月份 Transformer-XL 的论文发布以来,已过去五个月。期间,擅长暴力美学,堆砌训练材料和参数体量的 GPT-2 (16 Feb. 2019) 因续写文章表现出色,难以辨识真假,引发一阵道德舆论风暴。

但在模型设计本质上,GPT-2 相对于 GPT 并未获得具有价值的创新,因而论文中鲜有涉及 GPT-2 的讨论。相对地,无论是最终的模型表现,还是部分细节的设计初衷,XLNet 都和 BERT 紧密相关。因此读懂这篇论文,需要对 BERT 的原理有基本的了解。如果你对 BERT 不甚熟悉,没关系,笔者将带着你一起回顾。

▌BERT

如果说 BERT 的出现代表基于 Transformer 的自注意力派系彻底战胜基于 RNN 的自回归系,那么 XLNet 则是出自自注意力派系门下,融合两家武学之长的集大成者。BERT 出自论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (11 Oct. 2018),论文链接。以下是 BERT 的结构:

由图我们看出,BERT 由双层双向 Transformer 构建而成,训练分为两个步骤:预训练 (pre-training) 和 微调 (find-tuning)。预训练是为了在输入的词向量中融入上下文特征,微调则是为了使 BERT 能适应不同的下游任务,包括分类、问答、序列标注等,两者是独立进行的。

由此我们可以看出,BERT 是一个普适性非常强的模型,而不像过去几年中很多为特定任务设计的模型 (feature-based task-specific models) 那样,只能应用于单一场景 ,这为 BERT 刷新 11 项记录奠定了基础。预训练时,BERT 采用的策略与标准 Transformer 不同的地方在于,后者是基于预测 next token,只在输入句子的结尾进行预测;而前者预测的是句子本身,只是输入时 15% 的 token 被随机遮盖 (mask) 掉了,这便是 BERT 独特的 Mask 机制,也是众多 data corruption 方式中的一种。而 BERT 在标准 Transformer 的位置编码基础上,还添加了一项 segment 编码,如下图:

这是 BERT 预训练时最标准的输入形式。每个训练步长,BERT 输入句子 A,然后以 50% 的概率选择下一个连续的句子作为 B,另外 50% 的概率是从语料中随机抽取不连续的 B 取而代之。这便是 BERT 论文中所提到的 Next Sentence Prediction。因此模型训练时的输出除了完整的句子本身外,还有一个是或否的标签,判断两个句子是否连续。

这样设计的初衷在于增强 BERT 的上下文推理能力。以上是预训练,在微调时,只需要改变模型的输入和输出即可。关于 BERT 的简短介绍就进行到这里。最终,BERT 在以下十一个任务上取得了 SOTA 成绩:

  • 分类及推理:GLUE (MNLI, QQP, QNLI, STS-B, MRPC, RTE, SST-2, CoLA), SWAG
  • 序列标注:CoNLL-2003 NER
  • 问答:SQuAD

由于 BERT 不是本文的重点,更多细节请读者自行参读论文,或参考网络博客 (出于 BERT 的知名度,网上的解读非常详尽)。以下将会经常提到关于 BERT 的以上内容。

▌有序因子排列

BERT 与 XLNet 的首要不同在于,BERT 底层应用的是 Mask 机制下的 标准 Transformer 架构,而 XLNet 应用的是在此基础上融入了自回归特性的 Transformer-XL。前者无论是在训练还是预测,每次输入的文本都相互独立,上一个时间步长的输出不作为下一个时间步长的输入;而传统的循环神经网络正好相反。

论文将满足前者特性的模型归类于 自编码 (autoencoding, AE) 语言模型,而把 RNN 系归类于自回归 (autoregressive, AR) 语言模型。以 BERT 为首的自编码模型虽可以学得上下文信息,但在 data corruption 设计上存在两个天然缺陷:

1)忽视了训练时被 Mask 掉的 token 之间的相关关系;

2)这些 token 未能出现在训练集中,进一步导致预训练的模型参数在微调时产生差异。而自回归模型虽不存在以上缺陷,但只能基于单向建模。双向设计 (如 GPT 的双层 LSTM) 将产生两套无法共享的参数,本质上仍为单向模型,利用上下文语境的能力有限。

不同的排列方式,使模型的训练充分融合上下文特征,同时不会造成 Mask 机制下的有效信息缺失,从而使模型充分利用自编码和自回归的优势,而避免了两者的不足。这样独特的思路并不是创造 XLNet 的学者们拍拍脑袋想出来的,而是借鉴了发表于 2016 年的一篇论文中的思想,只不过后者对元素的排列并没有如同 XLNet 进行有序的规划,而是全程无序的,论文指出这样的思路会使序列退化为词袋,从而丢失关键信息,因而做出调整。

▌双流自注意力

双流自注意力 (Two-Stream Self-Attention) 为配合有序因子排序而生,是相对于 Transformer-XL 的单流自注意力而言的。由于论文没有对 Transformer-XL 展开详细的介绍,因此不熟悉 Transformer-XL 的读者读到这里会觉得晦涩难懂 (笔者在阅读本论文前看了几篇知名博主发布的关于 XLNet 的解读,都没能将它解释清楚)。鉴于此,笔者会在后面详细解释相关要点,我们先依旧按照论文的逻辑展开。第一步,先尝试将有序因子排列应用在 Transformer-XL 上。似然函数表达式:

当读者看到上述公式中 Query Stream 的 Key 和 Value 用的是来自 Content Stream 的隐藏状态时,应当非常熟悉,这正是 2017 年发布的第一代 Transformer 的设计:将固定长度的语料作为 Inputs 导入 Encoder,而将语料整体向右移动一个字符作为预测对象 Outputs 导入 Decoder;Inputs 经过一个自注意力层和一个前馈层后,从输出结果中分离 Key 和 Value 给 Decoder;Decoder 经过一个 Mask 自注意力层后保留 Query,接收来自于 Encoder 的 Key 和 Value 进行进一步运算。

对以上过程不熟悉的读者可参读本文第一节。而在第二节中我们提到过,Transformer-XL 由 vanilla Transformer 演变而来,使用的是标准 Transformer 架构。这个架构本身的特点在于 Query 和 Key 你我不分家,两者通过不同的参数从一个矩阵线性 (隐藏状态) 变换而来;继续往下追溯,两者取自同一块语料;属于单流自注意力设计。因此双流自注意力实际上是 XLNet 为了配合有序因子排列,而将 Transformer-XL 的结构还原回初代 Transformer 的架构。Query Stream 中剔除

等同于初版 Transformer 中 Decoder 对 Query 的 Mask 操作。

回到论文内容。这时的模型已经可以投入使用,但经过试验发现,有序因子排序增加了数倍的计算量使得模型的收敛速度过于缓慢,为此 XLNet 引入一项超参数 K KK,只对排列尾部的 1/K 1/K1/K 个元素进行预测,最大化似然函数。如此以来效率大大提高,而同时不用牺牲模型精度。这个操作称为 partial prediction,同 BERT 只预测 15% 的 token 类似。

▌XLNet

关于模型的设计还有以下要点:

  • Transformer-XL:关于 Transformer-XL 中的循环机制 (recurrence mechanism) 以及相对位置编码 (relative position encoding),应用到 XLNet 中并没有发生改变。XLNet 会为每一种排列记录隐藏状态记忆序列,而相对位置编码在不同排列方式间保持一致,不随排列方式的变化而变化。以一句话作为总结,我们可以将 XLNet 看成是不同排列下多个 Transformer-XL 的并行。
  • 训练过程:与 BERT 同样分为预训练和微调。预测时只需要关闭 Query Stream,将 Transformer-XL 再度还原回单流注意力的标准形态即可。
  • 问答任务:应用于提供一个问题和一段文本的问答任务时,仿照 BERT,从语料中随机挑选两个样本 segment 组成一个完整的 segment 进行正常训练。只有当两者来自于同一个上下文范围时使用循环机制。而对于相对位置编码,使用可训练参数替换原来的正弦曲线。经过切除测试 (ablation study),BERT 中的 next sentence prediction 并未对模型效果有显著提高,因此不使用。

到这里,XLNet 的介绍也就基本结束了。

▌成绩

集百家之长,避百家之短的 XLNet 融汇了过去几年里几乎所有相关模型的先进思想,成为超越 BERT 的又一个大一统的集成模型,并在 20 项任务上全面超越前者。其中,18 项任务创造了 SOTA 记录:

  • 分类:GLUE (MNLI, QNLI, STS-B, MRPC, RTE, SST-2, WNLI), RACE, IMDB, Yelp-2, Yelp-5, DBpedia, AG, Amazon-2, Amazon-
  • 文档排序:NDCG@20, ERR@20
  • 问答:SQuAD

XLNet 同时克服了自编码模型和自回归模型的缺陷,并出于 Transformer-XL 优秀的长距离依赖关系捕捉能力,对 BERT 的表现形成碾压趋势。其中最大体量的 XLNet-Large 参照 BERT-Large 的配置,包含 3.4 亿参数,16 个注意力头,24 个 Transformer 层,1024 个隐藏单元。论文指出即使是这样的配置,在训练过后依然呈现欠拟合的态势,而 15 亿参数量 GPT-2 的诞生无疑也预示着,将来 NLP 前沿模型将会持续保持大体量和大规模。

这对各项任务的数据提出了更高的要求。更有专业人士研究表明,XLNet 的训练成本高达 6 万美元,接近 BERT 的 5 倍 和 GPT-2 的 1.5 倍。我们期待未来的 NLP 前沿模型能适用于更多的 NLP 任务以及更小的数据集。

后续

XLNet 的官方 Github 地址 提供了使用预训练模型参数,以及应用于单场景下游任务 (回归/分类/SQuAD) 的微调 (fine-tuning) 教程。目前只发布了包含了 24 层自注意力,1024 个隐藏单元和 16 个注意力头的 XLNet-Large (TensorFlow 1.13.1, Python 2),将于近期发布 XLNet-Base,请读者自行关注官方网址以跟进动态。

作者介绍:

李格映,数据科学专业研究生,来自于中国香港中文大学(深圳)高等金融研究院,目前就职于华为 (实习)。在自然语言处理的命名实体识别、问答系统领域具备一定研究经验。

原文链接:

https://blog.csdn.net/weixin_43269174/article/details/94323036

(*本文为 AI科技大本营转载文章,转载请联系原作者

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
关于 Elasticsearch 段合并,这一篇说透了!
0、事出有因 您好,目前我需要将只读索引segment合并,有几个问题想要求教 1、 segment是不是合并到一个最好,及max_num_segments=1 2、合并的时候,通过 POST
铭毅天下
2020/10/26
7.4K0
关于 Elasticsearch 段合并,这一篇说透了!
【干货】Elasticsearch索引性能优化 (2)
本文翻译自QBox官方博客的“Elasticsearch索引性能优化”系列文章中的第二篇,版权归原作者所有。该系列文章共有三篇,其中第一篇已有同行翻译,参考链接 http://www.zcfy.cc/article/how-to-maximize-elasticsearch-indexing-performance-part-1-3624.html;后续还会有第三篇的推送,敬请关注。
杨振涛
2019/03/19
1.1K0
【干货】Elasticsearch索引性能优化 (2)
源码剖析:Elasticsearch 段合并调度及优化手段
经常看到集群的merge限流耗时比较高,所以想分析其原因、造成的影响、以及反思merge的一些优化手段。
铭毅天下
2023/09/09
1K0
源码剖析:Elasticsearch 段合并调度及优化手段
【ES三周年】Easticsearch OOM(内存溢出)的优化过程
首先,说明笔者的机器环境(不结合环境谈解决方案都是耍流氓): cpu 32核,内存128G,非固态硬盘: RAID0 (4T * 6),单节点,数据量在700G到1800G,索引15亿~21亿。敖丙大人,在蘑菇街,可多集群分片,固态硬盘,比不起啊。
NaughtyCat
2020/10/09
4.6K0
【ES三周年】Easticsearch OOM(内存溢出)的优化过程
Elasticsearch 段优化工具使用指南
本文描述问题及解决方法同样适用于 腾讯云 Elasticsearch Service(ES)。
岳涛
2023/08/23
6070
Elasticsearch 段优化工具使用指南
Elasticsearch merge 你懂了吗?
由于自动refresh过程每秒钟都会创建一个新的segment,不需要很长时间,segment的数量就会爆炸性增长。拥有太多的segment会严重影响ES的性能及查询效率。每个segment都会消耗文件句柄、内存和CPU等。更重要的是,每个搜索请求都必须依次检查每个段;segment越多,搜索速度就越慢。因此,如何制定合理的merge 策略以及如何自动的进行force merge是每个ES运维人员都必须学会的关键技能。
雨夜v1
2021/07/14
7K3
Elasticsearch merge 你懂了吗?
ES数据写入调优
大多数操作系统都尽可能多地为文件系统缓存使用内存,并切换出未使用的应用程序内存。这可能导致部分JVM堆被交换到磁盘上。
ruochen
2021/11/24
9020
Elasticsearch Index模块
index.number_of_shards :一个索引应该有的主分片(primary shards)数。默认是5。而且,只能在索引创建的时候设置。(注意,每个索引的主分片数不能超过1024。当然,这个设置也是可以改的,通过在集群的每个节点机器上设置系统属性来更改,例如:export ES_JAVA_OPTS="-Des.index.max_number_of_shards=128")
java架构师
2019/03/04
1K0
Elasticsearch Index模块
万文Elasticsearch巧妙的架构详解
本书作为 Elastic Stack 指南,关注于 Elasticsearch 在日志和数据分析场景的应用,并不打算对底层的 Lucene 原理或者 Java 编程做详细的介绍,但是 Elasticsearch 层面上的一些架构设计,对我们做性能调优,故障处理,具有非常重要的影响。
大数据老哥
2022/02/17
8270
万文Elasticsearch巧妙的架构详解
Elasticsearch性能优化实战指南
在当今世界,各行各业每天都有海量数据产生,为了从这些海量数据中获取想要的分析结果,需要对数据进行提取、转换,存储,维护,管理和分析。 这已然远远超出了普通处理工具、数据库等的实现能力,只有基于的分布式架构和并行处理机制的大数据工具所才能实现这些功能。Elasticsearch是响应如前所述大多数用例的最热门的开源数据存储引擎之一。
程序员追风
2019/08/02
9490
Elasticsearch性能优化实战指南
同事:膨胀了?Elasticsearch快就不需要调优了吗?
众所周知,ES 中 filter 是不参与相关性评分的,所以查询子句可以被系统进行缓存,性能要高于普通的 query 查询。bool 查询中支持 4 种子句,分别是 filter、must、must_not、should,其中 filter 和 must_not 属于过滤器,过滤器查询先于其它查询执行。另外在 function_score、constant_score 中也可以使用 filter 子句进行查询缓存。
开发者技术前线
2020/11/24
5330
Elasticsearch性能优化实战指南
在当今世界,各行各业每天都有海量数据产生,为了从这些海量数据中获取想要的分析结果,需要对数据进行提取、转换,存储,维护,管理和分析。 这已然远远超出了普通处理工具、数据库等的实现能力,只有基于的分布式架构和并行处理机制的大数据工具所才能实现这些功能。 Elasticsearch是响应如前所述大多数用例的最热门的开源数据存储引擎之一。
铭毅天下
2019/07/31
1.8K0
ElasticSearch - 海量数据索引拆分的一些思考
一开始从索引参数调整, forcemerge 任务引入等多个手段来缓解问题,但是伴随数据的快速膨胀还是遇到类似高命中查询等难以优化的问题,从而引出了索引拆分方案的探索与实施。
小小工匠
2023/08/27
7400
ElasticSearch - 海量数据索引拆分的一些思考
Elasticsearch日常运维
设置分配的最⼤失败重试次数,默认是5次,当然系统分配到达重试次数后,可以⼿动分配分⽚。"index.allocation.max_retries" : "5",
周银辉
2024/08/29
2550
Elasticsearch:Elasticsearch 中的 refresh 和 flush 操作指南
在今天的文章里,我们来主要介绍一下 Elasticsearch 的 refresh 及 flush 两种操作的区别。如果我们从字面的意思上讲,好像都是刷新的意思。但是在 Elasticsearch 中,这两种操作是有非常大的区别的。本指南将有效解决两者之间的差异。 我们还将介绍 Lucene 功能的基础知识,例如重新打开(reopen) 和提交 (commit),这有助于理解 refresh 和 flush 操作。
腾讯云大数据
2020/09/15
4.5K0
Elasticsearch:Elasticsearch 中的 refresh 和 flush 操作指南
elasticsearch数据更新与删除机制
当客户端发起更新操作时,elasticsearch首先会根据更新条件(例如:update api传入的_id,或update_by_query传入的match语句)找到相应的文档。elasticsearch使用文档的唯一标识符(_id)来定位文档。当找到要更新的文档后,elasticsearch首先会将原有的旧文档标记为删除状态。然后再将会将新文档插入到索引中。新文档具有相同的唯一标识符(_id),以此来实现文档的更新操作。
空洞的盒子
2023/11/04
4.2K3
Elasticsearch 写入优化,从 3000 到 8000/s,让你的 ES 飞起来!
点击关注公众号,Java干货及时送达 背景 基于elasticsearch-5.6.0 机器配置:3个云ecs节点,16G,4核,机械硬盘 优化前,写入速度平均3000条/s,一遇到压测,写入速度骤降,甚至es直接频率gc、oom等;优化后,写入速度平均8000条/s,遇到压测,能在压测结束后30分钟内消化完数据,各项指标回归正常。 生产配置 这里我先把自己优化的结果贴出来,后面有参数的详解: elasticsearch.yml中增加如下设置 indices.memory.index_buffer_si
Java技术栈
2022/05/12
1.6K0
Elasticsearch 写入优化,从 3000 到 8000/s,让你的 ES 飞起来!
触类旁通Elasticsearch:优化
ES提供的批量(bulk)API,可以用来一次索引多篇文档,从而大幅加快索引速度。如图1所示,可以使用http完成这个操作,并且将获得包含全部索引请求结果的答复。
用户1148526
2019/05/25
1.2K0
Elasticsearch 写入优化记录,从3000到8000/s
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/28
5580
干货满满丨万字超全 ElasticSearch 监控指南
导语:本文详细介绍了 ElasticSearch 如搜索性能指标、索引性能指标、内存使用和垃圾回收指标等六类监控关键指标、集群和索引两类大盘配置示例,以及 ES 在查询性能差、索引性能差的两种典型问题场景下详细的原因、排查方式和解决方案,同时也介绍了如何通过 Prometheus 监控搭建可靠的监控系统,详尽全面,推荐给大家,也欢迎各位一起交流。
腾讯云可观测平台
2024/03/15
2K0
干货满满丨万字超全 ElasticSearch 监控指南
相关推荐
关于 Elasticsearch 段合并,这一篇说透了!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档