这次写文本来想把从Transformer-XL到XLNet讲一下,但是自己还没看,先写一下XLNet的部分,Transformer-XL明天补上~

1. 背景

2018年10月的时候,谷歌放出了称霸GLUE榜单的BERT模型,当时BERT最大的创新就是提出了Masked Language Model作为预训练任务,解决了GPT不能双向编码、ELMo不能深度双向编码的问题。之后从那天起,很多任务都不再需要复杂的网络结构,也不需要大量的标注数据,业界学术界都基于BERT做了很多事情。

昨天,也就是2019年6月19日,谷歌又放出了一个模型XLNet,找到并解决了BERT的缺点,刷爆了BERT之前的成绩(当然数据、算力相比去年都增加了很多)。惊醒大家不要总被牵着走,创新总会从某个缝里钻出来。

首先介绍两种无监督目标函数:

  1. AR(autoregressive):自回归,假设序列数据存在线性关系,用 预测 。以前传统的单向语言模型(ELMo、GPT)都是以AR作为目标。
  2. AE(autoencoding):自编码,将输入复制到输出。BERT的MLM就是AE的一种。

AR是以前常用的方法,但缺点是不能进行双向的编码。因此BERT采用了AE,获取到序列全局的信息。但本文作者指出了BERT采用AE方法带来的两个问题:

  1. BERT有个不符合真实情况的假设:即被mask掉的token是相互独立的。比如预训练时输入:“自然[Mask][Mask]处理”,目标函数其实是 p(语|自然处理)+p(言|自然处理),而如果使用AR则应该是 p(语|自然)+p(言|自然语)。这样下来BERT得到的概率分布也是基于这个假设的,忽略了这些token之间的联系。
  2. 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详解相关推荐

  1. XLNet 详解(看不懂你来骂我)

    B站视频讲解 "干翻芝麻街" 2018 年,谷歌发布了基于双向 Transformer 的大规模预训练语言模型BERT,刷新了 11 项 NLP 任务的最优性能记录,为 NLP 领 ...

  2. 最火的几个全网络预训练模型梳理整合(BERT、ALBERT、XLNet详解)

    前言 过去两年可谓是NLP领域的高光年,自从18年BERT提出,狂刷了11项下游任务的记录之后,全网络预训练模型开启了NLP嵌入表示的新时代,真正意义上实现了自然语言处理的迁移学习. 作为一个刚入坑没 ...

  3. 飞跃芝麻街:XLNet 详解

    "BERT 被碾压了!" 看到这个消息的瞬间,不由自主地在座位上直接喊了出来,大家纷纷转过头来询问,之后分享出论文链接,突然整个组就没了声音,我知道大家都在和我一样,认真读着 XL ...

  4. NLP --- 分词详解(分词的历史)

    前面的内容我们以算法为主,主要讲解了HMM和CRF算法,为了解决HMM的问题,使用了EM算法,但是整个HMM算法是产生式模型的,计算量大和复杂,因此为了解决这个问题,我们引入了CRF算法,该算法是借鉴 ...

  5. NLP ---分词详解(常见的五种分词技术二)

    上一篇我们讲了N一最短路径方法.基于词的n元文法模型,本节将主要介绍由字构词方法.基于词感知机算法的汉语分词方法.基于字的生成模型和区分式模型相结合的汉语分词方法,下面我们就开始讲解由字构词的方法: ...

  6. 详解NLP技术中的:预训练模型、图神经网络、模型压缩、知识图谱

    NLP近几年非常火,且发展特别快.像BERT.GPT-3.图神经网络.知识图谱等技术应运而生. 我们正处在信息爆炸的时代.面对每天铺天盖地的网络资源和论文.很多时候我们面临的问题并不是缺资源,而是找准 ...

  7. NLP中的Attention注意力机制+Transformer详解

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者: JayLou娄杰 知乎链接:https://zhuanlan.zhihu. ...

  8. NLP技术路线详解:这是从数学到算法的艺术

    自然语言处理路线图详解,从数学基础.语言基础到模型和算法,这是你该了解的知识领域. 自然语言处理很多时候都是一门综合性的学问,它远远不止机器学习算法.相比图像或语音,文本的变化更加复杂,例如从预处理来 ...

  9. 【NLP】Transformer详解

    [NLP]Transformer详解   Transformer在Google的一篇论文Attention is All You Need被提出,为了方便实现调用Transformer Google还 ...

  10. NLP:Transformer的架构详解之详细攻略(持续更新)

    NLP:Transformer的架构详解之详细攻略(持续更新) 目录 Transformer的架构详解 1. Encoder 1.1.Positional Encoding-数据预处理的部分 1.2. ...

最新文章

  1. 【ACM】杭电OJ 1284(待更)
  2. 一张图:AI领域里各领风骚的BAT三巨头
  3. php中(foreach)用法介绍
  4. Wireshark网卡抓包工具简明教程
  5. Hive的索引操作【小结】
  6. 2013年3月百度之星A题
  7. 32位python和64位python区别_python32位和64位有什么区别
  8. 《面向模式的软件体系结构3-资源管理模式》读书笔记(3)--- Eager Acquisition模式...
  9. 论docker中 CMD 与 ENTRYPOINT 的区别
  10. aws篇12 搭建一个推流、读流、RTSP服务器
  11. 子龙山人Learn Emacs in 21 Days: day 7 学习笔记
  12. 云计算发展趋势-华为HCIA云计算学习笔记六
  13. B树中的M阶是什么含义?
  14. 2019-04-01 银行的零售业务和对公业务
  15. 浅析APP应用内及新媒体类推广渠道
  16. 小程序开发需要多少钱?
  17. Gnuplot 绘图
  18. r语言在linux怎么实现,如何在linux环境下使用r语言
  19. 自动控制原理(根轨迹)
  20. 【机器学习】随机森林 – Random forest

热门文章

  1. 求1--100的和 Python3实现
  2. IBM:利用闪存提速实时分析 掘金大数据
  3. Centos系统调优
  4. 使用Configuration Manager部署及管理软件更新(1)
  5. Compare int a and int b without if
  6. [ mongoDB ] - 文档型数据库设计模式-如何存储树形数据 [转]
  7. python3可以运行python2的代码吗_Python同时兼容python2和python3的8个技巧分享
  8. 单台服务器最大支持多少连接数
  9. centos7 mysql server_centos7 mysqlserver 安装过程
  10. 【图文教程】Windows给Rabbitmq安装rabbitmq_delayed_meaage_exchange