写点什么

XLnet:GPT 和 BERT 的合体,博采众长,所以更强

  • 2019-09-09
  • 本文字数:1662 字

    阅读完需:约 5 分钟

XLnet:GPT和BERT的合体,博采众长,所以更强


前面介绍过 BERT,作为一种非常成功的预训练模型,取得了非常不错的成绩,那么,他还有改进的空间吗?


本文介绍 BERT 的改进版,XLnet。看看它用了什么方法,改进了 BERT 的哪些弱点。

为什么要有 XLnet?

要理解 XLnet,我们先回顾一下先于 XLnet 的两种表现最好的预训练模型 BERT 和 GPT:


  1. Generative Pre-Training(GPT),采用 Transfomer 作为特征抽取器,预训练阶段采用单向语言模型的模式。

  2. Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT),同样采用 Transfomer 作为特征抽取器,与 GPT 的主要差异在于,在训练阶段,其采用基于 MLM 的双向语言模型。


XLnet 的提出者们,仔细研究了一下这两个模型,发现他们都有自己的缺点。


对 GPT,它主要的缺点在于,采用的是单向语言模型。模型在预测当前词的时候,只能看到该词前面词的信息。而对于很多语言理解任务而言,例如阅读理解等,常常需要参考该词前后的语境,因此,单向语言模型往往是不够的。XLnet 的研究者称 GPT 这一类结构为 AR(AutoRegressive)语言模型。


对 BERT,采用 MLM,即在训练时遮住训练语料中 15%的词(实际的 MASK 机制还有一些调整),用符号[MASK]代替,然后试图让网络重建该词。这个过程,在训练语料中引入了符号[MASK]。而在实际的 Finetune 及预测过程中,是没有这个符号的,这就在预训练和预测阶段之间产生了 GAP。BERT 在 MLM 中还隐含了一个独立性假设,即重建各个符号[MASK]的过程,是相互独立的。这个假设其实是未必成立的,会造成模型训练时部分信息的损失。XLnet 的研究者称 BERT 这一类结构为 AE(AutoEncoding)语言模型。


由此可见,BERT 和 GPT 都有待改进的地方,XLnet 的研究者们的想法是将两个模型结合起来,并改进一些点。下面我们来看看 XLnet 是如何基于 GPT 和 BERT 来做改进的。

XLnet 的改进

1) 预训练模式的优化:Permutation Language Modeling(PLM)

XLnet 想要实现 BERT 的双向语言模型,但是又不想引入 BERT MLM 中的独立性假设和符号[MASK],进而提出了 PLM。


XLnet 中,沿用 GPT 的语言模型的办法,即基于序列中前面部分的内容,预测该词。但是,为了在预测该词的时候,为了能够看到该词后面部分的内容,对序列进行排列组合。这样的话,该词的前面也包含该词后面词的信息,用另外一种方式,实现了双向语言模型。



如上图所示,假定输入序列的长度为 4,则除了原语序,这 4 个词总共有 24 种排列方式,上图中用各词在原序列中的位置来表示各词,列出了其中 4 种,[3,2,4,1],[2,4,3,1],[1,4,2,3],[4,3,1,2]。


有同学会疑问,对于 Transformer 这种特征抽取器来说,在不加掩码的情况下,不管输入序列按照哪种顺序输入,效果应该都是一样的才对。


没错,因此 XLnet 还引入了 Two-Stream Self-Attention,双流自注意力模型


所谓双流就是输入包括了两种,训练句子和相应的位置信息,下面看看具体是怎么组织起来的。



如上图所示,输入包括两种类型,query stream 和 content stream。



1.query stream 仅仅包含输入序列中预测位置前面的词 x_(z<t),以及该词在原序列(未重新组合前)中的位置 z_t 信息,但是不包括 x_(z_t)。


2.content stream 跟普通的 transformer 输入一致,包括 x_(z_t)及 x_(z<t)。


通过双流注意力机制,可以有效的学习到双向模型的表征。

2)特征抽取器的优化

在结构上,XLnet 采用改进后的 transofmerXL 作为特征抽取器。前面讲过 TransformerXL,他主要有两个优化,一个引入了序列循环机制;一个是引入了相对位置编码。


对于相对位置编码,在 XLnet 中的应用与之前在 transformer 的应用别无二致;对于序列循环机制,这里介绍一下在 XLnet 中是如何应用的。



如上面的公式所示,其实在 XLnet 中,attention 计算与 TransformerXL 中类似,也是将前一个序列中上一层的隐藏状态,与本序列中上一层隐藏层状态拼接起来。

总结

XLnet 是一个集合了目前两大预训练模型的优点,其效果自然不会差,目前其在各个任务中的表现都要优于 BERT。


XLnet 接过 BERT 的棒,把预训练模型再往前提升了一步。可以遇见,后续 NLP 预训练还会不断有新的模型出来。


2019-09-09 13:492832

评论

发布
暂无评论
发现更多内容

oeasy 教您玩转 linux 010214 画面转文字 asciiview

o

一次代码评审,差点过不了试用期!

小傅哥

Java 小傅哥 代码质量 代码优化 代码规范

拥抱K8S系列-07-部署K8S集群(Rancher)

张无忌

Kubernetes rancher

云图说 | 华为云GPU共享型AI容器,让你用得起,用得好,用的放心

华为云开发者联盟

gpu caffe

端-边-云全面协同创新 英特尔携手百度共推产业智能化升级

E科讯

区块链合约层是一种自动执行的数字协议

CECBC

区块链 智能合约

高并发系列——CAS操作及CPU底层操作解析

诸葛小猿

CAS AtomicInteger compareAndSwap cmpxchg lock

解Bug之路-记一次JVM堆外内存泄露Bug的查找

无毁的湖光

Linux JVM heap memory GC Linux Kenel

两年Java工作经验涨到23K,这究竟是怎么做到的?

Java架构师迁哥

不懂 ZooKeeper?没关系,这一篇给你讲的明明白白

大头星

如何正确设置Java.home

谷鱼

Spring IoC 到底是什么?

小齐本齐

spring 程序员 ioc Spring Framework Spring Bean

Java String 面面观

keaper

Java string pool string

区块链技术与我们的生活将并存

CECBC

区块链 数字经济

Mysql学习笔记:InnoDB索引结构浅析

马迪奥

MySQL 索引结构 innodb

有关 HashMap 面试会问的一切

小齐本齐

Java 数据结构 算法

知识点总结

Acker飏

python——深入类和对象

菜鸟小sailor 🐕

Js 封装:阻止频繁重复操作

程序员与厨子

区块链技术最重要价值所在

CECBC

区块链 数字经济 互联网革命

SpringBoot写后端接口,看这一篇就够了!

华为云开发者联盟

后端 swagger pringboot

开源决策树工具xDecision简介

赫杰辉

决策树 可视化 简化代码

如何让知识图谱告诉你“故障根因”

华为云开发者联盟

华为云 知识图谱 图谱

如何搭建第一个 Spring 项目?

小齐本齐

spring Spring Framework Spring Bean

设计模式只是一把锤子

博文视点Broadview

读书笔记 编程 面向对象 设计模式

所见即所得的用户增长技术背后是如何实现的

代立冬

大数据 用户增长 用户增长技术 ad-hoc技术

架构师期末作业

傻傻的帅

Mysql学习笔记:分库分表(sharding)

马迪奥

MySQL Sharding

音乐创作者必备软件,轻松玩转原创

奈奈的杂社

音乐制作 编曲 电音 作曲 乐团

我敢说,这个版本的斗地主你肯定没玩过?

华为云开发者联盟

命令行 游戏 斗地主

区块链交易系统开发,期货合约平台搭建

XLnet:GPT和BERT的合体,博采众长,所以更强_AI&大模型_小Dream哥,有三AI_InfoQ精选文章