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


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

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

相关文章

替换传统数据处理平台,TDengine 与华风数据达成合作

在全球能源转型的大背景下&#xff0c;新能源产业正迎来前所未有的发展机遇。随着国家对可再生能源的政策支持和市场需求的不断增长&#xff0c;风电、光伏和储能等新能源项目如雨后春笋般蓬勃发展。然而&#xff0c;随之而来的数据处理与管理挑战也日益凸显。面对海量的设备运…

构建常态化安全防线:XDR的态势感知与自动化响应机制

当前&#xff0c;网络安全威胁日益复杂多变&#xff0c;企业正面临前所未有的严峻挑战。为有效应对这些挑战&#xff0c;态势感知与自动化响应机制在提升网络安全运营效率与防御效果中扮演着至关重要的角色。它们能够实时监测网络状态&#xff0c;智能分析潜在威胁&#xff0c;…

Spring Cloud之二 微服务注册

1&#xff1a;Intellij 新建服务 user-service 2&#xff1a;pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"…

[leetcode-python]杨辉三角2

给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIndex 1 输出: [1,1]提示…

如何将 Electron 项目上架 Apple Store

前言 Electron 是一个开源框架,它允许开发者使用 Web 技术(HTML、CSS 和 JavaScript)来构建跨平台的桌面应用程序。 Electron 应用程序可以运行在 Windows、macOS 和 Linux 上,为用户提供了一种统一的方式来开发和维护软件。 本文将探讨如何将 Electron 构建的桌面应用程…

CTF——简单的《WEB》

文章目录 一、WEB1、easysql2、baby_web3、baby_sql4、upload_easy5、easygame拓展1.1拓展1.2 6、ht_ssti7、包容乃大 一、WEB 1、easysql 题目描述&#xff1a; sql注入漏洞 1.常用的sql注入测试语句 2.sql注入bypass 解题思路 这边提示基本给的也很完整的&#xff0c;不…

【Linux】Linux介绍及CentOS虚拟机环境搭建

内容大纲介绍 文章目录 内容大纲介绍1.计算机简介2.Linux系统介绍3.虚拟化软件介绍4.Linux环境搭建5.扩展_虚拟机的快照6.Linux的目录介绍 1.计算机简介 概述 全称叫电子计算机, 英文名叫Computer, 俗称叫: 电脑, 简称叫: PC, 就是有硬件和软件组成的电子设备. 组成 计算机硬件…

QGis二次开发 —— 3、程序加载栅格tif与矢量shp文件可进行切换控制,可进行导出/导入工程(附源码)

效果 功能说明 软件可同时加载.tif栅格图片与.shp矢量图片、加载图片后可进行自由切换查看图层、可对加载的图片进行关闭 关闭后清空图层、可对加载的图片进行导出.qgs的QGIS工程、可对.qgs的QGis工程导入并导入后可进行自由切换查看图层。 源码 注意: 在加载tif栅格文件后会在…

华为 HCIP-Datacom H12-821 题库 (16)

1.需要题库的小伙伴至博客最下方添加微信公众号关注后回复题库 2.有兴趣交流IT问题的小伙伴微信公众号回复交流群&#xff0c;加入微信IT交流群 1. OSPF 邻居关系建立出现故障&#xff0c;通过 display ospf error 命令来检查&#xff0c;输出结果如图所示&#xff0c;根据图中…

OceanBase 4.x 存储引擎解析:如何让历史库场景成本降低50%+

据国际数据公司&#xff08;IDC&#xff09;的报告显示&#xff0c;预计到2025年&#xff0c;全球范围内每天将产生高达180ZB的庞大数据量&#xff0c;这一趋势预示着企业将面临着更加严峻的海量数据处理挑战。随着数据日渐庞大&#xff0c;一些存储系统会出现诸如存储空间扩展…

【Python 千题 —— 算法篇】寻找最长回文子串

Python 千题持续更新中 …… 脑图地址 &#x1f449;&#xff1a;⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目背景 回文串是指一个字符串从左到右和从右到左读都是一样的。寻找一个字符串中的最长回文子串是许多经典算法问题之一&#xff0c;广泛应…

使用docker安装jenkins,然后使用jenkins本地发版和远程发版

使用docker安装jenkins&#xff0c;然后使用jenkins本地发版和远程发版 1、安装docker 1.安装必要的一些系统工具 sudo yum install docker-ce 2.添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3.更新…

DAY74

#ifndef WIDGET_H #define WIDGET_H#include <QWidget>#include <QPainter> //画家类 #include <QTimer> //定时器类 #include <QTime> //时间类QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : …

风控——贷中管理介绍

一、概念介绍 贷中管理&#xff0c;指从贷款发放之日起&#xff0c;至贷款本息收回日期为止的贷款管理&#xff0c;贷中管理策略也集中在贷款发放后的管理和监控阶段&#xff0c;其目的是确保贷款资金的安全和有效使用&#xff0c;贷中预警和贷中调额在贷中管理中至关重要。 …

STMCuBeMX新建项目的两种匪夷所思的问题

错误一、保存地址名中有中文 错误&#xff1a;error1-haveCHinese_有中文\error1-haveCHinese_有中文.axf: error: L6002U: Could not open file error1-havechinese_???\stm32f1xx_it.o: No such file or directory 解决方法&#xff1a;重新导出&#xff0c;并且不要用中文…

Leetcode 701-二叉搜索树中的插入操作

给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意&#xff0c;可能存在多种有效的插入方式&a…

c# Avalonia 架构开发跨平台应用

Avalonia&#xff0c;读&#xff1a;阿瓦隆尼亚 由于以前的c#开发的windows平台项目想移植到信创平台&#xff08;UOS,Kylin)上&#xff0c;起初想用python重写&#xff0c;后来发现了这个Avalonia,用这个改动起来工作相对较少于是就先了解一下。 官网Avalonia Docs | Avalon…

贪心-单调递增的数字

给定一个非负整数 N&#xff0c;找出小于或等于 N 的最大的整数&#xff0c;同时这个整数需要满足其各个位数上的数字是单调递增。 &#xff08;当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。&#xff09; 示例 1: 输入: …

如何显示Dialog窗口

文章目录 1. 概念介绍2. 使用方法2.1 Overlay效果2.1 Dialog效果 3. 示例代码4. 内容总结 我们在上一章回中介绍了"使用get显示snackBar"相关的内容&#xff0c;本章回中将介绍使用get显示Dialog.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在…

又一款强大好用的Shell脚本项目,支持Bash,Sh、Dash、Ksh等,甚至可以在编辑器中直接用,程序员必备!(附源码)

作为一个程序员&#xff0c;肯定经常都要和shell脚本打交道&#xff0c;Shell脚本可以帮我们自动化各种任务&#xff0c;但也经常有格式错误、拼写错误、逻辑错误等等麻烦&#xff0c;而且它不会告诉你错在哪里&#xff01; 今天就给大家分享一个超级实用的开源项目 - ShellCh…