Advertisement

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

阅读量:

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

xlnet这一款模型确实相当复杂,在花费很长时间后仍然存在许多不明白的地方。后来又在网上查找了许多相关的大佬博客,才算是对这一款模型有了基本的理解。我也希望能够深入了解这款模型的工作原理,特别推荐一位博主对这款模型进行了深入解析,其解释非常清晰易懂,从而解答了我的许多疑问和疑惑。

原理讲解博客

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

Simple XLNet implementation with Pytorch Wrapper!

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

请注意这一代码并未详细说明实验配置细节;但根据我的测试,在CUDA 11.3环境下运行该代码是完全可行的;作为参考信息提供。

代码的实现。

首先是代码文件目录:

在这里插入图片描述

debug_data_utils.py是我自行调试过程中将data_utils.py文件进行复制操作所得,在此过程中便于我在调试时使用这一工具。运行代码日志.txt则是我为了记录在运行过程中所获得的各种信息而特意创建的一个文件用于保存相关信息数据

从目录结构来看,整个架构设计较为合理完整,在查看各文件名称时即可大致判断该文件的主要作用用途。其中main.py可作为主程序运行并调用其他模块进行操作;其中xlnet.py包含预训练好的语言模型架构;此外用于数据读取与预处理流程的则是data_utils.py这个脚本。

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

首先是导入一些包,这里不多说了。

在这里插入图片描述

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

之后加载分词器以及模型初始化:

在这里插入图片描述

这里我们从main.py文件转至xlnet.py文件具体分析模型的初始化过程,并详细分析以下几个参数:

在这里插入图片描述

我的理解是这样的:他们分别代表计算内容流中的位置编码、查询流中的位置编码以及处理片段嵌入阶段的位置信息(如果对模型的工作原理还存在疑问,则建议参考相关文献或技术博客)。

在这里插入图片描述

模型完成初始化操作后

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

在这一阶段需要注意的是,在创建两个句子时它们可能并非紧邻而行,请通过标签label进行区分(1表示两者是紧邻句子 0则代表两者并非紧邻) 。经过数据创建处理后将会返回一个名为features的列表 ,其中每一个feature都包含几个必要的组成部分

在这里插入图片描述

数据排列:

在这里插入图片描述

在本段中所涉及的数据构建过程中,每个特征都对应着特定的参数配置:reuse_len、perm_size分别设置为256;sequence length则被设定为512;num_predict则取值85。关于数据排列的方式,在仔细阅读后仍然无法完全理解:

在这里插入图片描述

疑难点记录

这个是什么意思呢?有没有懂行的朋友能够帮我解答一下?

到现在为止的数据排列方式我也未能完全弄懂。

不写了哦,请大家随时在我的评论区留言。

最后, 附上我个人复现代码时的注释和个人笔记, 欢迎参考我的仓库: https://gitee.com/deng-dan-neu/my-keyan-jilu.

全部评论 (0)

还没有任何评论哟~