BERT学习笔记


BERT模型使用Transformer模型对输入序列的每一个token进行深层的embedding,并使用了2种预训练技巧。


输入

将3种embeddings求和作为模型输入:

Token Embeddings+Segment Embeddings+Position Embeddings

输入样例:

  • Token embeddings

采用WordPiece embeddings方法,对input_dis进行embedding

  • Segment Embeddings

对segment_ids进行embedding

  • Position embeddings

1*128*768的随机数(128为序列长度,768为维度),没有embedding table也没经过embedding_lookup计算。

 

 

模型

transformer模型

bert使用transformer模型中的encoder模块作为网络模型。

bert模型结构: L=12, H=768, A=12, Total Parameters=110M

L是layers层数(即12层Multi-Head Attention),H是hidden vector size(每层所使用的全连接维度), A是self-attention的“头数(self-attention 即multi-head attention),即multi-head attention由A个scaled dot-product attention的输出concat构成。

Attention模块

bert中的Attention模块为muti-head Attention,muti-head Attention由多个scaled dot-product attention的结果concat构成。

Scaled Dot-Product Attention中的Q、K、V

将embedding输入到参数分别为的全连接层,输出分别为Q、K、V。

      矩阵运算形式:                   

Scaled Dot-Product Attention计算过程

输入:embedding、Q、K、V

输出:Z

矩阵形式计算过程:

 

Muti-Head Attention

muti-head Attention由多个scaled dot-product attention的结果Z1、Z2... concat,经过全连接层输出Z

整体结构

图中Ei表示输入Token i的词嵌入,Ti表示经过模型之后的Token i结合上下文表示,在分类任务中,取序列前的标签上下文特征C经过Softmax来分类。

预训练

1. Mask LM

第一个任务是把一篇文章中,15% 的词汇遮盖,让模型根据上下文全向地预测被遮盖的词。假如有 1 万篇文章,每篇文章平均有 100 个词汇,随机遮盖 15% 的词汇,模型的任务是正确地预测这 15 万个被遮盖的词汇。通过全向预测被遮盖住的词汇,来初步训练 Transformer 模型的参数。

随机选择句子中15%的WordPiece tokens作为要mask的词

  • 80%的时间真的用[MASK]取代被选中的词。比如 my dog is hairy -> my dog is [MASK]
  • 10%的时间用一个随机词取代它:my dog is hairy -> my dog is apple
  • 10%的时间保持不变: my dog is hairy -> my dog is hairy

 

解释:为什么要以一定的概率保持不变呢? 这是因为刚才说了,如果100%都用[MASK]来取代被选中的词,那么在fine tuning的时候模型会有一些没见过的词。那么为啥要以一定的概率使用随机词呢?这是因为Transformer要保持对每个输入token分布式的表征,否则Transformer很可能会记住这个[MASK]就是"hairy"。至于使用随机词带来的负面影响,文章中说了,所有其他的token(即非"hairy"的token)共享15%*10% = 1.5%的概率,其影响是可以忽略不计的

2. Next Sentence Prediction

第二个任务是预测下一句是否连续。譬如从上述 1 万篇文章中,挑选 20 万对语句(总共 40 万条语句)。挑选语句对的时候,其中 10 万对语句,是连续的两条上下文语句,另外 10 万对语句,不是连续的语句。然后让 Transformer 模型来识别这 20 万对语句,哪些是连续的,哪些不连续。

预训练数据样例

预训练损失函数

total_loss = masked_lm_loss + next_sentence_loss

masked_lm_loss:

取模型池化前的输出,即encoded sequence tensor,shape为[batch_size, seq_length, hidden_size] 

对模型对输出序列做全连接,全连接的参数为网络中的embedding_table,,shape为[hidden_size,vocab_size]

之后经过softmax预测mask的词。

next_sentence_loss:

取模型池化后的输出,即encoded segment tensor,shape为[batch_size, hidden_size] ,经过softmax做2分类。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BERT linear是指在BERT模型的基础上添加一个线性层,并通过softmax函数将输出转化为类别。具体步骤如下:首先,预训练好BERT模型,可以使用填空题的数据进行预训练。然后,将训练样本输入整个网络,训练线性层的参数(BERT模型的参数固定)。这个过程可以看作是一个半监督问题,因为只有部分数据有标注。输出的类别与输入的长度一致,比如可以用于词性判断或判断两个句子之间的关系。通过BERT linear模型,可以进行文本分类任务,并取得比基础的BERT模型更好的效果。\[1\] \[2\] \[3\] #### 引用[.reference_title] - *1* [BERT(李宏毅课程)](https://blog.csdn.net/qq_40438523/article/details/121110628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [NLP实战 | BERT文本分类及其魔改(附代码)](https://blog.csdn.net/qq_27590277/article/details/127236825)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [《深度学习学习笔记(六)](https://blog.csdn.net/weixin_43135165/article/details/124288068)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值