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.mfbz.cn/a/750336.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微服务框架中的Eureka和Ribbon的个人理解

微服务框架需要学习的东西很多,基本上我把它分为了五个模块: 第一:微服务技术模块 分为三个常用小模块: 1.微服务治理: 注册发现 远程调用 配置管理 网关路由 2.微服务保护: 流量控制 系统保护 熔断降级 服…

【尚庭公寓SpringBoot + Vue 项目实战】移动端登录管理(二十)

【尚庭公寓SpringBoot Vue 项目实战】移动端登录管理(二十) 文章目录 【尚庭公寓SpringBoot Vue 项目实战】移动端登录管理(二十)1、登录业务2、接口开发2.1、获取短信验证码2.2、登录和注册接口2.3、查询登录用户的个人信息 1、…

gbase 8c分布式升级步骤

GBase 8c 多模多态企业级分布式数据库具备高性能、高可用、弹性伸缩、高安全性等特性,可以部署在物理机、虚拟机、容器、私有云和公有云,为关键行业核心系统、互联网业务系统和政企业务系统提供安全、稳定、可靠的数据存储和管理服务。GBase 8c支持行存、…

视频号的视频怎么提取文案?详细教程来啦!

很多人不知道视频号的视频怎么提取文案,今天就和大家详细说说视频号视频提取文案的方法! 众所众知视频号的视频无法下载,我们该怎么提取视频号的视频呢? 关于下载视频号的视频,首先给大家两种方案,一种就是…

软考在事业单位可以评高级职称的吗?

导言: 我本人计算机专业,就业于一个事业单位,单位有一个副高级职称数,若干个中级职称数,我可不可以通过软考拿到的中级证书,去找领导申请单位聘我的中级职称,高级职称呢? 以下&…

C++之STL(九)

1、函数对象 什么适合推荐使用函数对象? 需要状态的函数调用: 需要状态的函数调用: 函数对象可以包含成员变量,可以在多次调用中保持状态。这在某些算法中非常有用。 提高性能: 编译器可以更好地优化函数对象,因为它们是具体的类型&#xf…

【路由交换技术】Cisco Packet Tracer基础入门教程(四)

Hello各位,好久不见,第四期我准备讲一下Packet Tracer中DHCP的配置,使用方法。 本章实验我们将拓扑中的某个路由器作为DHCP服务器(它仍然可作为路由器使用),通过命令配置DHCP服务。独立的服务器可通过图形化…

基于VUE3+VITE+SpringBoot+Nginx部署项目之跨域配置等问题

前言:遇到问题,解决问题。 第一部分:VUE 配置 1、vite.config.js 文件 server: {proxy: {/api: {target: env.VITE_BASE_URL,changeOrigin: true,secure: false,rewrite: path > path.replace(/^\/api/, )}}}, 2、.env 文件 VITE_BAS…

JavaScript算法之龟兔赛跑

简介:龟兔赛跑算法,又称弗洛伊德循环检测算法,是一种在链表中非常常用的算法。它基于运动学和直觉的基本定律。本文旨在向您简要介绍该算法,并帮助您了解这个看似神奇的算法。 假设高速公路上有两辆车。其中一辆的速度为 x,另一辆的速度为 2x。它们唯一能相遇的条件是它们…

UE4 Unlua的快速使用

目录 Unlua的使用前言下载Unlua插件插件安装快速入门语法汇总模块导入多行字符串官方静态方法调用蓝图方法调用重载蓝图中的方法主动调用被重载的蓝图方法输入绑定动态绑定Lua脚本委托容器使用 延迟与协程的使用C 调用Lua 静态导出自定义类型到Lua使用网络UMG资源释放自定义加载…

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

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

继续捡钱,每天几百块!

每日操作计划: 标普信息科技(161128),溢价8.5%,限购100,一拖七,单户每天700*8.5%59元 印度基金LOF(164824),溢价2.6%,限购100,一拖七,单户每天700*2.6%18元 美元债LOF(…

如何解决Oracle中PL Developer过期

如果长时间不使用PL Deveploer,再次打开有可能会出现以下页面: 上方页面说明此软件已经过期,有两种方法可以解决上述问题,第一种: 操作注册表: WinR 输入指令“regedit”打开注册表,出现下方页…

List常用操作比for循环更优雅的写法

private String name; //姓名 private Integer age; //年龄 private Integer departId; //所属部门id } List list new ArrayList<>(); 复制代码 简单遍历 使用lamada表达式之前&#xff0c;如果需要遍历list时&#xff0c;一般使用增强for循环&#xff0c;代码如…

利用圆上两点和圆半径求解圆心坐标

已知圆上两点P1&#xff0c;P2&#xff0c;坐标依次为 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1​,y1​),(x2​,y2​)&#xff0c;圆的半径为 r r r&#xff0c;求圆心的坐标。 假定P1&#xff0c;P2为任意两点&#xff0c;则两点连成线段的中点坐标是 x m i …

Python学习笔记24:进阶篇(十三)常见标准库使用之数据压缩功能模块zlib,gzip,bz2,lzma的学习使用

前言 本文是根据python官方教程中标准库模块的介绍&#xff0c;自己查询资料并整理&#xff0c;编写代码示例做出的学习笔记。 根据模块知识&#xff0c;一次讲解单个或者多个模块的内容。 教程链接&#xff1a;https://docs.python.org/zh-cn/3/tutorial/index.html 数据压缩…

活动|华院计算受邀参加2024全球人工智能技术大会(GAITC),探讨法律大模型如何赋能社会治理

6月22至23日&#xff0c;备受瞩目的2024全球人工智能技术大会&#xff08;GAITC&#xff09;在杭州市余杭区未来科技城隆重举行。本届大会以“交叉、融合、相生、共赢”为主题&#xff0c;集“会、展、赛”为一体&#xff0c;聚“产、学、研”于一堂。值得一提的是&#xff0c;…

如何在线上快速定位bug(干货)

想必有许多人都想我刚进公司一样不会快速定位线上bug吧&#xff0c;不会快速定位bug会大大降低我们的开发效率&#xff0c;随之而来的就是工作质量下降、业绩下滑。 我总结了一些我常用的线上定位技巧&#xff0c;希望能帮助到大家&#xff01; 我这里以使用阿里云日志分析作…

【电路笔记】-MOSFET放大器

MOSFET放大器 文章目录 MOSFET放大器1、概述2、电路图3、电气特性3.1 ** I D = F ( V G S ) I_D=F(V_{GS}) ID​=F(VGS​)**特性3.2 I D = F ( V D S ) I_D=F(V_{DS}) ID​=F(VDS​)特性4、MOSFET放大器5、输入和输出电压6、电压增益7、总结1、概述 在前面的文章中,我们已经…

ThreadLocal 源码浅析

前言 多线程在访问同一个共享变量时很可能会出现并发问题&#xff0c;特别是在多线程对共享变量进行写入时&#xff0c;那么除了加锁还有其他方法避免并发问题吗&#xff1f;本文将详细讲解 ThreadLocal 的使用及其源码。 一、什么是 ThreadLocal&#xff1f; ThreadLocal 是 …