Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

追一科技 AI Lab 研究员 Tony作者

拆解XLNet模型设计,回顾语言表征学习的思想演进

在预训练语言模型 BERT 对自然语言处理的冲击还未平息时,CMU 和 Google 的研究员又放出了一个猛料:在 20 多项任务上全线碾压 BERT 的 XLNet。:由于在公众号中插入方式不方便,对于一个符号 "a{b}^{c}","{b}" 代表下标,"{c}" 代表上标。

1. 语言表征学习

深度学习的基本单元是向量。我们将建模对象对应到各自的向量 x (或者一组向量 x{1}, x{2}, ..., x{n}),然后通过变换、整合得到新的向量 h,再基于向量 h 得到输出的判断 y。这里的 h 就是我们说的表征 (Representation),它是一个向量,描述了我们的建模对象。而语言表征学习就是解决怎么样将一个词、一句话、一篇文章通过变换 (Transformation)整合 (Aggregation) 转化成对应的向量 h 的问题。

深度学习解决这个问题的办法是人工设计一个带有可调参数的模型,通过指定一系列的 (输入→输出) 对 (x → y),让模型学习得到最优的参数。当参数确定之后,模型除了可以完成从 x 预测 y 的任务之外,其中间把 x 变换成 h 的方法也是可以用到其他任务的。这也是我们为什么要做表征学习

所以我们要解决的问题便是:

  • 怎么确定 (输入→输出) 对,即模型的预测任务

  • 这个模型怎么设计

2. 分布式语义假设

任何任务都可以用来做表征学习:情感分析 (输入句子,判断句子是正向情感还是负向情感),机器翻译 (输入中文,输出英文)。但是这些任务的缺点是需要大量的人工标注,这些标注耗时耗力。当标注量不够时,模型很容易学出"三长一短选最短"的取巧方案 -- 但我们想要的是真正的语言理解。

所幸语言学的研究中有一个重要的假设 -- 分布式语义假设 (Distributional Hypothesis):

One shall know a word by the company it keeps.[1]

我们可以通过一个词出现的语境知道这个词的意思。

所以我们可以将输入 x 定为目标词的语境,输出 y 定为目标词。这个任务的优点是我们并不需要人工标注的数据,只需要许多有意义的语段就可以了 -- 而在信息爆炸的互联网时代,这种数据是取之不尽的。

如何更精细地建模语境,得到其对应的表征向量 h?对这个问题的解答贯穿了语言表征学习的发展历程。我们希望能够做到:

  1. 语境要包含所有区分目标词的信息。只有这样才不会有歧义的出现,比如给定语境 ["我" "今天" "很"],目标词 (下一个词) 既可以是 "开心",也可以是"伤心",所以模型学不到 "开心" 和 "伤心" 的区别。语境要足够大,如对于一篇文章中的一个目标词,理想的语境是文章中除了目标词的所有词。

  2. 建模语境中词的相互依赖关系。除了词本身的性质外 (这决定了词的依赖关系,比如形容词可以修饰名词短语,猫一般不会用巍峨来修饰),在大部分语言 (如中文,英文) 中,词的相对位置也决定了词间的依赖关系。

下文开始我们会围绕这个句子展开讨论:

["我1", "今天2", "很3", “开心4”, “<逗号>5”, “因为6”, “我7”, “中8”, “了9”, “彩票10”]

数字代表词在句子中的位置编号。「我 1」和「我 7」虽然是同一个词,但因为出现在句子的不同位置,所以他们表达的意思可能不同。假设我们的目标词是「开心 4」,语境中便不应该含有「开心 4」,因为这会造成标签泄露 -- 我们在提出问题的同时也直白地给出了答案 -- 此时模型很难学出有用的语言知识。所以理想的语境建模应基于["我1", "今天2", "很3", “<逗号>5”, “因为6”, “我7”, “中8”, “了9”, “彩票10”] 以及位置 "4"。

3. 预训练词向量 (Word Embedding)

神经网络刚开始进入自然语言处理的时候,预训练词向量 (Word Embedding) 的方法如 Skip-gram, Glove 等是语言表征学习的主要手段。由于缺乏有效建模词的相互依赖的手段,我们使用目标词前后的窗口内的词作为目标词的语境词 (Context Word),每个词/语境词都有一个独立的向量作为其表征。

假如窗口长度是 2 的话,在上述例子中,我们可以得到的 (输入→输出) 对为 ("很" → "开心"),("<逗号>"→ "开心"),("今天" → "开心"),("因为" → "开心")。这里为了避免统计稀疏性,我们丢弃了词的位置信息。

这种语境建模方式非常粗糙。滑动窗口只是词间相互依赖的一种粗略估计。同时单个语境词不足以表达丰富的语境信息 -- 这是由语境中不同词相互依赖共同决定的。这使得该预测任务存在大量的歧义。最后由于缺乏对语境的细致建模,我们只能学到单个词的模糊的表征。

4. 循环神经网络

用一个向量代表一个词在预训练词向量流行之后已经变成标准做法,也是我们用上神经网络模型组件的基础。我们的句子可以表示成一个有顺序的向量序列:

[x{我}, x{今天}, x{很}, x{开心}, x{<逗号>}, x{因为}, x{我}, x{中}, x{了}, x{彩票}]

为了从这个向量序列计算出对应的表征向量 h,我们必须对这个向量序列进行变换 (Transformation) 和整合 (Aggregation)。循环神经网络 (Recurrent Neural Network, RNN) 通过一个递归算子实现了这个目的:

我们按照一个顺序 (从左到右) 对上述向量序列编号: 

[x{1}, x{2}, x{3}, x{4}, x{5}, x{6}, x{7}, x{8}, x{9}, x{10}]

按照编号的顺序,在第 t 位时,循环神经网络会根据第 t-1 位的表征 h{t-1} 及当前的输入 x{t} 算出当前位置的表征 h{t} -- 这便是序列 [x{1}, x{2}, ..., x{t}] 对应的表征。可以看到输入向量的相对位置决定了循环神经网络整合信息的计算顺序,或者说相对位置决定了计算图 (Computation Graph) 的构建。

5. 自回归语言模型 

在拥有循环神经网络这一序列建模利器之后,我们可以对语境进行更精细的建模。由于 RNN 的运算模式是按顺序依次处理每个词,所以语境可以是目标词前面的所有词。

对于例子 ["我 1", "今天 2", "很 3","开心 4","<逗号>5","因为 6","我 7","中 8","了 9",彩票 10"],如果编号顺序是从左到右的话,对应的输入-输出对为 (["我", "今天", "很"] → "开心");而从右到左则对应的是 (["彩票", "了", "中", "我", "因为", "<逗号>"] → "开心")。因为目标词总是语境的下一个词,所以我们并不需要输入目标词的位置信息。如前所述,词的相对位置决定了词的输入顺序,所以词的位置也不再需要输入了。

自回归语言模型的优点是计算效率比较高。我们只要对["我1", "今天2", "很3", “开心4”, “<逗号>5”, “因为6”, “我7”, “中8”, “了9”, “彩票10”] 这句话做一次表征计算,便可以得到许多输入输出对的语境表征:(["我"] → "今天"),(["我", "今天"]→ "很"),(["我", "今天", "很"] → "开心") 等等。

自回归语言模型也是自然语言生成的标准方案 -- 一个句子的生成可以转化成以前面的片段为语境,预测下一个词的任务。而新预测的词可以拼到已经生成的片段,作为预测下一个词所依据的语境。

由于可以对语境进行建模,预训练词表征便可以从语境无关的词向量变成基于语境的词表征 (Contextual Representation)。再结合增大数据量带来的巨大增益,这也使得 2018 年发表的 ELMo 成为自然语言处理领域第一个刷榜的大新闻。

但这种语境建模方式只使用了目标词左边 (右边) 单方向的所有词,所以预测任务仍然会存在歧义。语料中输入输出对 (["我", "今天", "很"] → "开心") 和 (["我", "今天", "很"] → "伤心") 都有可能出现,所以模型学不到 "开心" 和 "伤心" 的区别。

如何将目标词左右的语境 (双向语境) 同时引入建模便成为下一个需要解决的问题。一个简单的做法是分别学一个前向及后向的自回归语言模型,然后再将两个模型学出的表征合并。这便是 ELMo 里的标准做法。然而这种独立建模虽然拿到了两个方向的语境信息,但却学不出两个语境间细致的依赖关系。

6. Transformer

双向语境的建模困难主要源于循环神经网络单向、顺序的计算方式。除了限制依赖关系的方向之外,这种计算方式也限制了循环神经网络能建模的最大依赖距离。x{1} 和 x{300} 的间依赖关系需要通过重复计算 300 次 才能求得。而由于循环神经网络中存在矩阵乘法,在计算 x{300} 时 x{1} 的信息被相同的矩阵乘了 300 次。视矩阵 W{h} 的模不同,会导致信息的爆炸 (|W{h}|>1) 或者消失 (|W{h}|<1)。

我们既要取得双向依赖建模,又要让长距离的依赖中间间隔的计算操作尽可能的少。Transformer 的提出实现了这两个目的。细节如层归一化 (Layer Normalization),多注意力算子 (Multi-Head Attention) 可以参考原论文,这里主要介绍最核心的自注意力算子 (Self-Attention),及其基础 -- 注意力算子 (Attention)。

我们先介绍注意力算子 (Attention)。注意力算子的基本元素为查询向量 (Query Vector) q{i},地址向量 (Key Vector) k{j} 以及内容向量 (Value Vector) v{j}。其输出 h{i} 为所有内容向量的加权求和,每个权重由查询向量和地址向量算出的注意力权重 (Attention Score) 决定:

注意力算子达到的目的是基于查询向量对一组表征信息进行聚合。

回到建模依赖关系的问题上。既然每个词都可能对其他词产生依赖,那我们让每个词都用注意力算子从其他词那里聚合信息不就好了嘛!这便是自注意力 (Self-Attention) 的动机。

对于第 i 个词,我们可以根据其词向量 x{i} 算出其对应的查询向量、地址向量以及内容向量:

在进行表征聚合时,q 来自要求表征的词,k 和 v 来自所有词 (包括要求表征的词本身)。"自注意力 (Self-Attention)" 中之所以有 "自 (Self)",是因为查询、地址和内容的角色均来自同一个序列。

自注意力算子的引入解决了循环神经网络的两个问题:第 i 个词表征 h{i} 的构建可以同时基于双向的语境;词间不管依赖距离多长,都只间隔了一次运算操作。

但是自注意力算子会引入新的问题 -- 词的相对位置的信息被丢弃了。回到我们的例句["我1", "今天2", "很3", “开心4”, “<逗号>5”, “因为6”, “我7”, “中8”, “了9”, “彩票10”],丢弃词的相对位置意味着在自注意力算子眼里,"我 1" 和「我 7」表达的意思是一样的。解决这个问题的方法是将位置作为词表征的一部分一并输入模型。Transformer 采用的是简单粗暴的加法:"我 1" 和「我 7」的表征分别为

其中 p1 和 p7 是位置 1 和 7 对应的位置编码 (Position Embedding)。这和循环神经网络截然不同:在循环神经网络里,相对位置决定了计算的顺序,而在 Transformer 里则是决定了词的表征。在后文会提到,将位置纳入词表征的做法在 XLNet 中被巧妙地利用了。

Transformer 在每个词基于语境的表征时会同时用上前后语境,但是自回归语言模型却限制了语境的方向。鉴于自回归语言模型自然语言生成中的普遍应用,为了使用灵活的 Transformer 进行建模,我们需要对 Transformer 进行相应的修改。解决方案是对计算出的注意力权重进行屏蔽 -- 我们强行将不想要的注意力权重置为 0,这样计算表征的时候就不会用到目标词及其右边的词了 -- 这些词的注意力权重为 0。这称之为注意力掩码 (Attention Mask)。这一点也是构建 XLNet 训练目标所必须的技巧。再加上对下游任务的适配以及大量的数据,GPT 和 GPT-2 也搞了一波大新闻。

上述构造技巧再加上多注意力算子 (Multi-Head Attention) 以及标准深度学习组件的组合 (Dropout, Position-Wise FeedForwrd Layer, Layer Normalization),Transformer 给自然语言处理的建模方式带来了变革性的贡献,无愧其名 "Transformer"(改革者)。

7. 去噪自编码模型/掩码语言模型 

加入 Transformer 后,我们的军火库多了建模双向语境的武器。但是如前所述,自注意力算子构建的是第 i 个词基于语境的表征,使用这个表征来预测第 i 个词会带来标签泄露。这就好比在给你出题的时候顺便直白地告诉了你答案。

我们既想用上 Transformer 的建模能力,又想从第 i 个词的表征中剔除这个词的信息。以 BERT 为代表的去噪自编码模型 (Denoising Auto-Encoder)/掩码语言模型 (Masked Language Modeling) 的做法是将这些词替换成特殊字符 "MASK"。"MASK" 对应的表征即为原来词的语境表征,既获得了双向语境的信息,又避免了标签泄露,可以用来预测原来的词。为了复用计算出的表征,BERT 会随机选取多个词替换成 "MASK",然后在对应的位置分别预测原来的词。由于这些词都被替换成相同的字符 "MASK",他们对应的语境表征计算的区别主要来自于其位置编码。

对于本文开头的例子,我们构建的 (输入→输出) 对为 (["我1", "今天2", "很3", “MASK4”,“<逗号>5”,“因为6”,“我7”,“中8”,“了9”,“彩票10”]→ 开心)。

虽然结合 Transformer 和去噪自编码模型的 BERT 可以说是拿到了语境建模的"双向圣杯",其设计的次句判断任务 (Next sentence prediction) 也对下游任务有重要帮助。但是人无完人,BERT 无完 BERT。BERT 中 "MASK" 字符的加入,使得非目标词表征的建模都会依赖于人造的 "MASK" 字符,这会使模型学出虚假的依赖关系 (比如 "MASK" 可以作为不同词信息交换的桥梁) -- 但 "MASK" 在下游任务中并不会出现。这便是 XLNet 中提到的预训练-微调差异 (Pretrain-Finetune Discrepancy)。同时除了位置编码 p 的区别外,同一句话内所有目标词依赖的语境信息完全相同,这除了忽略被替换的词间的依赖关系外,随着网络层数的加深,作为输入的位置编码 p 的信息也可能被过多的计算操作抹去 (类似于上述循环神经网络难以建模长程依赖的原因)。

8. XLNet 的核心贡献: 乱序语言模型

如上所述,BERT 虽然充分地建模了双向语境信息,但是其用来预测不同目标词的语境信息只有目标位置编码的区别,同时也建模不了被替换成 "MASK" 的词间的依赖关系。自回归语言模型虽然只能建模单向的语境,但是其计算效率比较高,且预测每个词所用的语境都是不一样的。怎么把这两者的长处结合呢?

回顾我们对自回归语言模型的介绍。对于一句话["我1", "今天2", "很3", “开心4”, “<逗号>5”, “因为6”, “我7”, “中8”, “了9”, “彩票10”],我们得到的输入输出样本为(["我"] → "今天"),(["我", "今天"]→ "很"),(["我", "今天", "很"] → "开心")...等等。这些样本中的语境毫无例外都是单向且有序的。

对样本语境的选取是否可以更灵活一些?在上述对分布式语义假设的介绍中我们提到,语境中的词之间的相互依赖关系,一是取决于词本身的性质,二是取决于语境中词的相对位置。所以有了词以及词在语境中的位置,我们就有了从这个词构建依赖关系的全部信息。所以对于同一句话 ["我 1", "今天 2", "很 3",「开心 4」,「<逗号>5」,「因为 6」,「我 7」,「中 8」,「了 9」,「彩票 10」],我们可以使用更灵活的样本选取办法,得到(["我1"] → “开心4”),([“我1”, “开心4”] → ”今天2“),([”我1“, ”今天2“, “开心4”] → “很3”)...等等。这便是乱序语言模型 (Permutation Language Modeling) 的思想。和自回归语言模型不一样,新的样本中的语境需要输入词的位置,否则就退化成了词带模型 (Bag of Words)。这可以类比到人的阅读方式:字词在书本上的位置是一定的,但从左到右的阅读顺序并不是强制的,我们还可以跳读。

从概率模型的角度考虑,上述对样本的采样方式的不同对应了对句子概率 P("我1", "今天2", "很3", “开心4”, “<逗号>5”, “因为6”, “我7”, “中8”, “了9”, “彩票10”) 的不同分解。

对于自回归语言模型,其分解方式为P("我 1")P("今天 2" |"我 1")P("很 3"|"我 1", "今天 2")P("开心 4"|"我 1", "今天 2", "很 3")...

对于乱序语言模型,其分解方式可以为P("我 1")P("开心 4"|"我 1")P("今天 2"|"我 1","开心 4")P("很 3"|"我 1","今天 2","开心 4")...

每一种分解方式由一个随机排列 z 确定,如上述分解方式对应 z = [z{1} ,z{2} , z{4} , z{3} , ...] → ["我 1"→"今天 2"→"开心 4"→"很 3"→ ...]

其中 z{t} 代表随机排列的第 t 个词。乱序语言模型是自回归语言模型的一种推广,因为 z 可以是原来序列的顺序。

乱序语言模型的语境可以同时来自目标词的前向和后向,所以其建模了双向的依赖。每个被预测的词 (除最后一个词外) 都会加入到语境中,所以既解决了 BERT 忽略被替换的词间的依赖关系的问题,又解决了 BERT 不同目标词依赖的语境趋同的问题。相比于 BERT 一次性输入几乎所有的语境信息,乱序语言模型可以认为是对双向语境进行了采样 (或者 Embedding Dropout),这会产生类似于 Dropout 效果,可以让模型学出更鲁棒的语境依赖。

但需要注意的是,当构成语境的词比较少时,根据语境预测目标词的歧义性就会增大,训练难度也会增大。这也是为什么 XLNet 只采样了一小部分词去预测的原因。

讲了这么多好处,那如何用 Transformer 实现乱序语言模型呢?

9. 乱序语言模型的实现:自注意力通道

Transformer 中每个词的表征由其词向量和位置编码共同决定 -- 我们既拿到了词本身的性质,又有词的位置信息。所以 Transformer 天然就和乱序语言模型相契合。

假设整句话为 ["我 1", "今天 2", "很 3",「开心 4」],我们只采样出一个样本 (["今天 2", "很 3", "开心 4"] → "我 1" ),XLNet 的做法和 BERT 有同有异。

和 BERT 一样,XLNet 同样是将目标词 "我 1" 替换成一个特殊字符 "MASK1"。和 BERT 不同,"MASK" 不会纳入表征的地址向量 k 以及内容向量 v 的计算,"MASK" 自始至终只充当了查询向量 q 的角色,因此所有词的表征中都不会拿到 "MASK" 的信息。这也杜绝了 "MASK" 的引入带来的预训练-微调差异 (Pretrain-Finetune Discrepancy) -- 这个改动也可以直接应用到 BERT 上面。

在下图中记 "MASK" 对应的词向量为 G,X2 - X4 为各自的词向量,G1, H1 - H4 为各自的表征。图中省略了位置编码 p。

上面只是讨论最简单的情况 -- 即一句话只产生一个样本。但我们还希望保证训练效率 -- 我们想和自回归语言模型一样,只进行一次整句的表征计算便可以获得所有样本的语境表征。这时所有词的表征就必须同时计算,此时便有标签泄露带来的矛盾:对于某个需要预测的目标词,我们既需要得到包含它信息以及位置的表征 h (用来进一步计算其他词的表征),又需要得到不包含它信息,只包含它位置的表征 g (用来做语境的表征)。

一个很自然的想法就是同时计算两套表征,这便是 XLNet 提出的双通道自注意力 (Two Stream Self-Attention),同时计算内容表征通道 (Content Stream) h 和语境表征通道 (Query Stream) g。注意这里采用的是意译而不是直译,请读者谅解。

假设我们要计算第 1 个词在第 l 层的语境表征 g{1}^{l} 和内容表征 h{1}^{l},我们只关注注意力算子查询向量 Q、地址向量 K 以及内容向量 V 的来源:

计算 g{1}^l 时用到了 h{j!=1}^{l-1},表示第 l-1 层除了第 1 个词外所有词的表征,这是为了保证标签不泄露;计算 h{1}^{l} 时用到了 h{:}^{l-1},表示第 l-1 层所有词的表征,这和标准的 Transformer 计算表征的过程一致。

但上述做法在堆叠多层自注意算子时仍然会带来标签泄露。

虽然计算 g{1}^{l} 时我们已经采取措施防止 h{1}^{l-1} 的信息泄露到 g{1}^{l} 中,但是考虑两层自注意力算子的计算:

我们看到第 l-2 层第 1 个词的表征 h{1}^{l-2} 会通过第 l-1 层的所有表征 h{j}^{l-1} 泄露给 g{1}^{l}。

和将 Transformer 应用到自回归语言模型的情况类似,我们还需要对每层的注意力使用注意力掩码 (Attention Mask),根据选定的分解排列 z,将不合理的注意力权重置零。我们记 z{t} 为分解排列中的第 t 个词,那我们在词 z{t} 的表征时,g{t}^{l} 和 h{t}^{l} 分别只能看到排列中前 t-1 个词 z{1:t-1} 和前 t 个词 z{1:t},即

在如此做完注意力掩码后,所有 g{z{t}}^l 便可以直接用来预测词 z{t},而不会有标签泄露的问题。

这里我们也可以看到,在具体实现效率的限制下,想要获得多样的语境并防止标签泄露,我们只能依据乱序语言模型的定义去使用注意力掩码。这也体现了 XLNet 设计的精巧性。

10. XLNet 的重要元素:Transformer-XL

上面已经提到,和循环神经网络不同,Transformer 是同时计算语段内所有词的表征的。受限于系统内存大小,Transformer 输入的序列长度会有一个上限。通常我们会将过长的序列切成固定长度为 N 的片段,再依次输入 Transformer 计算表征。所以 Transformer 的构造虽然降低了长程依赖的学习难度,但其最长只能建模长度为 N 的依赖。

为了在内存的限制下让 Transformer 学到更长的依赖,Transformer-XL 借鉴了 TBPTT(Truncated Back-Propagation Through Time) 的思路,将上一个片段 s{t-1} 计算出来的表征缓存在内存里,加入到当前片段 s{t} 的表征计算中。

如上图所示,由于计算第 l 层的表征时,使用的第 l-1 层的表征同时来自于片段 s{t} 和 s{t-1},所以每增加一层,模型建模的依赖关系长度就能增加 N。在上图中,Transformer-XL 建模的最长依赖关系为 3*2=6。

但这又会引入新的问题。Transformer 的位置编码 (Position eEmbedding) 是绝对位置编码 (Absolute Position Embedding),即每个片段内,各个位置都有其独立的一个位置编码向量。所以片段 s{t} 第一个词和片段 s{t-1} 第一个词共享同样的位置编码 -- 这会带来歧义。

Transformer-XL 引入了更加优雅的相对位置编码 (Relative Position Embedding)。

因为位置编码只在自注意力算子中起作用,我们将 Transformer 的自注意力权重的计算拆解成:

我们可以将其中的绝对位置编码 p{j} 的计算替换成相对位置编码 r{i-j},把 p{i} 替换成一个固定的向量 (认为位置 i 是相对位置的原点)。这样便得到相对位置编码下的注意力权重

Transformer-XL 的实际实现方式与上式有所不同,但思想是类似的。

相对位置编码解决了不同片段间位置编码的歧义性。通过这种拆解,我们可以进一步将相对位置编码从词的表征中抽离,只在计算注意力权重的时候加入。这可以解决 Transformer 随着层数加深,输入的位置编码信息被过多的计算抹去的问题。Transformer-XL 在 XLNet 中的应用使得 XLNet 可以建模更长的依赖关系。

11. XLNet 的模型改进增益

文章最后的消融分析很好地证明了乱序语言模型Transformer-XL 主干网络带来的提升。这部分实验采用和 BERT 一致的训练数据。以 BERT 为基础,将 BERT 的主干网络从 Transformer 换成 Transformer-XL 后,在需要建模较长上下文的阅读理解任务 RACE 和 SQuAD2.0 均有比较明显地提升 (对比 1&2 行)。而在此基础上加上乱序语言模型后,在所有任务上都有不同程度的提升 (对比 2&3 行)。 

12. 如何评价 XLNet

自词向量到如今以 XLNet 为代表的预训练语言模型,他们的主要区别在于对语境的不同粒度的建模:

XLNet 的成功来自于三点:

  1. 分布式语义假设的有效性,即我们确实可以从语料的统计规律中习得常识及语言的结构。

  2. 对语境更加精细的建模:从"单向"语境到"双向"语境,从"短程"依赖到"长程"依赖,XLNet 是目前对语境建模最精细的模型。

  3. 在模型容量足够大时,数据量的对数和性能提升在一定范围内接近正比 [3] [4]:XLNet 使用的预训练数据量可能是公开模型里面最大的。

可以预见的是资源丰富的大厂可以闭着眼睛继续顺着第三点往前走,或许还能造出些大新闻出来,这也是深度学习给的承诺。这些大新闻的存在也渐渐堵住调参式的工作的未来,迫使研究者去思考更加底层,更加深刻的问题。

对语境的更精细建模自然是继续发展的道路,以语言模型为代表的预训练任务和下游任务之间的关系也亟待探讨。

退后一步讲,分布式语义假设的局限性在哪里?根据符号关联假设 (Symbol Interdependency Hypothesis)[5],虽然语境的统计信息可以构建出符号之间的关系,从而确定其相对语义。但我们仍需要确定语言符号与现实世界的关系 (Language Grounding),让我们的 AI 系统知道,「红色」对应的是红色,「天空」对应的是天空,「国家」对应的是国家。这种对应信息是通过构建知识库,还是通过和视觉、语音系统的联合建模获得?解决这一问题可能是下一大新闻的来源,也能将我们往 AI 推进一大步。

基于分布式语义假设的预训练同时受制于报道偏差 (Reporting Bias)[6]:不存在语料里的表达可能是真知识,而存在语料里面的表达也可能是假知识,更不用提普遍存在的模型偏见 (Bias) 了。我们不能因为一百个人说了「世上存在独角兽」就认为其为真,也不能因为只有一个人说了「地球绕着太阳转」便把它当做无益的噪声丢弃掉。

为了达到足够大的模型容量,我们真的需要这么大的计算量吗?已经有工作证明训练充分的 Transformer 里面存在很多重复冗余的模块 [6]。除了把网络加深加宽外,我们还有什么办法去增大模型容量的同时,保持一定的计算量?

参考文献

[1] Firth, J. R. (1957). Papers in linguistics 1934–1951. London: Oxford University Press.

[2] Levy O, Goldberg Y. Neural word embedding as implicit matrix factorization[C]//Advances in neural information processing systems. 2014: 2177-2185.

[3] Mahajan D, Girshick R, Ramanathan V, et al. Exploring the limits of weakly supervised pretraining[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 181-196.

[4] Hestness J, Narang S, Ardalani N, et al. Deep learning scaling is predictable, empirically[J]. arXiv preprint arXiv:1712.00409, 2017.

[5] Louwerse M M. Knowing the meaning of a word by the linguistic and perceptual company it keeps[J]. Topics in cognitive science, 2018, 10(3): 573-589.

[6] Gordon J, Van Durme B. Reporting bias and knowledge acquisition[C]//Proceedings of the 2013 workshop on Automated knowledge base construction. ACM, 2013: 25-30.

[7] Michel P, Levy O, Neubig G. Are Sixteen Heads Really Better than One?[J]. arXiv preprint arXiv:1905.10650, 2019.

理论XLNet自然语言处理表征学习
8
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

Dropout技术

神经网络训练中防止过拟合的一种技术

自注意力技术

自注意力(Self-attention),有时也称为内部注意力,它是一种涉及单序列不同位置的注意力机制,并能计算序列的表征。自注意力在多种任务中都有非常成功的应用,例如阅读理解、摘要概括、文字蕴含和语句表征等。自注意力这种在序列内部执行 Attention 的方法可以视为搜索序列内部的隐藏关系,这种内部关系对于翻译以及序列任务的性能非常重要。

Skip-gram技术

CBOW和skip-gram是word2vec的核心概念。CBOW模型是用词的前后几个词来预测这个词,skip-gram的输入是当前词的词向量,而输出是周围词的词向量。

表征学习技术

在机器学习领域,表征学习(或特征学习)是一种将原始数据转换成为能够被机器学习有效开发的一种技术的集合。在特征学习算法出现之前,机器学习研究人员需要利用手动特征工程(manual feature learning)等技术从原始数据的领域知识(domain knowledge)建立特征,然后再部署相关的机器学习算法。虽然手动特征工程对于应用机器学习很有效,但它同时也是很困难、很昂贵、很耗时、并依赖于强大专业知识。特征学习弥补了这一点,它使得机器不仅能学习到数据的特征,并能利用这些特征来完成一个具体的任务。

知识库技术

知识库是用于知识管理的一种特殊的数据库,以便于有关领域知识的采集、整理以及提取。知识库中的知识源于领域专家,它是求解问题所需领域知识的集合,包括基本事实、规则和其它有关信息。

机器翻译技术

机器翻译(MT)是利用机器的力量「自动将一种自然语言(源语言)的文本翻译成另一种语言(目标语言)」。机器翻译方法通常可分成三大类:基于规则的机器翻译(RBMT)、统计机器翻译(SMT)和神经机器翻译(NMT)。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

层归一化技术

深度神经网络的训练是具有高度的计算复杂性的。减少训练的时间成本的一种方法是对神经元的输入进行规范化处理进而加快网络的收敛速度。层规范化是在训练时和测试时对数据同时进行处理,通过对输入同一层的数据进行汇总,计算平均值和方差,来对每一层的输入数据做规范化处理。层规范化是基于批规范化进行优化得到的。相比较而言,批规范化是对一个神经元输入的数据以mini-batch为单位来进行汇总,计算平均值和方法,再用这个数据对每个训练样例的输入进行规整。层规范化在面对RNN等问题的时候效果更加优越,也不会受到mini-batch选值的影响。

自然语言生成技术

自然语言生成(NLG)是自然语言处理的一部分,从知识库或逻辑形式等等机器表述系统去生成自然语言。这种形式表述当作心理表述的模型时,心理语言学家会选用语言产出这个术语。自然语言生成系统可以说是一种将资料转换成自然语言表述的翻译器。不过产生最终语言的方法不同于编译程式,因为自然语言多样的表达。NLG出现已久,但是商业NLG技术直到最近才变得普及。自然语言生成可以视为自然语言理解的反向: 自然语言理解系统须要厘清输入句的意涵,从而产生机器表述语言;自然语言生成系统须要决定如何把概念转化成语言。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

ELMo技术

ELMO 是“Embedding from Language Models”的简称, ELMO 本身是个根据当前上下文对 Word Embedding 动态调整的思路。ELMO 采用了典型的两阶段过程,第一个阶段是利用语言模型进行预训练;第二个阶段是在做下游任务时,从预训练网络中提取对应单词的网络各层的 Word Embedding 作为新特征补充到下游任务中。

Transformer-XL技术

Transformer-XL 预训练模型是对 Transformer 及语言建模的修正,这项前沿研究是2019年1月份公布。一般而言,Transformer-XL 学习到的长期依赖性比标准 Transformer 学到的长 450%,无论在长序列还是短序列中都得到了更好的结果,而且在评估时比标准 Transformer 快 1800 多倍。

GPT-2技术

GPT-2是OpenAI于2019年2月发布的基于 transformer 的大型语言模型,包含 15 亿参数、在一个 800 万网页数据集上训练而成。据介绍,该模型是对 GPT 模型的直接扩展,在超出 10 倍的数据量上进行训练,参数量也多出了 10 倍。在性能方面,该模型能够生产连贯的文本段落,在许多语言建模基准上取得了 SOTA 表现。而且该模型在没有任务特定训练的情况下,能够做到初步的阅读理解、机器翻译、问答和自动摘要。

语言学技术

每种人类语言都是知识和能力的复合体,语言的使用者能够相互交流,表达想法,假设,情感,欲望以及所有其他需要表达的事物。语言学是对这些知识体系各方面的研究:如何构建这样的知识体系,如何获取,如何在消息的制作和理解中使用它,它是如何随时间变化的?语言学家因此关注语言本质的一些特殊问题。比如: 所有人类语言都有哪些共同属性?语言如何不同,系统的差异程度如何,我们能否在差异中找到模式?孩子如何在短时间内获得如此完整的语言知识?语言随时间变化的方式有哪些,语言变化的局限性是什么?当我们产生和理解语言时,认知过程的本质是什么?语言学研究的就是这些最本质的问题。

推荐文章
暂无评论
暂无评论~