【NLP】XLNet详解
这次写文本来想把从Transformer-XL到XLNet讲一下,但是自己还没看,先写一下XLNet的部分,Transformer-XL明天补上~
1. 背景
2018年10月的时候,谷歌放出了称霸GLUE榜单的BERT模型,当时BERT最大的创新就是提出了Masked Language Model作为预训练任务,解决了GPT不能双向编码、ELMo不能深度双向编码的问题。之后从那天起,很多任务都不再需要复杂的网络结构,也不需要大量的标注数据,业界学术界都基于BERT做了很多事情。
昨天,也就是2019年6月19日,谷歌又放出了一个模型XLNet,找到并解决了BERT的缺点,刷爆了BERT之前的成绩(当然数据、算力相比去年都增加了很多)。惊醒大家不要总被牵着走,创新总会从某个缝里钻出来。
首先介绍两种无监督目标函数:
- AR(autoregressive):自回归,假设序列数据存在线性关系,用 预测 。以前传统的单向语言模型(ELMo、GPT)都是以AR作为目标。
- AE(autoencoding):自编码,将输入复制到输出。BERT的MLM就是AE的一种。
AR是以前常用的方法,但缺点是不能进行双向的编码。因此BERT采用了AE,获取到序列全局的信息。但本文作者指出了BERT采用AE方法带来的两个问题:
- BERT有个不符合真实情况的假设:即被mask掉的token是相互独立的。比如预训练时输入:“自然[Mask][Mask]处理”,目标函数其实是 p(语|自然处理)+p(言|自然处理),而如果使用AR则应该是 p(语|自然)+p(言|自然语)。这样下来BERT得到的概率分布也是基于这个假设的,忽略了这些token之间的联系。
- BERT在预训练和精调阶段存在差异:因为在预训练阶段大部分输入都包含[Mask],引入了噪声,即使在小部分情况下使用了其他token,但仍与真实数据存在差异。
以上就是BERT采用AE方法存在的痛点,接下来请看XLNet如何解决这些问题。
2. XLNet
与其说XLNet解决了BERT的问题,不如说它基于AR采用了一种新的方法实现双向编码,因为AR方法不存在上述两个痛点。
XLNet的创新点是Permutation Language Modeling,如下图:
- 理论上
对于长度为T的序列x,存在T!种排列方法,如果把 重新排列成 ,再采用AR为目标函数,则优化的似然为
因为对于不同的排列方式,模型参数是共享的,所以模型最终可以学习到如何聚集所有位置的信息。
- 操作上
由于计算复杂度的限制,不可能计算所有的序列排列,因此对于每个序列输入只采样一个排列方式。而且在实际训练时,不会打乱序列,而是通过mask矩阵实现permutation。作者特意强调,这样可以保持与finetune输入顺序的一致,不会存在pretrain-finetune差异。
2.1 Two-Stream Self-Attention
解决了核心问题,接下来就是实现的细节问题了。其实上面打乱顺序后有一个很大的问题,就是在预测第三个x的时候模型预测的是 ,如果把排列方式换成 ,则应该预测 ,但模型是不知道当前要预测的是哪一个,因此输出的值是一样的,即 ,这就不对了。所以说要加入位置信息,即 和 ,让模型知道目前是预测哪个位置的token。
那下一个问题又来了,传统的attention只带有token编码,位置信息都在编码里了,而AR目标是不允许模型看到当前token编码的,因此要把position embedding拆出来。怎么拆呢?作者就提出了Two-Stream Self-Attention。
Query stream:只能看到当前的位置信息,不能看到当前token的编码
Content stream:传统self-attention,像GPT一样对当前token进行编码
预训练阶段最终预测只使用query stream,因为content stream已经见过当前token了。在精调阶段使用content stream,又回到了传统的self-attention结构。
下面的图起码看3遍~看懂为止,图比我讲的明白。。
另外,因为不像MLM只用预测部分token,还需要计算permutation,XLNet的计算量更大了,因此作者提出了partial prediction进行简化,即只预测后面1/K个token。
2.2 Transformer-XL
为了学习到更长距离的信息,作者沿用了自己的Transformer-XL。
(太困了。。明天继续好不好)
转载于:https://juejin.im/post/5d0d17e551882532cf35e271
【NLP】XLNet详解相关推荐
- XLNet 详解(看不懂你来骂我)
B站视频讲解 "干翻芝麻街" 2018 年,谷歌发布了基于双向 Transformer 的大规模预训练语言模型BERT,刷新了 11 项 NLP 任务的最优性能记录,为 NLP 领 ...
- 最火的几个全网络预训练模型梳理整合(BERT、ALBERT、XLNet详解)
前言 过去两年可谓是NLP领域的高光年,自从18年BERT提出,狂刷了11项下游任务的记录之后,全网络预训练模型开启了NLP嵌入表示的新时代,真正意义上实现了自然语言处理的迁移学习. 作为一个刚入坑没 ...
- 飞跃芝麻街:XLNet 详解
"BERT 被碾压了!" 看到这个消息的瞬间,不由自主地在座位上直接喊了出来,大家纷纷转过头来询问,之后分享出论文链接,突然整个组就没了声音,我知道大家都在和我一样,认真读着 XL ...
- NLP --- 分词详解(分词的历史)
前面的内容我们以算法为主,主要讲解了HMM和CRF算法,为了解决HMM的问题,使用了EM算法,但是整个HMM算法是产生式模型的,计算量大和复杂,因此为了解决这个问题,我们引入了CRF算法,该算法是借鉴 ...
- NLP ---分词详解(常见的五种分词技术二)
上一篇我们讲了N一最短路径方法.基于词的n元文法模型,本节将主要介绍由字构词方法.基于词感知机算法的汉语分词方法.基于字的生成模型和区分式模型相结合的汉语分词方法,下面我们就开始讲解由字构词的方法: ...
- 详解NLP技术中的:预训练模型、图神经网络、模型压缩、知识图谱
NLP近几年非常火,且发展特别快.像BERT.GPT-3.图神经网络.知识图谱等技术应运而生. 我们正处在信息爆炸的时代.面对每天铺天盖地的网络资源和论文.很多时候我们面临的问题并不是缺资源,而是找准 ...
- NLP中的Attention注意力机制+Transformer详解
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者: JayLou娄杰 知乎链接:https://zhuanlan.zhihu. ...
- NLP技术路线详解:这是从数学到算法的艺术
自然语言处理路线图详解,从数学基础.语言基础到模型和算法,这是你该了解的知识领域. 自然语言处理很多时候都是一门综合性的学问,它远远不止机器学习算法.相比图像或语音,文本的变化更加复杂,例如从预处理来 ...
- 【NLP】Transformer详解
[NLP]Transformer详解 Transformer在Google的一篇论文Attention is All You Need被提出,为了方便实现调用Transformer Google还 ...
- NLP:Transformer的架构详解之详细攻略(持续更新)
NLP:Transformer的架构详解之详细攻略(持续更新) 目录 Transformer的架构详解 1. Encoder 1.1.Positional Encoding-数据预处理的部分 1.2. ...
最新文章
- 【ACM】杭电OJ 1284(待更)
- 一张图:AI领域里各领风骚的BAT三巨头
- php中(foreach)用法介绍
- Wireshark网卡抓包工具简明教程
- Hive的索引操作【小结】
- 2013年3月百度之星A题
- 32位python和64位python区别_python32位和64位有什么区别
- 《面向模式的软件体系结构3-资源管理模式》读书笔记(3)--- Eager Acquisition模式...
- 论docker中 CMD 与 ENTRYPOINT 的区别
- aws篇12 搭建一个推流、读流、RTSP服务器
- 子龙山人Learn Emacs in 21 Days: day 7 学习笔记
- 云计算发展趋势-华为HCIA云计算学习笔记六
- B树中的M阶是什么含义?
- 2019-04-01 银行的零售业务和对公业务
- 浅析APP应用内及新媒体类推广渠道
- 小程序开发需要多少钱?
- Gnuplot 绘图
- r语言在linux怎么实现,如何在linux环境下使用r语言
- 自动控制原理(根轨迹)
- 【机器学习】随机森林 – Random forest
热门文章
- 求1--100的和 Python3实现
- IBM:利用闪存提速实时分析 掘金大数据
- Centos系统调优
- 使用Configuration Manager部署及管理软件更新(1)
- Compare int a and int b without if
- [ mongoDB ] - 文档型数据库设计模式-如何存储树形数据 [转]
- python3可以运行python2的代码吗_Python同时兼容python2和python3的8个技巧分享
- 单台服务器最大支持多少连接数
- centos7 mysql server_centos7 mysqlserver 安装过程
- 【图文教程】Windows给Rabbitmq安装rabbitmq_delayed_meaage_exchange