首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么 XLNet 能够在 20 多项任务中胜过 BERT?

Transformer是一种深度学习模型,它采用自注意力机制,对输入数据的每一部分的重要性进行差异加权。它主要用于自然语言处理(NLP) 和计算机视觉(CV) 领域。与循环神经网络(RNN) 一样,转换器旨在处理顺序输入数据,例如自然语言,并应用于翻译和文本摘要等任务。然而,与 RNN 不同的是,transformers 一次处理所有输入。注意机制为输入序列中的任何位置提供上下文。例如,如果输入数据是自然语言句子,则转换器不必一次处理一个词。与 RNN 相比,这允许更多的并行化,因此减少了训练时间。

Transformers 于 2017 年由Google Brain [1]的一个团队推出,并且越来越成为 NLP 问题的首选模型,取代了长短期记忆(LSTM) 等 RNN 模型。额外的训练并行化允许在更大的数据集上进行训练。这导致了预训练系统的发展,例如BERT(Bidirectional Encoder Representations from Transformers)和GPT(Generative Pre-trained Transformer),这些系统使用维基百科语料库和Common Crawl等大型语言数据集进行训练,并且可以很好地针对特定任务进行调整。

XLNet 模型由Zhilin Yang、Zihang Dai、Yiming Yang、Jaime Carbonell、Ruslan Salakhutdinov、Quoc V. Le在XLNet: Generalized Autoregressive Pretraining for Language Understanding中提出。XLnet 是使用自回归方法预训练的 Transformer-XL 模型的扩展,通过最大化输入序列分解顺序的所有排列的预期似然来学习双向上下文。

该论文的摘要如下:

凭借对双向上下文建模的能力,像 BERT 这样的基于去噪自动编码的预训练比基于自回归语言建模的预训练方法获得了更好的性能。然而,BERT 依赖于用掩码破坏输入,忽略了掩码位置之间的依赖性,并遭受预训练-微调差异的困扰。鉴于这些优缺点,我们提出了 XLNet,这是一种广义自回归预训练方法,它 (1) 通过最大化分解顺序所有排列的预期可能性来实现学习双向上下文,以及 (2) 由于其自回归而克服了 BERT 的局限性公式。此外,XLNet 将最先进的自回归模型 Transformer-XL 的思想集成到预训练中。根据经验,在可比较的实验设置下,

尖端:

可以使用perm_mask输入在训练和测试时间控制特定的注意力模式。由于难以在各种分解顺序上训练完全自回归模型,因此 XLNet 仅使用输出标记的子集作为目标进行预训练,这些标记与target_mapping输入一起选择。要使用 XLNet 进行顺序解码(即不在完全双向设置中),请使用perm_mask和 target_mapping输入来控制注意力跨度和输出(参见 examples /pytorch/text-generation/run_generation.py中的示例)

XLNet 是为数不多的没有序列长度限制的模型之一。

Bidirectional Encoder Representations from Transformers ( BERT ) 是一种基于Transformer的机器学习技术,用于自然语言处理(NLP) 预训练,由Google开发。BERT 由 Jacob Devlin 和他的 Google 同事于 2018 年创建并发布。2019 年,谷歌宣布已开始在其搜索引擎中利用 BERT ,到 2020 年底,它几乎在所有英语查询中都使用了 BERT。2020 年的一项文献调查得出结论,“在一年多的时间里,BERT 已成为 NLP 实验中无处不在的基线”,超过 150 篇研究出版物分析和改进了该模型。

原始的英文 BERT 有两个模型:[1] (1) BERT BASE:12 个编码器和 12 个双向自注意头,以及 (2) BERT LARGE:24 个编码器和 16 个双向自注意头。这两个模型都是根据从 BooksCorpus 中提取的 8 亿单词和英语维基百科中的 25 亿单词的未标记数据进行预训练的。

为什么 XLNet 能够在 20 多项任务中胜过 BERT?

XLNet 优于 BERT 的三个原因

BERT 的训练会屏蔽(或破坏)输入句子中大约 15% 的标记,并仅预测(或重建)那些被屏蔽的标记。例如,如果我们以“阿拉斯加比纽约大 12 倍”这句话为例,假设“纽约”和“约克”被随机选择进行屏蔽,那么“新”向量的预测/重建仅基于单词序列“Alaska is 12 times larger than [mask]”。它不包括“约克”,因为“约克”也被掩盖了。“York”这个词的预测/重建也不是基于“New”,因为“New”被屏蔽了——它也是基于“ Alaska is 12 times larger than [mask]”。换句话说,被屏蔽的标记被认为是相互独立的,以其他单词为条件。虽然这似乎是一个人为的例子(在训练中会出现“New”和“York”都没有被隐藏在句子中的情况),但这说明了 BERT 的训练过程与 XLNet 相比存在缺陷,XLNet 确实做出了这种独立性假设。

BERT 的训练使用了微调期间不存在的掩码令牌。通过用原始标记(15% 的 10%)替换掩码标记,在一定程度上减轻了训练和微调之间的这种差异,但预训练和微调之间仍然存在这种差异。这种差异必须通过设计存在——否则训练目标在多层上下文中变得微不足道(预测的标记可以间接地看到它自己)。XLNet 不会屏蔽标记——因此预训练和微调之间没有差异。该方案的示例如下图所示

总之,XLNet 不会屏蔽令牌,因此不会像 BERT 那样在屏蔽令牌之间做出独立性假设。此外,由于没有掩蔽,因此训练和微调之间没有差异。

自然而然出现的问题是,如果 XLNet不像 BERT 那样屏蔽标记的向量,它如何解决训练期间标记的预测看不到自己的向量(间接通过隐藏状态依赖项)的问题?XLNet 通过巧妙的解决方案避免了令牌在多层上下文中看到自己的问题。对标记在某个位置(比如位置 3)的预测不包括标记 3 的向量(通过隐藏状态依赖间接实现)。它是通过根据排列顺序选择它周围的标记来完成的。单词序列未受影响(如果我们这样做,它会退化为一个简单的词袋模型)——只是根据排列顺序选择被选择用于预测的标记。

XLNet 还可以通过跨段传播状态来捕获比 BERT 更长的序列中的依赖关系(BERT 理论上也可以做长段,但在某些时候处理长序列的成本和内存资源需求变得令人望而却步)。

上面显示了四标记句子中标记 x3 的预测。首先要注意的是,在上面显示的所有四种情况下,单词 x3 都没有参与预测自己。在第一种情况下(左上角 - 3->2->4->1 情况)只涉及向量 mem0(现在考虑这个初始/先验状态)。在右上角(2->4->3->1)mem0,单词x2和x4参与预测x3。一般来说,在任何排列序列中(四个单词有 24[4!] 个),预测某个位置的单词所涉及的单词就是排列序列中位于该单词之前的那些单词。因此,例如,如果我们在序列 2->4->3->1 中预测 x4,则将使用 mem0 和 x2(对于相同的序列 2->4->3->1,当预测 x3 时,项mem0、x2 和 x4 的使用如上所示)。这个简单的方案确保了对句子中某个位置的单词的预测不会直接或间接地使用单词本身。BERT 避免这种“单词看到自己”的解决方案是一种不同的方法——用掩码标记替换 15% 的标记。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230114A02WLT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券