BERT Training By Example

BERT 模型的训练主要分为三个阶段:
1. Masked Language Model,基于对自然语言的语料打标签生成训练样本,将无监督学习转换为监督学习
2. Pretraining,模型训练的核心过程,生成能理解语言的模型
3. Fine-tuning,基于对模型的理解,完成特定的任务。

Masked Language Model

Masked Language Model 的任务是将无标签的语料转换为有标签的语料,进而将无监督学习转化为监督学习。这个过程需要准备两份材料:原始语料词汇表
原始语料就是一系列符合语法的句子或段落。
词汇表维持token-id的映射,除了一门语言自身的词汇,BERT还要求词汇表包含[PAD], [UNK], [CLS], [SEP]和[MASK]。

Pretraining

Pretraining是整个BERT训练的核心,其目的是获取Language Model(语言模型),一个含有每个词的Embedding的神经网络模型,形象的说,完成了Pretraining的过程,就类似于一个英文系或中文系的学生毕业了。

Pretraining 训练目标有两个:
1. Masked LM Prediction, 预测在MLM阶段被故意处理的15%候选词。
2. Next Sentence Prediction,预测在MLM阶段被故意拼接的50%句子。

经过不断的调整模型参数,直到模型可以准确的找到候选词和拼接句子的正确答案。

下图是BERT的模型结构,其中两个关键概念:Embedding和Self-Attention,BERT神经网络就是通过不断调节Embedding和Self-Attention的参数来实现”理解”一门语言的目的。

Embedding(词嵌入)可以理解为是对一个词的数值化表达。比如中文常用字3000个,如果要对他们进行编码,最简单的方法就是从0数到2999,也可以用一个长度是3000的数组,通过分别在[0], [1] … [2999]的数值置1,其余置0来进行编码(one-hot编码)。这两种方法都能满足区分文字的目的,但不能表示出两个字的相似性,比如,在编码上,”我”的编码([1])和”书”的编码([4])差值比和”人的编码([1282]) 小,但我们不能说在语言上”我”和“书”的关系比和”人”更近。而Embedding就希望解决这样一个问题,我们希望为一门语言的每个词进行编码,如果编码A和编码B的数值距离比编码A和编码C数值距离更近,那么语言上A代表的词和B代表的词的相似度,就比和C代表的词的相似度更高。这个编码就是Embedding。
典型的应用就是在推荐系统中,用户喜欢A商品,那么就可以从库中找到和A的Embedding最相似的Embedding对应的商品,推荐给用户。

Attention(注意力机制) 在NLP中最早用于翻译任务中的语义理解,用于获取针对特定词,句子中各个词的相关性排序。
打个比方,小C看了电影”复仇者联盟”,想去书店找更多关于”漫威”的资料,书店的书浩如烟海,在没有任何先验知识的前提下,首先能做的只能是逐本,逐页地看,但看过一遍之后,就可以知道3-1区域的漫画书籍和”漫威”关系较大,再仔细看一遍3-1区域,发现美国漫画的书籍和”漫威”关系更大,就这样带着问题找答案,最终,就知道书店里每一本书和”漫威”的相关性。这里,”漫威”就是我们的”注意力”所在,我们只关注和”漫威”相关的部分,相似度判断是小C看”复仇者联盟”积累的记忆,找到每本书和”漫威”的相关性排序是结果

以上文为例,”秦 昭 襄 [MASK] 嬴 稷 与 [MASK] 怀 王 熊 槐 在 黄 棘”,经过onehot->embedding table –> embedding 的映射,其实两个”[MASK]”的Embedding成分中,只有E(position)不同,E(token) 和E(segment)均相同,那如何知道被[MASK]的分别是什么呢?就要依赖Attention结构分析相似性并排序的能力。

在下图中,Attention的输入是一组Embedding,起初,Attention还不能很好的根据上下文推断出[MASK]的词,但在label的帮助下,经过不断地迭代,不断地调整Query,Key和Value内的变量值,Attention最终可以在输入的Embedding几乎相同(仅E(position)不同)的情况下,根据上下文的不同,推断出第一个MASK对应的是”王”而第二个是”楚”。

Fine-tuning

在Pretraining阶段理解了整个语言之后,Fine-tuning就是学习如何执行具体任务,这个阶段的算力需求也比Pretraining小很多。好比一个英文系的学生毕业后从事古典文学翻译工作,已有的语言知识要针对具体的任务做微调。

一切NLP皆分类,对于常见的NLP任务,论文中给出了如何设计分类器来进行Fine-tuning。比如,(a)图中列出的数据集都是判断两个句子的关系,Sentence1: 明天天气晴朗,Sentence2:明天暴雨,Label: Contradict,Pretraining之后BERT具备了”语感”,知道什么是话是通顺的,此时只需要将Sentence1 和Sentence2拼接:明天天气晴朗,明天暴雨,Label:Contradict,借助之前培养的”语感”,经过几轮迭代,BERT就会进一步学会”分类”。

就这样,通过将各个NLP任务转化为对一个句子的分类任务,对BERT模型进行进一步训练,就可以使模型具备完成具体任务的能力。

经过Fine-tuning阶段,模型已经Ready,就可以愉快地拿去测试了

Ref:
https://github.com/google-research/bert
https://arxiv.org/pdf/1810.04805.pdf
https://arxiv.org/pdf/1706.03762.pdf
https://www.cnblogs.com/guoyaohua/p/9429924.html

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Discover more from sketch2sky

Subscribe now to keep reading and get access to the full archive.

Continue reading