[toc]
上一代模型
Word2Vec
缺点
- 由于词和向量是一对一的关系,所以多义词的问题无法解决。
- Word2vec 是一种静态的方式,虽然通用性强,但是无法针对特定任务做动态优化
优点
-
由于 Word2vec 会考虑上下文,跟之前的 Embedding 方法相比,效果要更好(但不如 18 年之后的方法)
-
比之前的 Embedding方 法维度更少,所以速度更快
-
通用性很强,可以用在各种 NLP 任务中
ELMo
优点
- ELMo着重解决一词多义
- ELMo生成的词向量利用了上下文的信息,根据下游任务,能够通过权值来调整词向量以适应不同任务
缺点
-LSTM对长距离的提取特征不如Transformer
- lstm是串行机制
BERT介绍
在介绍bert之前,我们可以想象一下什么样的model才是state-of-the-art model,也许应该是:
- 支持并行
- 考虑上下文
- 解决一词多义
- 泛化能力强,可以完成不同的下游任务
GPT2 完美解决上述问题,但是美中不足的就是它是单向的Transformer,这也导致了其在训练得过程中会消耗一些性能。这就要引入本文要介绍的主角BERT了。
BERT模型总体结构
BERT是一种基于微调的多层双向Transformer编码器,其中的Transformer与原始的Transformer是相同的,并且实现了两个版本的BERT模型,在两个版本中前馈大小都设置为4层:
BERTBASE:L=12,H=768,A=12,Total Parameters=110M
BERTLARGE:L=24,H=1024,A=16,Total Parameters=340M
其中层数(即Transformer blocks块)表示为L,隐藏大小表示为H,自注意力的数量为A。
BERT模型输入
输入表示可以在一个词序列中表示单个文本句或一对文本(例如,[问题,答案])。对于给定的词,其输入表示是可以通过三部分Embedding求和组成。Embedding的可视化表示如下图所示:
-
token Embeddings表示的是词向量,第一个单词是CLS标志,可以用于之后的分类任务,对于非分类任务,可以忽略词向量;
-
Segment Embeddings用来区别两种句子,因为预训练不只做语言模型还要做以两个句子为输入的分类任务;
-
Position Embeddings是通过模型学习得到的。
Pre-training
掩码语言模型(MLM)
为了训练深度双向Transformer表示,采用了一种简单的方法:随机掩盖部分输入词,然后对那些被掩盖的词进行预测,此方法被称为“Masked LM”(MLM)。预训练的目标是构建语言模型,BERT模型采用的是bidirectional Transformer。那么为什么采用“bidirectional”的方式呢?因为在预训练语言模型来处理下游任务时,我们需要的不仅仅是某个词左侧的语言信息,还需要右侧的语言信息。
在训练的过程中,随机地掩盖每个序列中15%的token,并不是像word2vec中的cbow那样去对每一个词都进行预测。MLM从输入中随机地掩盖一些词,其目标是基于其上下文来预测被掩盖单词的原始词汇。与从左到右的语言模型预训练不同,MLM目标允许表示融合左右两侧的上下文,这使得可以预训练深度双向Transformer。Transformer编码器不知道它将被要求预测哪些单词,或者哪些已经被随机单词替换,因此它必须对每个输入词保持分布式的上下文表示。此外,由于随机替换在所有词中只发生1.5%,所以并不会影响模型对于语言的理解。
句子连贯性判定(NSP)
很多句子级别的任务如自动问答(QA)和自然语言推理(NLI)都需要理解两个句子之间的关系,譬如上述Masked LM任务中,经过第一步的处理,15%的词汇被遮盖。那么在这一任务中我们需要随机将数据划分为等大小的两部分,一部分数据中的两个语句对是上下文连续的,另一部分数据中的两个语句对是上下文不连续的。然后让Transformer模型来识别这些语句对中,哪些语句对是连续的,哪些对子不连续。
Fine-tuning
能解决的问题
- 句对分类
判断两句子之间的关系,如句子语义相似度、句子连贯性判定等,其本质是文本分类。
输入:两句子;
输出:句子关系标签。
- 单句子文本分类
判断句子属于哪个类别,如新闻自动分类、问题领域分类等。
输入:一个句子;
输出:输出句子类别标签。
- 抽取式问答
给定问答和一段文本,从文本中抽取出问题的答案,如机器阅读理解等。其本质是序列标注。
输入:一个问题,一段文本;
输出:答案在文本中的索引。
- 单句子序列标注
给输入句子的每个token打上目标标签,如分词、词性标注、实体识别等。
输入:一段文本;
输出:文本中每个token对应的标签。
模型对比图
模型评价
实验数据以及对应的NLP任务
GLUE语料集的介绍
| 名称 | 全名 | 用途 |
|---|---|---|
| MNLI | Multi-Genre NLI | 蕴含关系推断 |
| QQP | Quora Question Pairs | 问题对是否等价 |
| QNLI | Question NLI | 句子是否回答问句 |
| SST-2 | Stanford Sentiment Treebank | 情感分析 |
| CoLA | Corpus of Linguistic Acceptability | 句子语言性判断 |
| STS-B | Semantic Textual Similarity | 语义相似 |
| MRPC | Microsoft Research Paraphrase Corpus | 句子对是否语义等价 |
| RTE | Recognizing Texual Entailment | 蕴含关系推断 |
| WNLI | Winograd NLI | 蕴含关系推断 |
包含了各种理解句子含义和关系的任务。看一下效果:
实战
百度2021语言与智能技术竞赛:机器阅读理解任务
[百度2021语言与智能技术竞赛:机器阅读理解任务] (aistudio.baidu.com/aistudio/co…)
赛题说明:
给定一个问题q,一段篇章p及其标题t,参赛系统需要根据篇章内容,判断该篇章p中是否包含给定问题的答案,如果是,则给出该问题的答案a;否则输出“无答案”。数据集中的每个样本,是一个四元组,例如: 问题 ( q ): 番石榴汁热量 篇章 ( p ): 番石榴性温,味甜、酸、涩…,最重要的是番石榴所含的脂肪热量较低,一个番石榴所含的脂肪约0.9克重或84卡路里。比起苹果,番石榴所含有的脂肪少38%,卡路里少42%。 标题 ( t ): 番石榴汁的热量 - 妈妈网百科 参考答案 ( a ): [‘一个番石榴所含的脂肪约0.9克重或84卡路里’]
机器阅读理解任务基线系统详解
- 加载其他数据集
- 模型融合
- robert
its family
修改掩码语言模型(MLM)任务
Ernie
bert是随机mask输入序列中的字,这样能很简单地推测出字之间的搭配,这样会让本来应该有强相关的一些连在一起的字词,在训练时是割裂开来的。这对于中文文本中广泛包含多个字的实体、短语等单一的语义的词,俘获其语义信息是欠佳的。
因而ERNIE在输入为字的基础上,对输入序列中的短语和实体类的词实体词进行连续mask,这样一来短语信息就会融入到字的 embedding中了。
这样做的目的是:使模型能够学习到实体、短语的语义信息,训练完成后字的embedding就具有了实体、短语的语义信息了,这对于有大量短语、实体的文本任务(特别是实体识别任务)是非常友好。
- 一种是基于phrase
- 一种是基于entity
Robert
- 静态Mask变动态Mask
Bert在整个预训练过程,选择进行mask的15%的Tokens是不变的,也就是说从一开始随机选择了这15%的Tokens,之后的N个epoch里都不再改变了。这就叫做静态Masking。
而RoBERTa一开始把预训练的数据复制10份,每一份都随机选择15%的Tokens进行Masking,也就是说,同样的一句话有10种不同的mask方式。然后每份数据都训练N/10个epoch。这就相当于在这N个epoch的训练中,每个序列的被mask的tokens是会变化的。这就叫做动态Masking。
修改句子连贯性判定(NSP)任务
ALBERT
- 移去NSP任务,使用SOP任务
BERT的NSP任务实际上是一个二分类,训练数据的正样本是通过采样同一个文档中的两个连续的句子,而负样本是通过采用两个不同的文档的句子。该任务主要是希望能提高下游任务(如文本匹配)的效果,但是后续的研究发现该任务效果并不好。NSP其实包含了两个子任务,主题预测(两个句子是否来源于同一类文章)与关系一致性(两个句子是否是承接关系)预测,但是主题预测相比于关系一致性预测简单太多了,并且在MLM任务中其实也有类型的效果。
因而,ALBERT中,为了只保留一致性任务去除主题识别的影响,提出了一个新的任务—句子连贯性预测 sentence-order prediction(SOP),SOP的正样本和NSP的获取方式是一样的,负样本把正样本的顺序反转即可。SOP因为实在同一个文档中选的,其只关注句子的顺序并没有主题方面的影响。并且SOP能解决NSP的任务,但是NSP并不能解决SOP的任务,该任务的添加给最终的结果提升了一个点。
这样做的目的是:通过调整正负样本的获取方式去除主题识别的影响,使预训练更关注于句子关系一致性预测。
模型参数大小上做文章
TinyBERT
TinyBERT 是华为、华科联合提出的一种为基于 transformer 的模型专门设计的知识蒸馏方法,模型大小不到 BERT 的 1/7,但速度提高了 9 倍,而且性能没有出现明显下降。
引入知识图谱
K-BERT
多模态
VideoBERT
VisualBERT
SpeechBERT
参考文献
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE
ERNIE: Enhanced Representation through Knowledge Integration
TinyBERT: Distilling BERT for Natural Language Understanding
K-BERT: Enabling Language Representation with Knowledge Graph
机器阅读理解算法与实践
[知乎:比 Bert 体积更小速度更快的 TinyBERT](zhuanlan.zhihu.com/p/94359189)