bert算法原理

更多机器学习、深度学习、NLP知识请参考我的个人网站: http://www.kexue.love
点我

一、背景

介绍bert之前我们先来看一下NLP发展的几个阶段。
如果说把人类完全攻克人工智能(AI)比作上天的话,那么现在阶段人类已经爬上天梯的第二个阶梯了。再次之前人类总共进行的三个阶段。

  • 第一阶段(地上爬):统计机器学习为代表
  • 第二阶段(爬上第一阶梯):word2vec为代表
  • 第三阶段(爬上第二阶梯):bert为代表
    NLP发展历程请参考我的博客:
    NLP发展历程
二、架构
1.架构图

在这里插入图片描述
我们只用到了transformer的Encode模块

在这里插入图片描述

2.参数

BERT-Base, Chinese: Chinese Simplified and Traditional, 12-layer, 768-hidden, 12-heads, 110M parameters

bert可以分为两个阶段,预训练和微调

三、预训练

参看预训练的输入数据:
在这里插入图片描述
预训练使用无监督的方式来训练语言模型。预训练通过两种方法来找目标函数。

1.Task #1: Masked Language Model

说bert是双向语言模型体现在这里了。

  • (1)目标函数:

P ( w i ∣ w 1 , . . . , w i − 1 , w i + 1 , . . . , w n ) P(w_i|w_1,...,w_{i-1},w_{i+1},...,w_n) P(wiw1,...,wi1,wi+1,...,wn) 求最大概率

注意:
1.ELMO模型用的是LSTM的目标函数:
P ( w i ∣ w 1 , . . . , w i − 1 ) + P ( w i ∣ w i + 1 , . . . , w n ) P(w_i|w_1,...,w_{i-1})+P(w_i|w_{i+1},...,w_n) P(wiw1,...,wi1)+P(wiwi+1,...,wn) 求最大概率
2.GPT模型用的是Transformer的目标函数:
???????

通过构建上面的目标函数训练模型,使用transformer的encode模型抽取特征,来训练模型,在pre-train阶段参数已经训练完成了。仅通过预训练模型我们可以得到两种文本向量:
(1).一句话中每个字的embedding,张量(L,D)
(2).一句话的embedding,张量(D)

  • (2)遮蔽算法

在BERT的实验中,15%的WordPiece Token会被随机Mask掉,我们只预测被屏蔽的单词。

缺点:尽管这可以使我们获得双向的预训练模型,但缺点是我们在预训练和微调之间造成了不一致,因为 [MASK] 词符不会在微调期间出现。

解决缺点: 为了缓解这种情况,实际上我们并不总是用 [MASK] 词符替换“被屏蔽”的单词。
(1)80% 的时间用 [MASK] 词符
(2)10% 的时间用随机词符
(3)10% 的时间维持第 i 词符不变。
例如:
80%: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

如何理解解决缺点的办法呢??引入噪音让泛化能力更强吗
1.为什么 15% 的 Token 不完全 MASK?如果只有 MASK,这个预训练模型是有偏置的,也就是只能学到一种方式,用上下文去预测一个词,这导致 fine-tune 丢失一部分信息。
2.加上 10% 的随机词和 10% 的真实值是让模型知道,每个词都有意义,除了要学习上下文信息,还需要提防每个词,因为每个词都不一定是对的,对于 Bert 来说,每个词都需要很好的理解和预测。

2.Task #2 :Next Sentence Prediction

任务是判断句子B是否是句子A的下文。如果是的话输出’IsNext‘,否则输出’NotNext‘。训练数据的生成方式是从平行语料中随机抽取的连续两句话,其中50%保留抽取的两句话,它们符合IsNext关系,另外50%的第二句话是随机从预料中提取的,它们的关系是NotNext的。这个关系保存在图4中的[CLS]符号中。

note:在源码里面 Task1和Task2,分别构建了两个函数来求损失,然后用两个损失的和来当做损失。

3. 输入表示

在这里插入图片描述
如图4,这三个词嵌入特征是:

  • 1.字嵌入[6]:token Embedding 在中文中会拆分成一个一个字;
  • 2.位置嵌入(Position Embedding):位置嵌入是指将单词的位置信息编码成特征向量,位置嵌入是向模型中引入单词位置关系的至关重要的一环。
  • 3.句子嵌入(Segment Embedding):用于区分两个句子,例如B是否是A的下文(对话场景,问答场景等)。对于句子对,第一个句子的特征值是0,第二个句子的特征值是1。
    在代码级别
4.特征抽取方法:transformer-encoder
四、微调

因为使用pre-training训练的模型参数,是面向所有的领域,词向量的粒度还是不够细,所以使用fine-tune来面向特定领域微调。如果把参数更新比作下山的话,pre-tune已经从珠穆朗玛峰下到了山底,fine-tune是在山底下的小土丘在进行下山。

根据微调的结果应用下游任务,微调可以应用两类任务到下游:

1.序列(句子)级任务

主要是获取句子级别embedding。
可以应用到:分类、判断句子是否相似

2.词符级任务

主要是获取字、词级别embedding
可以应用到:NER、问答

以下为bert技术点

三、bert的优缺点
1.缺点
  • bert论文预训练、xlnet论文提到了bert的第一个缺点:
    尽管这可以使我们获得双向的预训练模型,但缺点是我们在预训练和微调之间造成了不一致,因为 [MASK] 词符不会在微调期间出现。 为了缓解这种情况,实际上我们并不总是用 [MASK] 词符替换“被屏蔽”的单词。 训练数据生成器随机选择词符位置的 15% 进行预测。 如果选择第 i 个词符,我们替换这第 i 个词符为(1)80% 的时间用 [MASK] 词符(2)10% 的时间用随机词符(3)10% 的时间维持第 i 词符不变。
  • xlnet论文摘要提到第二个缺点:
    BERT 忽视了掩码位置之间的依赖关系
  • bert没有考虑词性,句法分析

参考文献:
1.https://yiyibooks.cn/nlp/bert/main.html

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值