XLNet——打破 BERT 局限的预训练语言模型
近年来,深度学习在自然语言处理(NLP)领域取得了革命性进展,其中 BERT 的出现标志着双向语言建模的强大能力。然而,BERT 也存在一些局限性,限制了其在生成任务中的表现。2019 年,由 Google 和 Carnegie Mellon University 联合提出的 XLNet 模型,通过引入 排列语言建模(Permuted Language Modeling, PLM) 和 Transformer-XL 结构,打破了 BERT 的瓶颈,并在多个 NLP 任务中实现了超越。
本文将从 XLNet 的核心概念、设计原理、优势与局限 等方面,详细介绍这款强大的预训练语言模型。
1. XLNet 是什么?
XLNet 是一种基于 Transformer 的预训练语言模型,旨在结合自回归模型(如 GPT)和自编码模型(如 BERT)的优势,解决 BERT 的以下局限性:
- 预训练和微调不一致:BERT 的
Masked Language Model(MLM)依赖于遮掩的[MASK]token,但在微调时[MASK]不存在,导致不一致。 - 上下文利用有限:BERT 只能预测被遮掩 token,而未显式建模所有 token 的联合分布。
为此,XLNet 提出了 排列语言建模,并结合了 Transformer-XL 的记忆机制,实现了对更长上下文的建模和对联合概率分布的显式优化。
2. 核心创新:排列语言建模(Permuted Language Modeling, PLM)
传统的语言模型训练目标通常是固定的:
- 自回归模型(如 GPT):从左到右依次预测下一个 token。
- 自编码模型(如 BERT):遮掩部分 token,然后预测这些 token。
(1) 排列语言建模的核心思想
XLNet 使用随机排列的方式改变 token 的预测顺序,例如:
- 对于序列
x = [x1, x2, x3, x4, x5],生成随机排列[x3, x1, x2, x5, x4]。 - 按照排列的顺序,模型依次预测 token(如预测
x3时仅考虑排列中x1, x2)。
通过排列语言建模,XLNet 显式优化了 token 的联合概率分布:
P ( x ) = ∏ t = 1 T P ( x z t ∣ x z 1 , . . . , x z t − 1 ) P(x) = \prod_{t=1}^T P(x_{z_t} | x_{z_1}, ..., x_{z_{t-1}}) P(x)=t=1∏TP(xzt∣xz1,...,xzt−1)
其中, z z z 表示随机排列的顺序。
(2) 动态预测目标
在训练过程中,模型会动态生成排列顺序,确保在每次训练中都能学习不同的上下文依赖关系。这种机制避免了数据重复,同时提升了数据多样性。
3. 结合 Transformer-XL 的长距离建模能力
XLNet 基于 Transformer-XL 架构,进一步增强了对长文本的建模能力:
- 记忆机制:通过缓存上一段文本的隐状态,实现跨段上下文的信息共享。
- 有效的长距离依赖建模:相比于传统 Transformer,Transformer-XL 避免了序列长度限制带来的上下文截断问题。
这种设计使得 XLNet 能够在长文本场景中表现得更加出色,例如阅读理解和文档分类。
4. XLNet 的优势
(1) 超越 BERT 的理解能力
- XLNet 通过排列语言建模捕捉了 token 的联合分布,显式建模上下文关系,比 BERT 的 MLM 更全面。
- 在多个 NLP 任务(如 GLUE、SQuAD)中,XLNet 的表现优于 BERT。
(2) 克服预训练和微调的不一致性
- BERT 在预训练中使用
[MASK],但下游任务通常不包含遮掩 token,这种不一致性会影响性能。 - XLNet 无需遮掩 token,因此预训练和微调阶段的输入更一致。
(3) 适用于长文本任务
- Transformer-XL 的记忆机制让 XLNet 能够处理比 BERT 更长的上下文序列,在需要全局理解的任务中表现更佳。
5. XLNet 的局限性
(1) 计算成本高
- 排列语言建模需要多次动态生成排列,并显式计算联合概率分布,相比 BERT 和 GPT,计算复杂度更高。
(2) 不完全适合生成任务
- 虽然 XLNet 引入了自回归特性,但其双向建模方式仍主要面向理解任务。在逐步生成文本时,GPT 的左到右自回归建模更高效。
(3) 复杂性较高
- XLNet 的实现和训练逻辑比 BERT 和 GPT 更复杂,对硬件和开发的要求更高。
6. XLNet 的应用场景
(1) 自然语言理解任务
- 文本分类:如情感分析、话题分类。
- 自然语言推断(NLI):判断句子间的逻辑关系。
- 阅读理解(QA):从上下文中抽取答案。
(2) 序列标注任务
- 命名实体识别(NER)。
- 词性标注(POS tagging)。
(3) 长文本任务
- 文档级分类:如法律、金融文档分析。
- 文本摘要生成(结合下游微调)。
7. XLNet 与 GPT、BERT 的对比
| 模型 | 目标 | 上下文建模 | 适用任务 | 生成能力 |
|---|---|---|---|---|
| BERT | MLM | 双向(静态遮掩) | 理解任务(分类、QA) | 较弱(遮掩限制) |
| GPT | 自回归语言模型 | 单向(左到右) | 生成任务(文本生成) | 强 |
| XLNet | 排列语言建模 | 双向 + 自回归(动态) | 理解任务(分类、QA) | 有限(生成性能弱于 GPT) |
参考代码:使用 Hugging Face 加载 XLNet
from transformers import XLNetTokenizer, XLNetForSequenceClassification
import torch# 加载 XLNet 模型和分词器
tokenizer = XLNetTokenizer.from_pretrained("xlnet-base-cased")
model = XLNetForSequenceClassification.from_pretrained("xlnet-base-cased", num_labels=2)# 输入文本
text = "XLNet is a powerful model for NLP tasks."
inputs = tokenizer(text, return_tensors="pt")# 推理
outputs = model(**inputs)
logits = outputs.logits
print("Logits:", logits)
相关文章:
XLNet——打破 BERT 局限的预训练语言模型
近年来,深度学习在自然语言处理(NLP)领域取得了革命性进展,其中 BERT 的出现标志着双向语言建模的强大能力。然而,BERT 也存在一些局限性,限制了其在生成任务中的表现。2019 年,由 Google 和 Ca…...
开源代码统计工具cloc的简单使用
一.背景 公司之前开发了个小系统,要去申请著作权,需要填写代码数量。应该怎么统计呢?搜索了一下,还是用开源工具cloc吧!我的操作系统是windows,代码主要是java项目和vue项目。 二.到哪里找 可以去官方下载…...
如何创建一个项目用于研究element-plus的原理
需求:直接使用element-plus未封装成组件的源码,创建一个项目,可以使用任意的element-plus组件,可以深度研究组件的运行。例如研究某一个效果,如果直接在node_modules修改elment-plus打包之后的那些js、mjs代码…...
单片机进阶硬件部分_day2_项目实践
设计要求 从绘制原理图到画PCB板,完成智能云衣柜项目 STM32 (Modbus)云IOT衣物云端管理 华为PCB布线规范 基于IoT的智享家主控系统 步骤分析 需求分析 器件选型绘制原理图(器件连接)PCB布局、布线泪滴、铺铜、添加丝印…...
labview关于文件路径的问题
在调用文件或拆分文件的时候经常会用到拆分路径函数和创建路径函数,最常用的也是当前应用程序目录或者是当前VI目录。 这里我们看到应用程序目录和VI目录在同一项目中,应用程序目录更像是根目录,往下拆分成了各个VI的子目录。 接下来我们来拆…...
72项!湖北省2024年度第二批省级科技计划项目拟立项项目公示!
本期精选 SCI&EI ●IEEE 1区TOP 计算机类(含CCF); ●EI快刊:最快1周录用! 知网(CNKI)、谷歌学术期刊 ●7天录用-检索(100%录用),1周上线; 免费稿件评估 免费匹配…...
神经网络问题之:梯度不稳定
梯度不稳定是深度学习中,特别是在训练深度神经网络时常见的一个问题,其本质涉及多个方面。 一、根本原因 梯度不稳定问题的根本原因在于深度神经网络的结构和训练过程中的一些固有特性。随着网络层数的增加,梯度在反向传播过程中会逐层累积变…...
ORACLE删不掉job,如何解决。
问题: 删掉 NYZSM 时出错: ORA-27478: 作业 “ZHY.NYZSM” 正在运行 ORA-06512: 在 “SYS.DBMS_ISCHED”, line 213 ORA-06512: 在 “SYS.DBMS_SCHEDULER”, line 657 ORA-06512: 在 line 2 1、停止作业: 使用DBMS_SCHEDULER.STOP_JOB过程来…...
可视化建模与UML《活动图实验报告》
你当像鸟飞往你的山。 一、实验目的: 1、熟悉活动图的基本功能和使用方法。 2、掌握使用建模工具软件绘制协作图的方法 二、实验环境: window7 | 10 | 11 EA15 三、实验内容: <1>绘制学生选课系统中添加课程(Add Course)用例的活动图…...
基于 MUSA 的大语言模型推理和服务框架vLLM
1. 引言 vLLM是一个高性能且内存高效的大语言模型推理和服务框架,也是当前业界使用范围最广的大模型推理框架,截至目前github star数28.4k。该框架性能优秀,而且部署容易,使用CUDA/ROCm提供GPU加速能力。但vLLM目前不支持使用摩…...
鸿蒙网络编程系列48-仓颉版UDP回声服务器示例
1. UDP回声服务器简介 回声服务器指的是这样一种服务器,它接受客户端的连接,并且把收到的数据原样返回给客户端,本系列的第2篇文章《鸿蒙网络编程系列2-UDP回声服务器的实现》中基于ArkTS语言在API 9的环境下实现了UDP回声服务器,…...
android-studio-4.2下载 、启动
下载 分享一个国内的android studio网站,可以下载SDK和一些Android studio开发工具 https://www.androiddevtools.cn/ 启动 JAVA_HOME/app/zulu17.48.15-ca-jdk17.0.10-linux_x64/ /app5/android-studio-home/android-studio-ide-201.6568795-linux-4.2C1/bin/s…...
深度学习day2-Tensor 2
六 Tensor常见操作 Tensor:多维数组,用于存储和操作数据 1 获取元素值 data.item():单个元素tensor转为python数值 import torch #标量 xtorch.tensor(1) print(x.item()) #一阶 xtorch.tensor([100]) print(x.item()) #如果输入的数据超过1个&#…...
【Android踩过的坑】14.小米系统TTS无法生效的问题
【Android踩过的坑】14.小米系统TTS无法生效的问题 解决办法: 在AndroidManifest.xml中添加: <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"…...
RabbitMQ实现异步下单与退单
前言: 在电商项目中的支付模块也是一个很重要的模块,其中下订操作以及退订操作就是主要的操作。其次的下单是同步下单,也就是第三方支付、数据库扣减、积分增加、等等其他业务操作,等待全部执行完毕后向用户返回成功响应请求。对…...
鸿蒙NEXT开发案例:随机数生成
【引言】 本项目是一个简单的随机数生成器应用,用户可以通过设置随机数的范围和个数,并选择是否允许生成重复的随机数,来生成所需的随机数列表。生成的结果可以通过点击“复制”按钮复制到剪贴板。 【环境准备】 • 操作系统:W…...
nwjs崩溃复现、 nwjs-控制台手动操纵、nwjs崩溃调用栈解码、剪切板例子中、nwjs混合模式、xdotool显示nwjs所有进程窗口列表
-1. nwjs在低版本ubuntu运行情况 ubuntu16.04运行nw-v0.93或0.89报错找不到NSS_3.30、GLIBC_2.25 uname -a #Linux Asus 4.15.0-112-generic #113~16.04.1-Ubuntu SMP Fri Jul 10 04:37:08 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux cat /etc/issue #Ubuntu 16.04.7 LTS \n \l…...
视觉SLAM--经典视觉SLAM框架
整个视觉SLAM流程主要包括以下步骤: 1、传感器信息读取:在视觉SLAM中主要为相机图像信息的读取和预处理。 2、前端视觉里程计:估算相邻图像间相机的运动,以及局部地图的样子。 3、后端(非线性)优化&#…...
Wallpaper壁纸制作学习记录05
效果简介 效果可以应用于现有组件,主要是您导入的图像。您可以在图像图层、文本图层、全屏图层和合成图层上使用效果。要添加效果需要打开之前的项目或创建一个新的项目,然后点击右侧效果区域的添加按钮。 将鼠标悬停在效果列表是,将显示眼睛…...
Elasticsearch 中的热点以及如何使用 AutoOps 解决它们
作者:来自 Elastic Sachin Frayne 探索 Elasticsearch 中的热点以及如何使用 AutoOps 解决它。 Elasticsearch 集群中出现热点的方式有很多种。有些我们可以控制,比如吵闹的邻居,有些我们控制得较差,比如 Elasticsearch 中的分片分…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
