5. BERT算法原理解析
1. 语言模型
2. Attention Is All You Need(Transformer)算法原理解析
3. ELMo算法原理解析
4. OpenAI GPT算法原理解析
5. BERT算法原理解析
6. 从Encoder-Decoder(Seq2Seq)理解Attention的本质
1. 前言
在本文之前我们已经介绍了ELMo和GPT的两个成功的模型,今天给大家介绍google新发布的BERT模型。BERT来头可不小,其性能超越许多使用任务特定架构的系统,刷新了11项NLP任务的当前最优性能记录。
2. BERT原理
BERT模型的全称是Bidirectional Encoder Representations from Transformers,它是一种新型的语言模型。之所以说是一种新型的语言模型,是因为它通过联合调节所有层中的双向Transformer来训练预训练深度双向表示。
想深入了解BERT模型,首先应该理解语言模型。预训练的语言模型对于众多自然语言处理问题起到了重要作用,比如SQuAD问答任务、命名实体识别以及情感识别。目前将预训练的语言模型应用到NLP任务主要有两种策略,一种是基于特征的语言模型,如ELMo模型;另一种是基于微调的语言模型,如OpenAI GPT。这两类语言模型各有其优缺点,而BERT的出现,似乎融合了它们所有的优点,因此才可以在诸多后续特定任务上取得最优的效果。
2.1 BERT模型总体结构
BERT是一种基于微调的多层双向Transformer编码器,其中的Transformer与原始的Transformer是相同的,并且实现了两个版本的BERT模型,在两个版本中前馈大小都设置为4层:
lBERTBASE:L=12,H=768,A=12,Total Parameters=110M
lBERTLARGE:L=24,H=1024,A=16,Total Parameters=340M
其中层数(即Transformer blocks块)表示为L,隐藏大小表示为H,自注意力的数量为A。
2.2 BERT模型输入
输入表示可以在一个词序列中表示单个文本句或一对文本(例如,[问题,答案])。对于给定的词,其输入表示是可以通过三部分Embedding求和组成。Embedding的可视化表示如下图所示:
token Embeddings表示的是词向量,第一个单词是CLS标志,可以用于之后的分类任务,对于非分类任务,可以忽略词向量;
Segment Embeddings用来区别两种句子,因为预训练不只做语言模型还要做以两个句子为输入的分类任务;
Position Embeddings是通过模型学习得到的。
2.3 BERT模型预训练任务
BERT模型使用两个新的无监督预测任务对BERT进行预训练,分别是Masked LM和Next Sentence Prediction:
2.3.1 Masked LM
为了训练深度双向Transformer表示,采用了一种简单的方法:随机掩盖部分输入词,然后对那些被掩盖的词进行预测,此方法被称为“Masked LM”(MLM)。预训练的目标是构建语言模型,BERT模型采用的是bidirectional Transformer。那么为什么采用“bidirectional”的方式呢?因为在预训练语言模型来处理下游任务时,我们需要的不仅仅是某个词左侧的语言信息,还需要右侧的语言信息。
在训练的过程中,随机地掩盖每个序列中15%的token,并不是像word2vec中的cbow那样去对每一个词都进行预测。MLM从输入中随机地掩盖一些词,其目标是基于其上下文来预测被掩盖单词的原始词汇。与从左到右的语言模型预训练不同,MLM目标允许表示融合左右两侧的上下文,这使得可以预训练深度双向Transformer。Transformer编码器不知道它将被要求预测哪些单词,或者哪些已经被随机单词替换,因此它必须对每个输入词保持分布式的上下文表示。此外,由于随机替换在所有词中只发生1.5%,所以并不会影响模型对于语言的理解。
2.3.2 Next Sentence Prediction
很多句子级别的任务如自动问答(QA)和自然语言推理(NLI)都需要理解两个句子之间的关系,譬如上述Masked LM任务中,经过第一步的处理,15%的词汇被遮盖。那么在这一任务中我们需要随机将数据划分为等大小的两部分,一部分数据中的两个语句对是上下文连续的,另一部分数据中的两个语句对是上下文不连续的。然后让Transformer模型来识别这些语句对中,哪些语句对是连续的,哪些对子不连续。
2.4 模型比较
ELMo、GPT、BERT都是近几年提出的模型,在各自提出的时候都取得了不错的成绩。并且相互之间也是相辅相成的关系。
3个模型比较如下:
再往前看,在NLP中有着举足轻重地位的模型和思想还有Word2vec、LSTM等。
Word2vec作为里程碑式的进步,对NLP的发展产生了巨大的影响,但Word2vec本身是一种浅层结构,而且其训练的词向量所“学习”到的语义信息受制于窗口大小,因此后续有学者提出利用可以获取长距离依赖的LSTM语言模型预训练词向量,而此种语言模型也有自身的缺陷,因为此种模型是根据句子的上文信息来预测下文的,或者根据下文来预测上文,直观上来说,我们理解语言都要考虑到左右两侧的上下文信息,但传统的LSTM模型只学习到了单向的信息。
3. 总结
语言模型的每一次进步都推动着NLP的发展,从Word2vec到ELMo,从OpenAI GPT到BERT。通过这些发展我们也可以洞悉到,未来表征学习(Deep learning is representation learning)将会越来越多的应用到NLP相关任务中,它们可以充分的利用目前海量的数据,然后结合各种任务场景,去训练出更为先进的模型,从而促进AI项目的落地。
5. BERT算法原理解析的更多相关文章
- 2. Attention Is All You Need(Transformer)算法原理解析
1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...
- 3. ELMo算法原理解析
1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...
- 4. OpenAI GPT算法原理解析
1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...
- PhotoShop算法原理解析系列 - 像素化---》碎片。
接着上一篇文章的热度,继续讲讲一些稍微简单的算法吧. 本文来讲讲碎片算法,先贴几个效果图吧: 这是个破坏性的滤镜,拿美女来说事是因为搞图像的人90%是男人,色色的男人. 关于碎 ...
- PhotoShop算法原理解析系列 - 风格化---》查找边缘。
之所以不写系列文章一.系列文章二这样的标题,是因为我不知道我能坚持多久.我知道我对事情的表达能力和语言的丰富性方面的天赋不高.而一段代码需要我去用心的把他从基本原理-->初步实现-->优化 ...
- FastText算法原理解析
1. 前言 自然语言处理(NLP)是机器学习,人工智能中的一个重要领域.文本表达是 NLP中的基础技术,文本分类则是 NLP 的重要应用.fasttext是facebook开源的一个词向量与文本分类工 ...
- LRU算法原理解析
LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的. 现代操作系统提供了一种对主存的抽象概念虚拟内存,来对主存进行更好地管理.他将主存 ...
- 最全排序算法原理解析、java代码实现以及总结归纳
算法分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间非比较类排序:不通过 ...
- 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现
本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...
随机推荐
- 学机器学习,不会数据处理怎么行?—— 一、NumPy详解
最近学习强化学习和机器学习,意识到数据分析的重要性,就开始补Python的几个科学计算库,并总结到博客中.本篇博客中用到的代码在这里下载. 什么是Numpy? NumPy是Python数值计算最重要的 ...
- git一些实践命令,关于reabse和merge的区别在最后做了一个比较
git命令 一. 克隆,提交,拉取代码 1. 克隆,提交代码 git clone:远端仓库地址 git remote add upstream: 上游远端仓库地址(fork代码的原地址).添加上游远端 ...
- Java内存管理-初始JVM和JVM启动流程(二)
勿在流沙住高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇分享了什么是程序,以及Java程序运行的三个阶段.也顺便提到了Java中比较重要 ...
- Playmaker全面实践教程之playMaker编辑器
Playmaker全面实践教程之playMaker编辑器 playMaker编辑器 playMaker编辑器是制作状态机的主要视图,如图1-23所示.只有熟悉此视图,读者才能更加快捷的使用Playma ...
- C#如何打开一个窗体,同时关闭该窗体
- 洛谷P1265 公路修建(Prim)
To 洛谷.1265 公路修建 题目描述 某国有n个城市,它们互相之间没有公路相通,因此交通十分不便.为解决这一“行路难”的问题,政府决定修建公路.修建公路的任务由各城市共同完成. 修建工程分若干轮完 ...
- windows下配置 GNU的gdb调试功能
1.配置 修改环境变量(前提电脑中存在gdb.exe) 1. 我的电脑->属性->环境......在path那一项后面添加你DEV-C++ Bin目录的路径(gdb.exe所在目录),如: ...
- BZOJ4374 : Little Elephant and Boxes
设$f[i][j][k]$表示前$i$个物品买了$j$个,消耗$k$个钻石,最少花多少钱,可以通过简单的DP求出. 枚举拥有的钻石数以及最多能购买的物品数的下界,那么钱数的下界是定值. 将$n$个箱子 ...
- javascript中break与continue,及return的区别
a).在循环体中, break是跳出整个循环,不执行以后的循环语句: continue是结束本次循环语句,进入下一个循环: b). 在if判断句,结束该函数的执行时,用 return: c). 在函数 ...
- linux下自定义域名访问本机部署的应用
在linux系统下,用weblogic部署了两套应用,创建了两个虚拟主机,一个主机指向www.test1.com, 另一个虚拟主机指向www.test2.com. 一套应用指定一台虚拟主机. 修改/e ...