当前位置: 首页 > article >正文

NLP基础及其代码-BERT系列

1.基础知识

BERT系列RoBERTa ALBERT ERINE详解与使用学习笔记-腾讯云开发者社区-腾讯云 (tencent.com)

2.BERT

分词:wordpiece

预训练:
mask:选择15%的分词进行mask(80%mask 10%随机替换分词 10%分词保持不变)
NSP:判断前后句子是否连续

3. RoBERTa

 Robustly optimized BERT approach

更多的数据

采用动态【MASK】
BERT:对15%的分词进行mask,对于同一文本,在训练过程中mask位置一直保持不变
Roberta:对15%的分词进行mask,对于同一文本,在训练过程中mask的位置会重新挑选

去掉下一句预测的NSP任务
RoBERTa去掉NSP任务

更大的batch_size
BERT的batch_size是256,一共训练了1M步
RoBERTa的batch_size是8k

4. ALBERT

A Lite BERT
大家常说刷榜的ALBERT,其实是xxlarge版本,普通的large版本性能是比BERT的large版本要差的

矩阵分解
通过一个矩阵分解去代替本来的embedding矩阵

参数共享
12层的attention层和全连接层层共享参数
全共享(attention层和全连接层都共享)是比单纯共享attention层的效果要差的,但是全共享d减少的参数实在太多了,所以作者采用的为全共享

SOP代替NSP
将负样本换成了同一篇文章中的两个逆序的句子

n-gram MASK
根据公式取1-gram、2-gram、3-gram的概率分别为6/11,3/11,2/11。越长概率越小 

5.ERINE 1.0

 Knowledge Integration
把MASK分成三部分
Basic-level Masking:与BERT一样
Entity-level Masking:把实体作为一个整体MASK,例如J.K.Rowling这个词作为一个实体,被一起【MASK】
Phrase-Level Masking:把短语作为一个整体MASK,如a series of作为一个短语整体,被一起【MASK】

Dialogue Language Model(DLM)
增加了对话数据的任务,多轮问答的数据,即可以是QQR、QRQ等等
把里面的单token、实体、短语【MASK】掉,然后预测它们
在生成数据的时,有一定几率用另外的句子替代里面的问题和答案,预测是否是真实的问答对

6.ERINE 2.0

连续多任务学习
策略一,Multi-task Learning,就是让模型同时学这3个任务,具体的让这3个任务的损失函数权重相加,然后一起反向传播
策略二,先训练任务1,再训练任务2,再训练任务3,这种策略的缺点是容易遗忘前面任务的训练结果,如最后训练出的模型容易对任务3过拟合
策略三:连续多任务学习,即第一轮的时候,先训练任务1,但不完全让他收敛训练完,第二轮,一起训练任务1和任务2,同样不让模型收敛完,第三轮,一起训练三个任务,直到模型收敛完

多任务学习,模型输入的时候额外多了一个Task embedding 

词法级别
Knowledge Masking Task:把一些字、短语、实体【MASK】掉,预测【MASK】词语。
Capitalization Prediction Task:预测单词是大写还是小写,大写出现在实体识别等,小写可用于其他任务。
Token-Document Relation Prediction Task:在段落A中出现的token,是否在文档的段落B中出现。

语言结构级别
Sentence Reordering Task:把文档中的句子打乱,识别正确顺序。
Sentence Distance Task:分类句子间的距离(0:相连的句子,1:同一文档中不相连的句子,2:两篇文档间的句子)

语句级别
Discourse Relation Task:计算两句间的语义和修辞关系。
IR Relevance Task:短文本信息检索关系,搜索数据(0:搜索并点击,1:搜素并展现,2:无关)

7.ELECTRA

Efficiently Learning an Encoder that Classifies Token Replacements Auucrately

Generator-Discriminator的架构
对一句话里面的token进行随机的【MASK】,然后训练一个生成器,对【MASK】掉的token进行预测,通常生成器不需要很大(原因在后面的实验部分有论证),生成器对【MASK】掉的token预测完后,得到一句新的话,然后输入判别器,判别器判断每个token,是否是原样本的,还是被替换过的。

权重共享
生成器和判别器的embedding参数共享,而且生成器input层和output层的embedding参数共享(想想为什么可以这样?因为生成器最后是一个全词表的分类,所以可以跟输入时embedding矩阵的维度一致,而判别器最后是一个二分类,所以不能共享输入时的embedding矩阵),其他参数不共享

8.XLNET

[1906.08237] XLNet: Generalized Autoregressive Pretraining for Language Understanding (arxiv.org)

PLM
Permutation Language Modeling
XLNet理解_xlnet模型是现有现有的语言模型(language model)中的( )类型-CSDN博客
预训练模型-XLNet - 知乎 (zhihu.com)
XLNet 详解(看不懂你来骂我)-CSDN博客

XLNet的基本做法是:对于输入序列[x1,x2,x3,x4],假设预测的单词为x3,位置在Position3。怎么在Position1和Position2的位置时看到Position4的信息呢?对序列中的4个单词进行随机排列,得到如图所示的4中示例情况。如果将[x2,x4,x3,x1]、[x1,x4,x2,x3]、[x4,x3,x1,x2]这3种排列作为模型的输入,那么x3就可以同时看到上文和下文的信息
把一部分预测词下文的单词排列在预测词的上文位置中,就同时看到了上文和下文的信息,但是形式上仍然是从左到右预测一个单词

令长度为T的序列为[1,2,…,T],ZT表示可能的排列序列,zt为第t个元素, z<t 表示排列 z∈ZT 的前 t−1 个元素

Two-Stream Self-Attention
最通俗易懂的XLNET详解-CSDN博客

g_{\theta}(x_{z_{<t}})表示由模型计算得到的上文表示,\theta 是模型的参数,x_{z_{<t}}表示在时间步 t 之前的输入数据,e(x)是输入x的嵌入表示。
h只包含内容,g包含位置

content representation

不包含位置信息,包含上下文和自身的信息

query representation
包含位置信息,只包含上下文信息,不包含自身的信息

最后我们看下总的计算过程,首先,第一层的查询流是随机初始化了一个向量即g_i^{(0)} = w,内容流是采用的词向量即h_i^{(0)} = e(x_i),self-attention的计算过程中两个流的网络权重是共享的,最后在微调阶段,只需要简单的把query stream移除,只采用content stream即可。

 集成Transformer-XL

片段循环机制
有一个长度为1000的序列,如果我们设置transformer的最大序列长度是100,那么这个1000长度的序列需要计算十次,并且每一次的计算都没法考虑到每一个段之间的关系,如果采用transformer-xl,首先取第一个段进行计算,然后把得到的结果的隐藏层的值进行缓存,第二个段计算的过程中,把缓存的值拼接起来再进行计算。该机制不但能保留长依赖关系还能加快训练,因为每一个前置片段都保留了下来,不需要再重新计算,在transformer-xl的论文中,经过试验其速度比transformer快了1800倍。

相对位置编码
在BERT等传统的Transformer模型中,位置编码是绝对的,即每个位置都有一个固定的编码,这个编码是基于其绝对位置的。对于序列中的每个单词,绝对位置编码提供了该单词在序列中的唯一标识。
这种编码方式在处理较长的序列时会遇到问题,尤其是在序列被拆分成片段时,因为绝对位置编码无法明确区分不同片段中的相同位置。

相对位置编码解决了绝对位置编码的局限性。它关注的是位置之间的相对关系而不是绝对位置。这使得模型能够更好地处理长序列和片段。

在Transformer-XL等模型中,引入了相对位置编码来捕捉序列中元素之间的相对距离,这样即使序列被拆分成多个片段,模型仍然能够保持对相对位置的感知。

  1. 位置编码的计算:

    • 给定两个位置 i 和 j,相对位置编码被表示为 sij。
    • 如果 i 和 j 属于同一个片段,则相对位置编码为 sij​=s+​。
    • 如果 i 和 j 不在同一个片段里,则相对位置编码为 sij=s−​,其中 s+​ 和 s−​ 是在训练过程中学习得到的编码。
  2. 计算注意力权重:

    • 在传统的Transformer中,注意力权重的计算公式是:

      其中 Q 是查询矩阵,K是键矩阵,V 是值矩阵,d是嵌入维度。

    • 引入相对位置编码后,计算方式有所调整。首先计算相对位置编码与查询向量的内积:

      其中 qi​ 是位置 i 的查询向量,b是一个需要训练的偏置量,Ssj​ 是相对位置编码。

    • 然后,将相对位置编码计算结果 aij与传统注意力权重的计算结果相加,得到最终的注意力权重。

xlnet:XLNet: Generalized Autoregressive Pretraining for Language Understanding - GitCode



http://www.kler.cn/a/305754.html

相关文章:

  • 移动开发(七):.NET MAUI使用RESTAPI实现查询天气笔记
  • 【C++】【算法基础】第k个数(分治法)
  • 软件著作权申请教程(超详细)(2024新版)软著申请
  • Kubernetes-编排工具篇-01-Kustomize与Helm对比
  • Gpt4.0最新保姆级教程开通升级
  • 购物车-多元素组合动画css
  • Ubuntu 24.04 配置 nginx + php-fpm
  • 异常冲突行为和危险识别系统源码分享
  • Rust使用dotenvy读取环境变量
  • 网络通信流程
  • 树和二叉树基本术语、性质
  • 劳特巴赫ICD调试器CMM调用烧录框架固件研究之C语言版本
  • GitHub每日最火火火项目(9.15)
  • 影刀RPA实战:网页爬虫之CSDN博文作品数据
  • 基于C#+SQL Server2008 开发三层架构(CS界面)图书管理系统
  • SQLmap使用请求包进行sql爆破
  • 鹏哥C语言自定义笔记重点(67-)
  • MySQL练手题--公司和部门平均工资比较(困难)
  • 【前端UI框架】VUE ElementUI 离线文档 可不联网打开
  • 后端面试经典问题汇总
  • MATLAB中的函数编写有哪些最佳实践
  • Python(PyTorch)和MATLAB及Rust和C++结构相似度指数测量导图
  • JS的事件以及常见事件的绑定
  • Win电脑使用Ollama与Open Web UI搭建本地大语言模型运行工具
  • Go 中 Gin 框架的使用指南
  • GIS 中的 3D 分析