赞
踩
在“BERT初探——以情感分类为例”系列文章中,你将学到:
BERT最好的定义就是其原始论文 的标题:预训练的双向 Transformer 语言模型。标题中包括三个关键词:
BERT的基本结构是多层双向Transformer。设层数(即Transformer块的数量)为 L L L,隐藏层的大小为 H H H,自注意力头的个数为 A A A。原文将前馈/过滤器的大小设置为 4 H 4H 4H。原文给出了 base 和 large 两个模型的大小,具体为:
B E R T B A S E : L = 12 , H = 768 , A = 12 BERT_{BASE}: L=12, H=768, A=12 BERTBASE:L=12,H=768,A=12, Total Parameters = 110 M 110M 110M
B E R T L A R G E : L = 24 , H = 1024 , A = 16 BERT_{LARGE}: L=24, H=1024, A=16 BERTLARGE:L=24,H=1024,A=16, Total Parameters = 340 M 340M 340M
下图是模型结构的简单图示:
BERT 与 GPT 和 ELMo 均为预训练模型,但是三者在结构上是有所区别的。下图展示了具体差别:
BERT 使用双向 Transformer。OpenAI GPT 使用 从左到右的 Transformer。ELMo 使用独立训练的从左到右和从右到左的 LSTM 的连接来为下游任务生成特征。其中,只有 BERT 表示在所有层中同时受到左右语境的制约。[参考2]
论文中区别了两个概念:
通过把给定标记对应的标记嵌入、句子嵌入和位置嵌入求和来构造其输入表示。下图给出了输入表示的可视化表示。 细节是[参考2]:
模型有两种训练方式:遮蔽语言模型(masked language modeling)与下一句预测(next sentence prediction)
遮蔽语言模型的任务目标是猜测被遮盖起来的单词是什么。比如:
She is a [mask] girl. --> She is a pretty girl.
这样的方法有两个缺点。
第一个缺点是[MASK]标记在微调(即下游任务)中从未出现。为了缓解这个问题,训练数据随机选择15%的词进行标记,在被选中的词中,80%的情况被替换为[MASK],10%的情况随机选择一个语料库中的词替换,10%的情况保持单词不变。
第二个缺点是这样会使得模型训练变慢,因为每批次数据只有15%的标记被预测。但这是值得的,因为模型效果好啊!
许多下游任务,如问答和自然语言推理,都是以理解句子关系为基础。因此原文与训练了一个下一句预测的二元分类任务,具体如下:
输入 = [CLS] That’s [mask] she [mask]. [SEP] Hahaha, nice! [SEP]
标签 = IsNext
输入 = [CLS] That’s [mask] she [mask]. [SEP] Dwight, you ignorant [mask]! [SEP]
标签 = NotNext
BERT的微调过程很简单,因为Transformer中的自注意力机制允许BERT通过交换适当的输入和输出来模拟许多下游任务——无论是设计单个文本还是文本对。对于涉及文本对的应用,一种常见的模式是在应用双向交叉注意力之前独立编码文本对。但是BERT正相反,使用自注意力机制来统一这两个阶段,因为对连接文本对的自注意力编码有效地包含了两个句子之间的双向交叉注意力。
对于每个任务,我们只需将特定任务的输入和输出插入BERT中,并对所有参数进行端到端的微调。在输入时,预训练的A句和B句类似于(1)释义时的句对,(2)隐含时的假设-前提对,(3)问答时的问题-段落对,(4)文本分类或序列标注时的简并文本-∅对。在输出时,标记表示被送入输出层进行标记级任务,如序列标记或问题回答,而[CLS]表示被送入输出层进行分类,如娱乐或情感分析。
具体微调过程详见原文第四节。
对于微调,除了批量大小、学习率和训练次数外,大多数模型超参数与预训练期间相同。Dropout 概率总是使用 0.1。最优超参数值是特定于任务的,但我们发现以下可能值的范围可以很好地在所有任务中工作:
我们还观察到大数据集(例如 100k+ 标记的训练集)对超参数选择的敏感性远远低于小数据集。微调通常非常快,因此只需对上述参数进行完全搜索,并选择在验证集上性能最好的模型即可。[参考2]
以上是对BERT的一个最基本最初步的介绍,主要基于BERT的原始论文和部分优秀博文。下一篇文章将使用 hugging face 的 Transformer 包来用BERT进行文本情感分类的实验。后续的文章,我们会介绍各种基于BERT的NLP预训练模型。
参考:
- 英文的BERT情感分类tutorial,写的非常好!
https://curiousily.com/posts/sentiment-analysis-with-bert-and-hugging-face-using-pytorch-and-python/- 中文BERT论文翻译以及相关资料整理的repo: https://github.com/yuanxiaosc/BERT_Paper_Chinese_Translation
- 原始论文:https://arxiv.org/abs/1810.04805v2
- 英文博文《The Illustrated BERT, ELMo, and co. (How NLP Cracked Transfer Learning)》,其对BERT, ELMo 等预训练模型进行了非常简单清晰的解释:http://jalammar.github.io/illustrated-bert/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。