NLP之不简单笔记:啥是BERT

1. what is BERT?

啥是bert呢?

  • BERT(Bidirectional Encoder Representation from Transformers):即 Transformers的编码器。

啥是Transformers呢?

  • seq2seq model with “self-attention”:即拥有自注意力机制的seq2seq模型。

啥是seq2seq model呢?

  • seq2seq是RNN的变种,是一种N VS M(就是输入跟输出的维度可以不同的意思)的模型,这种结构又叫Encoder-Decoder模型,也可以称之为seq2seq模型,常用于机器翻译等。

Transformers的结构图如下所示,而BERT就是左边的encoder部分。
在这里插入图片描述

2. Structure

(下面的介绍主要贴上李宏毅老师的ppt截图,写的很好,我就不重新画了,hiahiahia~~~)

2.1 self-attention

在这里插入图片描述
流程:

  • step1:输入x1, x2, x3, x4 ,记为X
  • step2:经过编码得到a1, a2, a3, a4,记为I
  • step3:a1, a2, a3, a4通过self-attention得到输出b1, b2, b3, b4,记为O

self-attention具体计算过程
在这里插入图片描述

  1. X经过编码得到I;

  2. I通过三个权值矩阵,分别生成q1, q2, q3, q4(记为Q),k1, k2, k3, k4(记为K), v1, v2, v3, v3(记为V);
    Q:用于匹配特征
    K:被匹配的特征
    V:被提取的特征

  3. 拿每个q去对每个k做attention(除以根号d是为了消除维度大小对点积的影响)。
    以q1为例:
    1) q1跟k1, k2, k3, k4分别作点积,得到 α 11 \alpha11 α11 α 12 \alpha12 α12 α 13 \alpha13 α13 α 14 \alpha14 α14
    在这里插入图片描述

    2) α 11 \alpha11 α11 α 12 \alpha12 α12 α 13 \alpha13 α13 α 14 \alpha14 α14经过softmax得到\dot{x},得到, α ′ 11 \alpha'11 α11 α ′ 12 \alpha'12 α12 α ′ 13 \alpha'13 α13 α ′ 14 \alpha'14 α14(帽子符号不知道咋打,用’替代吧-_-||);
    在这里插入图片描述

    3) α ′ 11 \alpha'11 α11 α ′ 12 \alpha'12 α12 α ′ 13 \alpha'13 α13 α ′ 14 \alpha'14 α14再分别跟v1, v2, v3, v4相乘求和,得到b1;
    在这里插入图片描述
    同理,得到b2, b3, b4
    在这里插入图片描述
    总而言之,self-attention其实就是一堆矩阵的运算,所以可用GPU加速。
    在这里插入图片描述

2.2 multi-head

多头机制过程:

1. 编码后的I,跟多个权值矩阵运算,生成多个q, k, v

在这里插入图片描述
2. 多个头就能生成多个b
在这里插入图片描述
3. 再把这些b concat起来,跟一个全连接层相乘(concat之后维度变多了,这样做起到一个降维效果,保持维度一致),得到最后的b。

在这里插入图片描述
(multi-head机制可以理解为,用不同的头去提取不同的信息,类似与CNN中的不同卷积核)

2.3 Positional encoding and Positional embeddings

从2.1节中可以看出,self-attention的计算中,每个b的计算是并行处理的,每个b的同时得出的,这样子就少了位置信息。(每个位置都是同时计算的)。

因此Transformers的作者就引入了位置信息,BERT虽然是Transformers的Encoder部分,但是两者的位置信息计算方法是不同的。

Transformers中利用positional encoding计算:
在这里插入图片描述

BERT使用学习的Positional Embeddings
在这里插入图片描述
打印bert结构,可以看到位置参数为512 * 768 = 393216,即每个位置用一个768维的向量表示。
在这里插入图片描述

3. Pre-training and finetune

3.1 pre-training

pre-training主要有两个机制:Masked LM 和 Next Sentence Prediction(NSP)

  • Masked LM
  1. 句子中的词汇有15%的可能性被mask掉
  2. 预测被mask掉的词汇
    在这里插入图片描述
  • Next Sentence Prediction
  1. 输入两个句子,判断两个句子是否关联
  2. [CLS]为分类向量符,[SEP]句子分隔符
    在这里插入图片描述

3.2 fine-tune

在这里插入图片描述
(a)输入两个句子,利用[CLS]输出的特征,接个分类器,判断两个句子的关系;
(b)单个句子分类,输入一个句子,也是利用[CLS]输出的特征,接个分类器,判断该句子的类别。具体应用如情感分类,又如淘宝评论是好评还是差评等;
(c)问答任务,其实就是阅读理解,输入一个问题,和一段文本,从文本中找出该问题的答案。具体做法是,找到答案在文本中的起始位置和结束位置;
(d)单个句子的词性判断,具体应用如命名实体识别等。

4. Example and practise

这一部分主要通过代码的实际操作,来加深对BERT的理解。
主要环境:keras,keras_bert

4.1 下载bert的预训练中文模型

在这里插入图片描述

4.2 single sentence

假设输入的是:广州
在这里插入图片描述
变量说明:
token_ids:就是每个字在字典中(vocab.txt)的位置;
segment_ids: 表示输入的句子是属于第一个句子还是第二个句子,第一个句子则用0表示,第二个句子用1表示;
[CLS][SEP]:对于输入,bert会在文本前插入[CLS]分类符,尾部加入[SEP]分隔符,这两个符号在字典中也有对应的索引。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.3 two sentences

假设输入的是两个句子:“广州” 和 “你好”
同理,可得:
在这里插入图片描述

4.4 总结

以输入“广州”为例进行说明:
(1)在输入文本中,插入[CLS]和[SEP]符;
(2)转换为token_ids和segment_ids;
(3)token_ids和segment_ids再转换为token_embeddings、seg_embeddings,再结合位置信息postion_embeddings,三者的维度一致,进行相加,得到上面2.1节所说输入a1, a2, a3, a4(即I);
(4)I经过self-attention和multi-head得到输出b1, b2, b3, b4,在经过ADD、NORM、FEED-FORWARD操作,得到特征1,2,3,4,如下图所示黄色部分;
(5)1,2,3,4特征分别为[CLS]、广、州、[SEP]对应的特征。

这就是BERT的计算过程,把文本转换成了特征。有了特征之后,就可以利用这些特征去完成各自需要的任务了。

在这里插入图片描述
结束

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值