写点什么

深入浅出解析 BERT 原理及其表征的内容

  • 2019-09-09
  • 本文字数:2681 字

    阅读完需:约 9 分钟

深入浅出解析BERT原理及其表征的内容


了解自然语言处理的同学,应该没有不知道 BERT 的;甚至连很多自然语言处理圈外的开发的同学,都知道这个模型的厉害。不得不佩服谷歌的影响力和营销水平,当然,也确实是它的效果有这么棒。


这里就不再说 BERT 当年是怎么样横扫各大 NLP 任务榜单的故事了。毕竟现在出了个 XLnet,各方面都比他强了一点点;而且,也开始有一些论文开始接 BERT 的短了。

BERT 是什么?

那我们言归正传,现在来看看 BERT 究竟是什么,有什么样的结构,如何进行预训练等。


BERT,全称是 Pre-training of Deep Bidirectional Transformers for Language Understanding。注意其中的每一个词都说明了 BERT 的一个特征。


Pre-training 说明 BERT 是一个预训练模型,通过前期的大量语料的无监督训练,为下游任务学习大量的先验的语言、句法、词义等信息。


Bidirectional 说明 BERT 采用的是双向语言模型的方式,能够更好的融合前后文的知识。


Transformers 说明 BERT 采用 Transformers 作为特征抽取器。


Deep 说明模型很深,base 版本有 12 层,large 版本有 24 层。


总的来说,BERT 是一个用 Transformers 作为特征抽取器的深度双向预训练语言理解模型

BERT 的结构


上图是 BERT 的模型结构,它由多层的双向 Transformer 连接而成,有 12 层和 24 层两个版本。BERT 中 Transformer 的实现与上一期讲的 Transformer 实现别无二致。


要理解 BERT,最主要在于它预训练时采取的方法,下面我们做一个详细的讲解。

BERT 预训练模式

(1) Input Representation


我们先看看,BERT 网络接受的输入是什么,如上图所示,BERT 接受的输入包括三个部分:


  1. 词嵌入后的 Token Embedding,每次输入总以符号[CLS]的 embedding 开始,如果是两个句子,则句之间用[SEP]隔开。

  2. 句子类别的符号

  3. Position Embedding,这个与 Transformer 中的一致。

  4. 上述三个向量相加,组成 BERT 的输入。

(2) Masked Language Model

那么,BERT 是通过什么样的任务进行训练呢?其中一个是 Masked Language Model。BERT 会在训练时遮住训练语料中 15%的词(实际的 MASK 机制还有一些调整),用符号[MASK]代替,通过预测这部分被遮住的内容,来让网络学习通用的词义、句法和语义信息。


那么,该怎么理解 Masked Language Model 呢?我们不妨回想一下高中阶段都做过的英语完形填空,我们在做完形填空题目的时候,为了填上空格中的词,常常需要不断的看空格词的上下文,甚至要了解整个段落的信息。有时候,有些空甚至要通过一些英语常识才能得到答案。通过做完形填空,我们能够学习到英语中很多的词义、句法和语义信息。BERT 的训练过程也类似,Masked Language Model 通过预测[MASK]代替的词,不断的“对比”上下文的语义,句法和词义信息,从而学到了大量相关的知识。


哈哈,不知道 BERT 的提出者们是不是受中国英语试卷里完形填空题目的启发呢?

(3) Next Sentence Prediction

BERT 的预训练过程,还有一个预测下一句的任务。就是输入两个句子,判断第二个句子是不是第一个句子的下一句的任务。这个任务是为像 QA 和 NLI 这样需要考虑句子间关系的下游任务准备的。


通过这个任务,BERT 获得了句子级表征的能力。通常,BERT 的第一个输出,即[CLS]对应的输出,就可以用来当作输入句子的句向量来使用。

4 BERT 到底学到了什么?

(1) 在 BERT 在预训练过程中,学习到了丰富的语言学方面的信息。


短语句法的信息在低层网络结构中学习到;BERT 的中层网络就学习到了丰富的语言学特征;BERT 的高层网络则学习到了丰富的语义信息特征。


上述观点来自如下的论文,该团队用一系列的探针实验,佐证了上述的观点,对我们进一步了解 BERT 和更有效的使用 BERT 有一定的指导意义。


Ganesh Jawahar Benoˆıt Sagot Djam´e Seddah (2019). What does BERT learn about the structure of language?.


(2) BERT 其实并没有学习到深层的语义信息,只是学习到了一些浅层语义和语言概率的线索?


最近有一篇论文"Probing Neural Network Comprehension of Natural Language Arguments",讨论 BERT 在 Argument Reasoning Comprehension Task(ARCT)任务中是不是其实只是学习到了数据集中一些虚假的统计线索,并没有真正理解语言中的推理和常识。


事情大概是这样子,论文作者为了杀杀 BERT 的威风,挑了自然语言处理中比较难的任务 ARCT,并且在测试数据中做了一些“手脚”,想试一试 BERT 的身手。所谓的 ARCT,是一个推理理解的任务。如下图所示,展示了一个 ARCT 数据集中的例子。ARCT 数据中有一个结论 Claim,一个原因 Reason,一个论据 Warrant,还有一个错误论据 Alternative。




如上图所示,是 ARCT 任务的通用模型结构,就是同时输入,Claim,Reason 和两个 Warrant,预测哪个 Warrant 是正确的。


论文作者首先在 ARCT 原始数据集上用 BERT 进行 ARCT 任务的预测,发现 BERT 的效果确实很好,达到 71.6±0.04,跟没有接受过训练的人员成绩接近。


然后,研究人员研究测试数据集发现数据集里面其实隐藏了一些统计线索。简单的说就是,数据集里正确的 Warrant 里包含某些词的概率比错误的 Warrant 要高。例如,只要看到 Warrant 中包含 not 就预测其为正确的 Warrant 就能够达到 60 的正确率。


同时,研究人员还做了只把 warrant 和 claim、warrant 和 reason 作为输入来训练模型的实验。实验发现,BERT 的效果也能达到 70+。这就好像老师题目都还没有说完,学生就把答案写出来,这显然不太合理的,要么是学生作弊,要么是学生提前把答案背下来了。


最后,研究人员来了一招狠的,就是将数据集中的数据进行反转和一些词概率上的平均处理,如下所示:



实验结果令人惊讶,BERT 最好的效果只有 53%,只比瞎猜好一点点。


所以,BERT 的预训练过程到底学到了什么呢?


要准确回答这个问题并不容易。但通过上述两篇论文在两个维度上对 BERT 的解析,我们心里应该能够给 BERT 一个清晰的定位。BERT 是一个强大的预训练,因其超大的参数量和较强的特征提取能力,能够从海量的语料中学习到一些语言学和一定程度的语义信息。但是,笔者认为,跟此前的所有 NLP 模型一样,它还远没有学习到语言中蕴含的大量的常识和推理。例如,利用 BERT 或许能够从"天下雨了",推断出“要带伞”。但是更深层次的,“要带伞是因为怕淋湿,淋湿了会感冒”这些 BERT 是很难学到的。


NLP 的难处就在于,语言是高度精炼和情境化的。一句简单的话,可能需要丰富的知识才能理解。现在来看,预训练模型是一条有希望但漫长的道路。

总结

BERT 是目前最火爆的 NLP 预训练模型,其基于 MLM 和双向语言模型和以 Transformer 作为特征抽取器,是其成功最主要的两个原因。


原文链接


https://mp.weixin.qq.com/s/9eAJMbdep0s1I4upxGzw1Q


2019-09-09 13:224299

评论

发布
暂无评论
发现更多内容

场景金融持续引发行业关注,4.0时代打造金融服务新生态

易观分析

银行 场景金融

更易用的OceanBase|生态工具征文大赛正式开启!

OceanBase 数据库

华为云数据库GaussDB(for MySQL),为企业云上业务发展保驾护航

爱尚科技

华为云数据库-GaussDB for MySQL数据库

爱尚科技

「MySQL高级篇」MySQL索引底层原理,设计原则详解

Java全栈架构师

Java MySQL 数据库 程序员 索引

数聚生态,智驭全界!看天翼云如何为智慧园区注入新动能!

天翼云开发者社区

【限量招募30人】免费参与SPSS云版本内测

淋雨

SPSS

MetaForce佛萨奇魔豹2.0系统开发技术讲解方案

I8O28578624

基于 MinIO 部署单实例 Databend | 新手篇(1)

Databend

凭什么 31x31 大小卷积核的耗时可以和 9x9 卷积差不多?| 文末附 meetup 回顾

MegEngineBot

深度学习 开源 卷积 MegEngine

落地DataOps,必须克服的挑战有哪些?

雨果

DataOps

快被Gartner捧上天的Data Fabric数据经纬到底是个啥?

雨果

Data Fabric 数据经纬

智慧城市、数字政府、城市大脑、一网统管之间有什么关系

雨果

智慧城市 城市大脑 数字政府 一网统管

天翼云推出全栈政务混合云支持私有化运行

天翼云开发者社区

京东云开发者|探寻软件架构的本质,到底什么是架构?

京东科技开发者

架构 软件架构 软件架构师

云网融合赋能智慧转型,“天翼云管 ”开启贴身云管家时代

天翼云开发者社区

2022年中国篮球内容消费趋势洞察

易观分析

消费 篮球

开启自然资源管理“智绘”之路!

天翼云开发者社区

千锋1024程序员节大咖讲师技术直播火力全开

千锋IT教育

项目实战:在线报价采购系统(React +SpreadJS+Echarts)

葡萄城技术团队

React 项目实战 采购软件 echart

JavaScript的类型转换

渔戈

JavaScript 前端 10月月更

系统服务熔断、限流:常见限流算法&主流熔断技术详解

程序员小毕

Java 程序员 分布式 微服务 SpringCloud

天翼云国产化全栈云服务赋能数字中国建设

天翼云开发者社区

SAP | 消息 MESSAGE

暮春零贰

SAP 消息 10月月更

现代农业|AIRIOT智慧农业管理解决方案

AIRIOT

低代码 物联网 智慧农业

JscriptScript的类型

渔戈

JavaScript 前端 10月月更

深入理解什么是TCP 粘包?粘包警察是什么梗?

C++后台开发

网络协议 TCP/IP 后端开发 C++开发 TCP 粘包

哪里有便宜的云服务器?可以下月付款吗?

行云管家

云计算 服务器 云服务器

高可用系统哪家靠谱?工作原理是什么?

行云管家

高可用 高可用架构 高可用集群

浅谈Mixin、Composition API、Reactive API、Ref API以及readonly🔥

渔戈

前端 Vue3 10月月更

基于Delta Lake构建数据湖仓体系

阿里云大数据AI技术

大数据 开源 企业号十月 PK 榜

深入浅出解析BERT原理及其表征的内容_AI&大模型_小Dream哥,有三AI_InfoQ精选文章