BERT的初步了解

一、Bert是什么?

是当前深度学习中最常用的预训练模型

 

bert全称:Bidirectional Encoder Representation from Transformer 

解释一下:

1. 是由Transformer模型的子模块为基础构建的,bert的结构是来自Transformers模型的Encoder。Transformer的内部结构由self-Attention Layer和Layer Normalization的堆叠而产生。

Self-Attention Layer的出现原因:为了解决RNN、LSTM等常用于处理序列化数据的网络结构无法在GPU中并行加速计算的问题

2.Representation: 表征

  传统的表征模型有: Word2Vec 得到的语义单一,在不同语境得到的语义很容易出错;

  ELMO(contextualized word embedding)

  而bert的表征语义,运用的是多语义结合;例如:bank = = 银行+河堤+库

3.Bidirecrtional Encoder: 双向编码器

  摒弃了Seq2Seq结构,因为encoder能够做到前后向的表征,decoder只有前向关系,能够融合上 下文信息的深层双向语言表征。

 

encoder输入变化,在Token embedding 和 position embedding 之间加入了 segment embedding层。

token embedding 是对 单字进行编码, segment embedding是对 两个句子分隔编码, position embedding 是对单字位置编码

CLS分类上下文是否具有关联,SEP 是 分隔开两句话 的间隔符 也可以在结尾作为结束

如果是英文单词作为输入,进入模型前需要使用bert源码Tokenization进行对每一个单词进行分词,变为原型加上##分词结构
英文词汇表通过词根与词缀的组合来新增单词语义。分词就可以减少整体的词汇表长度;中文字符就不需要分词,仅需要空格隔开即可

position Embeddings :我们的网络结构没有RRN或者LSTM,因此我们无法得到序列位置信息,我们需要将构建一个position Embeddings。

 

self—Attention Layer 的内部运算逻辑:

query查询序列,key待查序列,value自身含义编码序列
      1.将Q*K矩阵乘积并scale 为了防止结果过大,除以他们维度的均方根
      2.将其带入到 softmax函数 得到概率分布,最后在和V矩阵相乘,得到 self-attention的输出
      3.(Q,K,V,)输入X,他们是X分别乘上WQ,WK,WV初始化权值矩阵得到的,在之后, 这三个权值矩阵会在训练中确定下来。

 

Layer Normalization :

 为什么self-Attention Layer 的output流经的是Layer normalization 而不是Batch Normalization?

BN 和LN 本质都是防止过拟合现象的发生,我的理解是 : BN是以单词纵向划分  LN是以句子横向划分,然而横向的话更能够提取语义。也有观点说的是:batch normalization 实验证明效果差所以使用的少。

预训练:

1.预训练过程就是是生成BERT模型的过程

2.输入X:利用字典将每一个字或者单词用数字表示,并装换成token embedding+segment embedding+position embedding  序列的长度为512或者1024,不足的用padding补充。

3.训练语料的总量:330亿语料

4.MLM(Mask Language Model) 掩码语义模型:有一个mask机制 保证训练的时候不要“抄答案”,而是预测计算,才能得到好的模型参数。在NSP 任务中,模型在输入时,会同时输入两个句子,并在前一个输入句子的最左边加上[CLS]的标签,[CLS]标签用来判断两个句子是否是上下文关系,输入的两个句子用[SEP](Separator)标签区分。

问题:会产生对mask敏感,对embedding的表征目的相矛盾,运用了这个mask模型可能会导致数据格式不匹配,提出了对数据8:1:1方法

将self-Attention Layer的输入随机mask15%的单词,在这15%中的单词被分为三组,一组是10%替换为其他词,第二组10%不改变,第三组80%替换mask (mask的意思是遮住,盖住,马赛克)

for index in mask indices:
# 80% of the time,replace with [MASK]
    if random.random() < 0.8:masked token = “[MASK]"
   else:
# 10% of the time, keep original
        if random.random() < 0.5:
            masked token = tokens[index]
# 10% of the time,replace with random word
        else:
            masked token = random.choice(vocab list)

5.NSP(next sentence prediction)下一句预测:

模型通过判断两个句子间是否互为上下句,学习句子间的关联关系。

6.预训练模型采用的是无监督学习,不需要人为的打标签,也就是不需要答案。需要的是大量的数据。

7.Bert模型的权重:经过大量的语料学习,得到的bert预训练模型,自带字典vocab.txt的每一个字或者单词都是768维的embedding表示。

8.预训练模型良好的迁移能力和特征提取能力,预训练的单身是为了解决,本来这个模型a,训练a的数据少,将数据输入训练容易过拟合,精度低下,但是呢,有一个训练好的模型b,通过了足够量的数据进行训练,已经训练好了,这是就可以用模型b中的参数初始化进行训练模型a,进而在运用数据a对模型a的训练。相当于站在巨人的肩膀上。

微调 fine-tune:

不选择使用:就是简单的把它当作文本特征提取器使用。

使用:在训练中微调bert权重,以达到适应我们任务的参数。

减小学习率、减少训练次数、固定底层参数(对底层进行保留,对接近应用层慢慢变化)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值