NLP经典论文研读--xlnet论文代码复现记录

xlnet源码解读(简易pytorch实现版本)

xlnet这个模型还是相当复杂的,我看了很长一段时间也还是有很多地方没有搞明白,最后又在网上搜了很多大佬写的相关博客,才算是大致弄明白了,想了解xlnet的原理,请参考原论文,这里推荐一位大佬写的博客,写得非常清楚明白,也解决了我的很多困惑。

原理讲解博客:https://blog.csdn.net/qq_37236745/article/details/108846515

在这里,我重点讲解一下xlnet的代码实现,我这个代码是

Simple XLNet implementation with Pytorch Wrapper!

代码链接:https://github.com/graykode/xlnet-Pytorch

注:这代码里面没有说实验配置,但是我自己的实验环境是cuda11.3 ,经过实验可以正常运行,我的实验配置供参考,如下:
python:3.6
torch 1.10.0+cu113
torchvision 0.11.1+cu113

代码的实现。

首先是代码文件目录:
在这里插入图片描述

其中,dengdan_data_utils.py是我自己调试的时候复制的data_utils.py文件,方便我调试。跑代码记录.txt是我自己用来在跑代码的时候记录一些东西的文件。

从目录结构来看,结构较为清晰,基本上从名字就知道那个文件是用来干嘛的了。main.py是主文件,模型入口、xlnet.py是模型文件、data_utils.py是数据加载及处理文件。

接下来,按照main.py文件中代码运行的顺序来讲解此代码。

首先是导入一些包,这里不多说了。
在这里插入图片描述

然后就是程序入口,在命令行设置参数的代码,也不多说。

之后加载分词器以及模型初始化:
在这里插入图片描述

这里我们从main.py文件转向xlnet.py文件去看一下模型的初始化,重点讲一下如下几个参数:
在这里插入图片描述

个人理解,他们分别表示计算内容流注意力、查询流注意力和片段嵌入时的偏置参数(对模型原理不明白的话需要去看论文或博客)。
在这里插入图片描述

看完模型初始化,回到main.py,在设置好优化器和损失函数后,就开始迭代循环epoch,进行数据创建、数据排列和模型训练了。我个人还没明白为什么每个epoch都要进行一次全新的数据创建。

接下来,分别讲数据创建、数据排列和模型训练这三个部分。

  1. 数据创建:
    这个部分需要注意的是,创建的两个句子不一定是相邻的,用标签label来进行区分,1表示两个句子相邻,0表示不是相邻的。
    经过数据创建处理后,返回的是一个列表features,其中每一个feature都包含几个部分,如下:
    在这里插入图片描述

  2. 数据排列:
    在这里插入图片描述

这里的输入是数据创建部分的每一个feature,reuse_len、perm_size为256、seq_len为512、num_predict为85。数据排列这里我看了很久都没有看明白:
在这里插入图片描述

疑难点记录

这个是什么意思??有没有知道的佬可以给我科普一下~
到现在数据排列的部分我也没有看明白,555~
不写了,欢迎给我留言~
最后,附上我个人复现代码时的注释和个人笔记,欢迎参考我的仓库:
https://gitee.com/deng-dan-neu/my-keyan-jilu

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

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

相关文章

(2024,RNN,梯度消失和爆炸,记忆诅咒,重参数化和动态学习率,权重矩阵对角化,复值 RNN)梯度消失和爆炸并不是故事的结局

Recurrent neural networks: vanishing and exploding gradients are not the end of the story 公和众与号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 梯度消失和梯度爆炸 2. 记…

%运算符

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法介绍 在python中,可以使用%运算符进行灵活多样的格式化处理,通用的语法格式为: (格式模板&…

面试突击:ArrayList源码详解

本文已收录于:https://github.com/danmuking/all-in-one(持续更新) 前言 哈喽,大家好,我是 DanMu。ArrayList 是我们日常开发中不可避免要使用到的一个类,并且在面试过程中也是一个非常高频的知识点&#…

机器人控制系列教程之URDF文件语法介绍

前两期推文:机器人控制系列教程之动力学建模(1)、机器人控制系列教程之动力学建模(2),我们主要从数学的角度介绍了机器人的动力学建模的方式,随着机器人技术的不断发展,机器人建模成为了机器人系统设计中的一项关键任务。URDF&…

ZSWatch 开源项目介绍

前言 因为时不时逛 GitHub 会发现一些比较不错的开源项目,突发奇想想做一个专题,专门记录开源项目,内容不限于组件、框架以及 DIY 作品,希望能坚持下去,与此同时,也会选取其中的开源项目做专题分析。希望这…

基于Java的汽车租赁系统【附源码】

论文题目 设计(论文)综述(1000字) 当今社会,汽车租赁已成为一种受欢迎的出行方式。本文旨在探讨汽车租赁行业的发展趋势、市场规模及其对环境的影响。目前,汽车租赁行业正在经历着快速的发展。随着经济的发…

【独家揭秘】SmartEDA电路仿真软件:电子电路基础学习的神器!

在电子科技日新月异的今天,电路基础学习的重要性愈发凸显。但你是否曾为复杂的电路图、难以理解的电路原理而感到困扰?今天,我要向大家推荐一款学习神器——SmartEDA电路仿真软件,让你轻松踏入电子电路基础学习的殿堂!…

22 Shell编程之免交互

目录 22.1 Here Document免交互 22.1.1 Here Document概述 22.1.2 Here Document免交互 22.1.3 Here Document变量设定 22.1.4 Here Document格式控制 22.1.5 Here Document多行注释 22.2 expect免交互 22.2.1 expect概述 22.2.2 expect安装 22.2.3 基本命令介绍 22.2.4expec…

ARM裸机:地址映射

S5PV210的地址映射详解 什么是地址映射? S5PV210属于ARM Cortex-A8架构,32位CPU,CPU设计时就有32根地址线&32根数据线。 32根地址线决定了CPU的地址空间为4G,那么这4G空间如何分配使用?这个问题就是内存映射问题。…

NAND闪存巨头铠侠(Kioxia)计划最迟于10月下旬通过首次公开募股IPO

据路透社于6月26日引用消息来源的报道,在半导体市场条件反弹及财务业绩迅速改善的背景下,NAND闪存巨头铠侠(Kioxia)正准备尽快提交初步申请,并计划最迟于10月下旬通过首次公开募股(IPO)在东京证…

9.二维数组的遍历和存储

二维数组的遍历和存储 二维数组的遍历 二维数组a[3][4],可分解为三个一维数组,其数组名分别为: 这三个一维数组都有4个元素,例如:一维数组a[0]的 元素为a[0][0],a[0][1],a[0][2],a[0][3]。所以遍历二维数组无非就是先取出二维数组中得一维数组, 然后再从一维数组中取出每个元…

Eclipse代码编辑器自主配色

1. 打开 Eclipse 的设置 - Java - Editor - Syntax Coloring 2. 自定义各种类型的颜色,例如: 1. Interface 勾选,设置为紫色 2. Class 勾选,设置为淡蓝色 3. Abstract classes 勾选,有自己默认的颜色 …

俯视LLM的灵魂:一文搞懂稀疏自动编码器

实时了解业内动态,论文是最好的桥梁,专栏精选论文重点解读热点论文,围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)…

使用jupyter打开本地ipynb文件的方法

常用方法: 先启动jupyter,然后在打开的页面点击upload,选择想要打开的文件上传然后打开,但是这样其实是先复制了一份到jupyter中,然后打开运行。而我不想复制。 方法二 先打开项目文件所在文件夹,文件夹…

【Dison夏令营 Day 01】如何用Python写一个游戏“石头剪刀布”

欢迎你们踏入这个充满无限可能性的编程世界!作为一名热爱Python的开发者,我深感编程的魅力,并希望与你们一同分享这份乐趣和激情。编程,不仅仅是一种技能,更是一种思维方式和解决问题的工具。在Python的世界里&#xf…

如何寻找强势货币和弱势货币?

外汇交易的独特之处在于,它融合了两种货币的价值,其中一种货币的价值通过另一种货币来体现。举例来说,USDJPY外汇反映了美元与日元之间的价值关系,而EURUSD则代表了欧元与美元的价值对比。 通过开仓操作,我们预测一种…

Linux学习第54天:Linux WIFI 驱动:蓝星互联

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 数字化、现代化的今天,随处的WIFI给与了大众极大的方便,也感受到了科技的力量。万物互联、无线互联越来越成为一个不可逆转的趋势。现在比较火…

四川赤橙宏海商务信息咨询有限公司抖音电商领航者

在数字化浪潮席卷全球的今天,电商行业无疑是其中最为活跃、最具潜力的领域之一。而在中国这片广袤的土地上,四川赤橙宏海商务信息咨询有限公司以其独特的视角和前瞻性的战略布局,成为了抖音电商服务领域的佼佼者。今天,就让我们一…

stm32学习笔记---TIM输入捕获(代码部分)输入捕获模式测频率/PWMI模式测频率占空比

目录 第一个代码:输入捕获模式测频率 调整频率 PWM.c PWM.h 输入捕获 IC.c 输入捕获初始化步骤 TIM.h库函数 TIM_ICInit TIM_PWMIConfig TIM_ICStructInit TIM_SelectInputTrigger TIM_SelectOutputTrigger TIM_SelectSlaveMode 单独配置四个通道的分…

聊一聊UDF/UDTF/UDAF是什么,开发要点及如何使用?

背景介绍 UDF来源于Hive,Hive可以允许用户编写自己定义的函数UDF,然后在查询中进行使用。星环Inceptor中的UDF开发规范与Hive相同,目前有3种UDF: A. UDF--以单个数据行为参数,输出单个数据行; UDF&#…