【NLP相关】XLNET原理以及案例

news2024/9/20 18:32:34

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

请添加图片描述

【NLP相关】XLNET原理以及案例

XLNET模型是自然语言处理领域中最近新兴的模型之一,其创新之处在于引入了Transformer XL机制,进一步扩展了Transformer模型的能力。在本文中,我们将介绍XLNET模型的基本原理,其提出和发展的历程,以及关于XLNET的应用和研究进展。

1. Transformer XL机制

在介绍XLNET模型的基本原理之前,我们首先需要了解一下Transformer XL机制。Transformer XL是Transformer模型的扩展版本,其中引入了一种称为“相对位置编码”的机制,以解决Transformer模型中存在的位置信息限制问题。

在传统的Transformer模型中,输入序列的位置信息只能通过固定的位置编码进行表示。这种方式存在两个问题:一是无法表示较长的序列,因为固定的位置编码无法区分不同位置的单词;二是无法捕捉序列中不同单词之间的关系。

相对位置编码机制则通过动态地对输入序列的相对位置进行编码,解决了上述问题。具体来说,相对位置编码机制将序列中任意两个单词之间的相对位置表示为一个向量,从而捕捉到单词之间的关系。

2. XLNET原理

XLNET模型是由CMU和谷歌公司联合提出的。该模型的创新之处在于,它将Transformer XL机制与自回归和非自回归两种语言模型相结合,进一步扩展了Transformer模型的能力。

XLNET模型包括两个部分:自回归部分和非自回归部分。自回归部分采用了Transformer XL机制,并且在每个时间步骤中都采样一个单词作为输出。非自回归部分则是对整个序列进行建模,不需要按时间步骤进行采样。

XLNET模型的关键在于如何将自回归和非自回归两种模型相结合。具体来说,XLNET模型使用了一个permutation-based语言模型,通过随机采样的方式对序列进行重组,并在每个重组序列上训练模型。这种方法能够让模型学习到更加全面的上下文信息,进一步提高了模型的性能。

3. 案例展示

在这个案例中,我们将使用XLNET模型对一个文本分类任务进行建模。具体来说,我们将使用IMDB电影评论数据集,该数据集包括50,000条电影评论,其中25,000条用于训练,25,000条用于测试。

首先,我们需要下载IMDB数据集,可以使用以下命令进行下载:

wget https://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz
tar -xf aclImdb_v1.tar.gz

然后,我们需要使用XLNET模型对数据集进行建模。在这个案例中,我们使用Hugging Face的Transformers库来实现XLNET模型。具体来说,我们将使用预训练的XLNET模型作为特征提取器,并在顶部添加一个全连接层作为分类器。

以下是使用XLNET模型进行文本分类的代码:

import torch
from transformers import XLNetTokenizer, XLNetForSequenceClassification
from transformers import AdamW

# Load XLNET tokenizer and model
tokenizer = XLNetTokenizer.from_pretrained('xlnet-base-cased')
model = XLNetForSequenceClassification.from_pretrained('xlnet-base-cased')

# Load data
train_texts = [open('aclImdb/train/pos/'+f, 'r').read() for f in os.listdir('aclImdb/train/pos/')] + \
              [open('aclImdb/train/neg/'+f, 'r').read() for f in os.listdir('aclImdb/train/neg/')]
train_labels = [1] * 12500 + [0] * 12500

test_texts = [open('aclImdb/test/pos/'+f, 'r').read() for f in os.listdir('aclImdb/test/pos/')] + \
             [open('aclImdb/test/neg/'+f, 'r').read() for f in os.listdir('aclImdb/test/neg/')]
test_labels = [1] * 12500 + [0] * 12500

# Tokenize data
train_encodings = tokenizer(train_texts, truncation=True, padding=True)
test_encodings = tokenizer(test_texts, truncation=True,padding=True)
#Convert data to PyTorch tensors
train_dataset = torch.utils.data.TensorDataset(torch.tensor(train_encodings['input_ids']),torch.tensor(train_encodings['attention_mask']),torch.tensor(train_labels))
test_dataset = torch.utils.data.TensorDataset(torch.tensor(test_encodings['input_ids']),torch.tensor(test_encodings['attention_mask']),torch.tensor(test_labels))

# Train model
device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')
model.to(device)
model.train()

optimizer = AdamW(model.parameters(), lr=5e-5)

train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=8, shuffle=True)
for epoch in range(3):
	for batch in train_loader:
		optimizer.zero_grad()
		input_ids = batch[0].to(device)
		attention_mask = batch[1].to(device)
		labels = batch[2].to(device)
		outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)
		loss = outputs.loss
		loss.backward()
		optimizer.step()

# Test model
model.eval()
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=8, shuffle=False)
with torch.no_grad():
	num_correct = 0
	for batch in test_loader:
		input_ids = batch[0].to(device)
		attention_mask = batch[1].to(device)
		labels = batch[2].to(device)
		outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)
		logits = outputs.logits
		predictions = torch.argmax(logits, dim=1)
		num_correct += torch.sum(predictions == labels)
		accuracy = num_correct / len(test_dataset)
print('Accuracy:', accuracy.item())

在上面的代码中,我们首先使用XLNET的tokenizer将原始文本转换为XLNET模型所需的输入格式,然后将数据转换为PyTorch张量并加载到数据集中。接下来,我们使用AdamW优化器训练模型,训练完模型后,我们使用模型对测试集进行预测并计算准确率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/393561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

类成员的方法

初识对象 生活中或是程序中,我们都可以使用设计表格、生产表格、填写表格的形式组织数据进行对比,在程序中: 设计表格,称之为:设计类(class) 打印表格,称之为:创建对象 …

C语言--一维数组

数组概念 数组:是一种构造数据类型,用以处理批量的同种类型的数据。 主要特点:数据量大 ,类型相同 一维数组的定义 语法: 类型说明符 数组名[整型常量表达式]; 注意: 方括号里面的内容用于指…

css3横向无限公告消息滚动功能

html部分 {{item}}css部分 .boxingeds{ display: flex; flex-wrap: wrap; width: 150%; position: relative; left: 1000rpx; padding: 30rpx 0; position: absolute; top: 23%; z-index: 2; -webkit-animation: myfirst 30s linear 2s infinite; .textname{ display: inlin…

数字三角形 购物单

题目: 题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边…

从0开始自制解释器——实现简单的加法计算器

为什么要学习编译器和解释器呢?文中的作者给出的答案有下面几个: 为了深入理解计算机是如何工作的:一个显而易见的道理就是,如果你不懂编译器和解释器是如何工作的那么你就不明白计算机是如何工作的编译器和解释器用到的一些原理…

InnoDB——详细说明索引中B+树的操作和原理

本内容针对Mysql5.x; 索引是应用程序设计和开发的一个重要方面。 若索引太多,应用程序的性能可能会收到影响。 而索引太少,对查询性能又会产生影响。 索引的注意事项: 如果知道数据的使用,从一开始就应该在需要处添加…

车企数据分类分级的实践指南出炉!“数据安全推进计划”发布,奇点云参编

日前,“数据安全推进计划”(DSI)正式发布《智能网联汽车数据分类分级实践指南》(下文简称“指南”),旨在以合规为主要导向,明确智能网联汽车数据分类分级的方法论,为数据全生命周期的…

每日学术速递3.7

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Dropout Reduces Underfitting 标题:Dropout 减少欠拟合 作者:Zhuang Liu, Zhiqiu Xu, Joseph Jin, Zhiqiang Shen, Trevor Darrel 文章链接:h…

SpringBoot(Tedu)—DAY01——环境搭建

SpringBoot(Tedu)—DAY01——环境搭建 目录SpringBoot(Tedu)—DAY01——环境搭建零、今日目标一、IDEA2021项目环境搭建1.1 通过 ctrl鼠标滚轮 实现字体大小缩放1.2 自动提示设置 去除大小写匹配1.3 设置参数方法自动提示1.4 设定字符集 要求都使用UTF-8编码1.5 设置自动编译二…

controller-runtime搭建operator开发环境

目录 基本结构 注入CRD 基本结构 首先下载相应的go pkg go get -u sigs.k8s.io/controller-runtime 接下来需要创建控制器和Manager Operator的本质是一个可重入的队列编程模式,而Manager可以用来管理Controller、Admission Webhook,包括访问资源对…

MATLAB算法实战应用案例精讲-【优化算法】樽海鞘群算法(SSA)及其算法变种(附matlab代码实现)

目录 前言 算法原理 算法思想 数学模型 (1)种群初始化 (2)领导者位置更新 (3)跟随者位置更新 代码实现 算法流程图 算法步骤 伪代码 SSA伪代码 MSSA伪代码 面向全局搜索的自适应领导者樽海鞘群算…

同模块设置不同应用主题方案

有时候公司内部会有不同应用但是有部分模块功能一样,只根据应用角色有些细节逻辑区分的场景。这时候往往采用模块化采用以应用至不同的APP。如果APP主题不一致,该如果解决。 方案: 在不同应用的config.gradle 下面根据不同应用定义不同的a…

基于SSM+SpringBoot《CRM客户关系管理系统》实战开发教程(附文档及源码)

1.项目简介 客户关系管理(Customer Relationship Management,简称CRM),是指企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售、营销和服务上的交互,从而提升其管理方式&…

AUTOSAR知识点Com(一):CANIf入门知识

目录 1、概述 2、上下层关系 2.1 上层 2.2 下层 3、链接 4、记录项 1、概述 下面主要是规范方面的描述: 参考文档《AUTOSAR_SWS_CANInterface.pdf》 CAN接口模块(下文简“CanIf”)位于底层CAN驱动(CanDrv)、CA…

华为机试题:HJ103 Redraiment的走法(python)

文章目录(1)题目描述(2)Python3实现(3)知识点详解1、input():获取控制台(任意形式)的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

【Python笔记20230307】

基础 编码、解码 str.encode(utf-8) # 编码 str.decode(utf-8) # 解码关键字 import keyword keyword.kwlist格式化输出 % 占位符:%s 字符串%d 整数%f 浮点数Hello, %s % world Hi, %s, you have $%d. % (Michael, 1000000) 占位符的修饰符 -左对齐 .小数点后位数 0左边补零…

SpringCloud简介

一、注册中心 1、为什么需要用到注册中心? 让消费者服务及时知道提供者服务的状态。例如:是否宕机、是否增加了集群实例等。 2、dubbo和zookeeper 特点:服务消费端订阅注册中心。服务提供端增加实例会把新实例注册到注册中心,…

HCIP知识点(前三天)

复习HCIA: 一、TCP/IP模型,OSI模型 OSI 开放式系统互联参考模型 应用层 抽象语言—>编码 表示层 编码—>二进制 会话层 应用程序内部的区分地址(无标准格式) 传输层 TCP/UDP – 分段(受MTU限制)、端…

C 语言网络编程 — PF_NETLINK sockets

目录 文章目录目录PF_NETLINK socketsPF_NETLINK sockets Linux 提供了 4 种 User Process 和 Kernel 之间进行通信的 IPC(Inter-Process Communicate,进程间通信)方式: /procioctlsysfsPF_NETLINK sockets(Netlink …

vue大型商城系统中遇到的问题(上)

一:创建仓库1.领导创建git仓库(参考————这篇文章),新手下载git2.打开cmd终端,将git仓库拉到本地3.进入文件目录,查看分支(新手向——为什么需要创建分支,查看---)4.创…