搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
Cpp五条
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
安卓8将取消java_程序员要拥抱变化,聊聊Android即将支持的Java 8
2
联邦学习概要_联邦学习必须全部客户端完成训练吗
3
探索代码理解与生成领域的人工智能前沿_ai代码阅读
4
揭秘VSCode魔法工具箱:HTML5 & CSS3 超强插件集合 + Css Reset与Normalize.css的终极对决_vscode css插件
5
C++之哈希表的使用_c++哈希表用法
6
Android OpenMAX(五)高通OMX Core实现
7
java实现栈(数组和链表两种实现方式)_java stack数组和链表
8
牛客网项目——项目开发(一):搭建环境_牛客博客项目
9
融合交叉注意力的突发事件多模态中文反讽识别模型_中文反讽数据集
10
微信小程序image组件图片设置最大宽度 宽高自适应_小程序全屏图片大小
当前位置:
article
> 正文
NLP中BERT模型详解_nlp bert
作者:Cpp五条 | 2024-05-15 14:04:38
赞
踩
nlp bert
标题
NLP中BERT模型详解
谷歌发表的论文为: Attention Is ALL You Need 论文地址:[添加链接描述](https://arxiv.org/pdf/1706.03762.pdf)
1
2
3
1 BERT原理讲解简介
BERT:双向Transformer的Encoder。英文解释为:Bidirectional Encoder Representation from Transformers。由此可见Transformer是组成BERT的核心模块,而Attention机制又是Transformer中最关键的部分,因此,Transformer和Attention是BERT关注的两个核心点。下面我们从Attention机制开始,介绍如何利用Attention机制构建Transformer模块,在此基础上,用多层Transformer组装BERT模型。
1.1 Attention与selfattention机制
Attention机制作用是为了让计算机
有权重的
关注自己感兴趣的特征,目的是为了关注不同的输入对输出的影响。Attention机制主要涉及到三个概念:Query、Key和Value。
可以描述为将一个查询(query)和一组键值对(key-value)映射到一个输出(output),这里的query,keys,values和output都是向量。output是通过values的加权求和来计算的,这里的权重是通过一个query和对应的key的兼容函数来计算的。
self-attention是BERT的重要思想,其与位置编码结合,解决了文本数据的时序相关性的问题,从而一举结束了依靠RNN、LSTM、GRU等之前一直用来解决时序问题的网络模型。self-attention通俗的说就是信息向前传播时动态的计算权重的一种方式,与CNN常见的MaxPooling、MeanPooling不同的是,attention模型是经过训练,当不同信息传入时,自动的调整权重的一种结构,模型如下图所示:
x1,x2,x3,x4 代表的是经过embedding的4条时序文本信息,首先将4条信息加上位置向量,得到a1,a2,a3,a4,这样做的目的上文已经说过,是为了获取文本的时序相关性。
对每条信息分配三个权重WQ,WK,WV分别与a1,a2,a3,a4相乘后形成3个矩阵Q,K,V也就是上图的qi,ki,vi。
Q=Linear(a1)=aiWQK=Linear(a1)=aiWKV=Linear(a1)=aiWV
3) 将q1分别与k1,k2,…,ki点乘,得到α1,i,再有softmax的计算公式,计算得α^1,i。
α1,i=q1∗kiα^1,i=exp(α1,i)/∑jexp(α1,j)
4)最后按照softmax输出的权重对V进行加权,计算得b1。使用同样的方法计算得b2,b3,…,bi。将b1,b2,b3,…,bi进行合并,完成self-attention。
b1=∑iα
1,i∗vi
1.2 BERT优点
transformer舍弃了RNN的循环式网络结构,完全基于注意力机制来对一段文本进行建模。核心思想是去计算一句话中的每个词对于这句话中所有词的相互关系,然后认为这些词与词之间的相互关系在一定程度上反应了这句话中不同词之间的关联性以及重要程度。再利用词语之间相互关系的重要性(权重)获取每个词的表述。通过这种方式可以表达词语之间的相互联系:
Transformer通过对输入的文本不断进行这样的注意力机制层和普通的非线性层交叠来得到最终的文本表达。
2 .模型框架
BERT是一个无监督的NLP与训练模型,结构上是Transformer的编码部分,每个block主要由多头self-Attention、标准化(Norm)、残差连接、Feed Fordawrd组成。在项目中主要分为模型训练和微调参两个阶段。因模型是无监督学习,因此可以选取开源数据即可,同时微调重要参数有利于获得更好的训练和预测结果。其结构如下所示:
以上是BERT的整体结构,Input输入的是文本数据,经过Embedding加上位置向量Positional Encoding。Multi-Head Atention为多头的self-Attention,实际上就是将self-attention的Q、K、V均分成n份,分别进行计算。Add&Norm为残差计算和标准化;Feedward为全连接层,进行前向传播。其中Nx为基本单元的个数,是可以条调整的超参数。
上图左侧为Transformer的编码部分,右侧为Transformer的解码部分。左侧的编码部分包括输入,添加位置编码,以self-Attention、Add&Norm、Feed Fordward的block。编码器将一个用符号(一般是向量)表示的输入序列(x1,…,xn)映射到一个连续的表征序列z=(z1,…,zn)。解码器拿到z后,生成一个符号表示的输出序列(y1,…,yn),这里是每个时间步生成一个yi,i表示从1到n任意一个数字。每一步,模型都自动消费前一步生成的符号,比如生成y2的时候会以y1作为额外的输入。
1 encoder编码其和decoder解码器
编码器(encoder):
编码器由6个相同的层堆叠而成。每一层包含2个子层。第一个子层是multi-head self-attention 机制(),第二个子层是一个简单的,位置分明的全连接前馈网络。我们在每个子层都使用了一个残差连接(residualconnection),并跟上一个归一化层(normalization layer)。也就是说,每个子层的输出是LayerNorm(x + Sublayer(x)),其中的Sublayer(x)表示各子层自己实现的函数,比如self-attention层有自己的一套实现,而feed-forward层也有自己的实现。
2.2解码器(decoder):
解码器也是由6个相同的层堆叠而成。每一层除了和编码器那样有两个子层外,解码器插入了第三个子层,用于在编码器最后的输出上执行multi-head attention。和编码器一样,我们也在解码器的各子层中引入了残差连接,并跟上一个归一化层。编码器的self-attention子层的注意力机制是关联到当前处理词和其他词的,因为输入的序列的所有词都是明确的,而解码器的self-attention子层只关联到当前处理词之前的词,因为当前处理词还没预测出来,之后的词当然更还没预测出来。所以解码器的self-attention子层的当前处理位置的后续位置都是用-inf来标识的,又称之为mask。
整个网络表现模块流程图如下:
2.3 位置编码
位置编码是用来捕获文本之间的时序关联性的。如果没有位置编码,文本字、词之间位置可以放置,从而造成语义关联不清,失去文本的实际意义。例如:”今日湖北随州发生特大暴雨,造成二十余人遇难“。其中湖北和随州关联最为紧密,如果没有位置编码,就无法表达这种关联性。NLP文本处理时,位置更近的文本一般相关性更大,所以将位置编码融入到数据中是很有必要的。需要要说明的是与Bert这种全部基于Attention不同的是,之前基于RNN的模型在模型结构上已经可以将这种时序信息考虑在内,但RNN如同串联方式,而bert好比并联方式,在处理大数据时,失效更高。
在具体处理方式上,采用的是Embedding+Positional的方法,将数据之间的关联性融入到数据中。Embedding是嵌入到相应维度的文本数据,Positional在论文中使用了sine和cosine函数的线性变换来提供模型的位置信息,公式如下:
PE(pos,2i)=sin(pos/100002i/dmodel)
PE(pos,2i+1)=cos(pos/100002i/dmodel)(1)
在self-attention的结构中,在对每维数据计算权重时,是采用点积的形式,本质上就是计算向量之间的相关性。而位置编码将临近的数据加上频率接近的位置编码,就是增加了相邻数据的相关性。下图是位置编码向量的热图,可以看出距离越近,频率就更加接近。
BERT预训练结构
3.1 Maskeed LM
BERT的作者提出了采用MaskLM的方式来训练语言模型。随机地将输入文本选一些要预测的词,
然后用一个特殊的符号来代替它们
。尽管模型最终还是会看到所有位置上的输入信息,但由于需要预测的词已经被特殊符号代替,所以模型无法事先知道这些位置上是什么词,这样就可以让模型根据所给的标签去学习这些地方该填的词了,好比初高中学习英语过程中的选词填空,如下所示。
这么做的好处在于后续微调任务中语句中并不会出现特殊符号标记,同时在预测一个词汇时,模型并不知道输入对应位置的词汇是否为正确的词汇,这就迫使模型更多地依赖于上下文信息去预测词汇,并且赋予了模型一定的纠错能力。
3.2 NextSentence Prediction
NextSentence Prediction意思是:给定一篇文章中的两句话,判断第二句话在文本中是否紧跟在第一句话之后,如下图所示,好比高考或这考研当中文章选后顺序排列,哪一家在前哪一句灾后,其模型结构如下:
BERT模型训练
4.1 训练方法为:作者随机遮住15%的单词作为训练样本。
(1)其中80%用masked token来代替。
(2)10%用随机的一个词来替换。
(3)10%保持这个词不变。
作者在论文中提到这样做的好处是,编码器不知道哪些词需要预测的,哪些词是错误的,因此被迫需要学习每一个token的表示向量。另外作者表示,每个batchsize只有15%的词被遮盖的原因,是性能开销。双向编码器比单项编码器训练要慢。
4.2 微调参数
(1)256个句子作为一个batch,每个句子最多512个token。
(2)迭代100万步。
(3)总共训练样本超过33亿。
(4)迭代40个epochs。
(5)用adam学习率, 1 = 0.9, 2 = 0.999。
(6)学习率头一万步保持固定值,之后线性衰减。
(7)L2衰减,衰减参数为0.01。
(8)drop out设置为0.1。
(9)激活函数用GELU代替RELU。
(10)Bert base版本用了16个TPU,Bert large版本用了64个TPU,训练时间4天完成。
4.3 微调阶段根据不同任务使用不同网络模型。在微调阶段,大部分模型的超参数跟预训练时差不多,除了batchsize,学习率,epochs。
训练参数:
Batch size: 16, 32
Learning rate (Adam): 5e-5, 3e-5, 2e-5
Number of epochs: 3, 4
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/Cpp五条/article/detail/573167
推荐阅读
article
本地加载
hugging
face
模型
:
Bert
...
找了个hf的镜像站,把config.json和pytorch_model.bin两个文件进行下载下来,
模型
文件uncas...
赞
踩
article
自然语言
处理
(
NLP
)-
BERT
实战-
模型
微调
-情感分析...
本篇我们使用公开的微博数据集(weibo_senti_100k)进行训练,此数据集已经进行标注,0: 负面情绪,1:正面...
赞
踩
article
bert
-
NER
转化成
onnx
模型...
BERT-
NER
转化成
onnx
模型
bert
-
NER
转化成
onnx
模型 ...
赞
踩
article
最新
NLP
进阶
,
Bert
+
BiLSTM
情感分析实战
,
Python
高级
面试
2024...
别在网上瞎学了
,
我最近也做了一些资源的更新
,
只要你是我的粉丝
,
这期福利你都可拿走。我先来介绍一下这些东西怎么用
,
文末抱走...
赞
踩
article
Bert
+
LSTM
+
CRF
命名实体识别
pytorch
代码
详解...
Bert
+
LSTM
+
CRF
命名实体识别从0开始解析源
代码
。理解原
代码
的逻辑,具体了解为什么使用预训练的bert,bert...
赞
踩
article
计算
Bert
+
LSTM
+CRF实现的ner中的参数量有多少_
tensorflow2
bert
lst...
计算
bert
参数量_
tensorflow2
bert
lstm
crf
tensorflow2
bert
lstm
crf
...
赞
踩
article
bert
+
lstm
+
crf
做实体识别...
https://github.com/macanv/BERT-BiLSTM-CRF-NERhttps://github....
赞
踩
article
命名实体识别
NER
探索(5)
Bert
+
BiLSTM
+
CRF
模型
实战应用_
bert
-
bilstm
-c...
系列文章目录 命名实体识别
NER
探索(1) https://duanzhihua.blog.csdn.net/artic...
赞
踩
article
【NLP_命名实体识别】
Bert
/Al
bert
+
CRF
模型实现_
bert
+
crf
...
模块调用2021/3/8周一:基于模块调用部分(如下)bug,重装Anaconda与Tensorflow,解决bug。i...
赞
踩
article
bert
+
lstm
+
crf
ner实体识别_
bert
+
crf
实体识别
tensorflow
...
参考:https://github.com/BrikerMan/Kashgarihttps://eliyar.biz/n...
赞
踩
article
bert
微调
合集...
暂时没有时间总结,先贴上几个还不错的帖子。
bert
微调
合集 暂时没有时间总结,先贴上几个还不...
赞
踩
article
bert
应知应会
_
bert
公式...
1. BERT 的基本原理是什么BERT的全称是Bidirectional Encoder Representation...
赞
踩
article
深度
学习
基础 |
NLP
大魔王 ·
BERT
...
作者|Chilia整理|NewBee
NLP
首先,请阅读先修知识:
深度
学习
基础 | 从Language Model到R...
赞
踩
article
11
-
NLP
之
Bert
介绍和简单示例
_
nlp
库
bert
...
Bert
简介
_
nlp
库
bert
nlp
库
bert
文章目录...
赞
踩
相关标签
bert
人工智能
深度学习
自然语言处理
算法
ner
onnx
python
lstm
tensorflow
1024程序员节
nlp
机器学习