概念
BERT,Bidirectional Encoder Representations from Transformers,多Transformer的双向编码器表示法。
RNN,recurrent neural network,循环神经网络。
LSTM,long short-term memory,长短期记忆网络。
NLI,Natural language inference,自然语言推理。
知识蒸馏(knowledge distillation),一种模型压缩技术,指训练一个小模型来重现大型预训练模型的行为。使用知识蒸馏法将知识从预训练的大型BERT模型迁移到小型BERT模型。也称师生学习。
两类文本摘要(text summarization)任务:
- 提取式摘要任务:提取给定文本中重要的句子形成摘要
- 抽象式摘要任务:转述给定文本形成摘要
未登录词(out-of-vocabulary word, OOV word),
GeLU,即高斯误差线性单元(Gaussian Error Linear Unit),用于激活函数。
ASR,automatic speech recognition,自动语音识别。
MSE,mean squared error,均方误差。MSE最小化作为训练任务。
t-SNE,t-distributed stochastic neighbor embedding,t分布随机邻域嵌入法。用于
CEL,cosine embedding loss,余弦嵌入损失。两个特征向量之间的距离,距离越小,特征向量越准确。
TLM,translation language modeling,翻译语言模型构建任务。
原理
RNN和LSTM已广泛应用于时序任务:文本预测、机器翻译、文章生成等。然而面临一大问题就是如何记录长期依赖。
Transformer完全依赖于注意力机制,并摒弃循环,及自注意力(self-attention)。
可将预训练模型用于两种场景:
- 作为特征提取器,提取嵌入;
- 针对文本分类任务、问答任务等下游任务对预训练的BERT模型进行微调。
有两种:不区分大小写(BERT-uncased)和区分大小写(BERT-cased)。
对于NER任务,named entity recognition,命名实体识别,必须使用区分大小写的模型。
数据集包含文本,故而需要对文本进行向量化,常用算法:TF-IDF、word2vec。
Hugging Face,一个致力于通过自然语言将AI技术大众化的组织,其开源Python Transformers库常用于NLP和自然语言理解(natural language understanding,NLU)任务,包括100多种语言的数千个预训练模型,兼容PyTorch和TensorFlow。
安装:pip install transformers
Google Colab:在线。
BERT模型可使用如下几个约定的符号:
- 编码器的层数用$L$表示
- 注意力头的数量用$A$表示
- 隐藏神经元的数量用$H$表示
几种标准配置:
- BERT-base:由12层编码器叠加而成。每层编码器都使用12个注意力头,其中前馈网络层由768个隐藏神经元组成,特征向量的大小是768。
- BERT-large:由24层编码器叠加而成。每层编码器都使用16个注意力头,其中前馈网络层包含1024个隐藏神经元,特征向量的大小是1024。
- BERT-tiny:$L=2, H=128$
- BERT-mini:$L=4, H=256$
- BERT-small:$L=4, H=512$
- BERT-medium:$L=8, H=512$
在将数据输入BERT之前,首先使用如下3个嵌入层将输入转换为嵌入:
- 标记嵌入层
- 分段嵌入层
- 位置嵌入层
[CLS]
只在第一句的开头添加,而[SEP]
在每一句的结尾都要添加。[CLS]
用于分类任务,而[SEP]
用于表示每个句子的结束。
位置编码:
WordPiece:特殊的词元分析器,遵循子词词元化规律。
BERT模型在以下两个自然语言处理任务上进行预训练:
- 掩码语言模型构建
- 下句预测
语言模型构建任务是指通过训练模型来预测一连串单词的下一个单词。可以把语言模型分为两类:
- 自动回归式语言模型:有两种方法:正向(从左到右)预测、反向(从右到左)预测
- 自动编码式语言模型:同时利用正向预测和反向预测的优势
全词掩码(whole word masking):如果子词被掩盖,则该子词对应的单词也将被掩盖。
下句预测(next sentence prediction):用于训练BERT模型的策略,一个二分类任务。给BERT提供两个句子,让其预测第二个句子是否是第一个句子的下一句。
3种常用的子词词元化算法:
- 字节对编码:byte pair encoding,BPE
- 字节级字节对编码:byte-level byte pair encoding,BBPE,原理与字节对编码非常相似,但它不使用字符序列,而是使用字节级序列
- WordPiece:在字节对编码中,首先要从给定的数据集中提取带有计数的单词。然后,将这些单词拆分为字符序列。接着,将具有高频率的符号对进行合并。最后,不断地迭代合并具有高频率的符号对,直到达到词表的大小要求。在WordPiece中,也是这样做的,但不根据频率合并符号对,而是根据相似度合并符号对。合并具有高相似度的符号对,其相似度由在给定的数据集上训练的语言模型提供。
变体
ALBERT
ALBERT:A Lite version of BERT,BERT的精简版,尽量缩短训练时间。
使用以下两种技术减少参数的数量:
- 跨层参数共享
- 嵌入层参数因子分解
在应用跨层参数共享时有以下几种方式:
- 全共享:其他编码器的所有子层共享编码器1的所有参数,默认。
- 共享前馈网络层:只将编码器1的前馈网络层的参数与其他编码器的前馈网络层共享。
- 共享注意力层:只将编码器1的多头注意力层的参数与其他编码器的多头注意力层共享。
与任务无关的数据增强方法:
- 掩码方法
- 基于词性的词汇替换方法
n-gram
采样方法
掩码方法和基于词性的词汇替换方法是互斥的,两者只能选择一个。
RoBERTa
RoBERTa:Robustly Optimized BERT Pretraining Approach,稳健优化的BERT预训练方法,在预训练步骤上有一些变化:
- 在掩码语言模型构建任务中使用动态掩码而不是静态掩码。
- 不执行下句预测任务,只用掩码语言模型构建任务进行训练。
- 以大批量的方式进行训练。
- 使用字节级字节对编码作为子词词元化算法。
ELECTRA
ELECTRA:Efficiently Learning an Encoder that Classifies Token Replacements Accurately,高效训练编码器如何准确分类替换标记。使用一个生成器(generator)和一个判别器(discriminator),并使用替换标记检测这一新任务进行预训练
SpanBERT
SpanBERT,被普遍用于预测文本区间的问答任务和关系提取任务。
pipeline API是由Transformers库提供的简单接口,用于无缝地执行从文本分类任务到问答任务等各类复杂任务
DistilBERT
损失函数是以下3种损失之和:
- 蒸馏损失;
- 掩码语言模型损失(学生损失);
- 余弦嵌入损失。
TinyBERT
蒸馏可以在多层进行:
- Transformer层:编码器层
- 嵌入层:输入层
- 预测层:输出层
两阶段学习框架,即在预训练阶段和微调阶段都应用知识蒸馏法。
Transformer层蒸馏包括两次知识蒸馏:
- 基于注意力的蒸馏
- 基于隐藏状态的蒸馏
BERTSUM
BERT for summarization,为文本摘要任务微调。
在Transformer模型中,编码器是一个预训练的BERTSUM模型,但解码器是随机初始化的,这将导致微调时出现差异。由于编码器已经经过预训练,它可能会过拟合,而解码器没有经过预训练,它可能会欠拟合。为解决这个问题,需要使用两个Adam优化器,分别用于编码器和解码器,并对二者使用不同的学习率。
ROUGE
为了评估文本摘要任务,需使用一套评估指标ROUGE(Recall-Oriented Understudy for Gisting Evaluation)。ROUGE在Chin-Yew Lin的论文ROUGE: A Package for Automatic Evaluation of Summaries
中首次提出,包含5种评估指标:
- ROUGE-N
- ROUGE-L
- ROUGE-W
- ROUGE-S
- ROUGE-SU
ROUGE-N指标(N代表n-gram)是指候选摘要(预测摘要)和参考摘要(实际摘要)之间的多元召回率。召回率为候选摘要和参考摘要之间重叠的元词总数与参考摘要中的元词总数的比率。
$召回率=frac{重叠的元词总数}{参考摘要中的元词总数}$
ROUGE-L指标基于最长公共子序列(longest common subsequence, LCS)。两个序列之间的LCS是长度最大的相同子序列。如果候选摘要和参考摘要之间有一个LCS,则可说候选摘要匹配参考摘要。
M-BERT
M-BERT模型中的零数据知识迁移不依赖于词汇的重叠,即词汇重叠对M-BERT模型中的零数据知识迁移没有影响。因此,M-BERT模型能够很好地迁移到其他语言中。
世界语言结构图谱(World Atlas of Language Structures,WALS)是一个大型数据库,它包括语言的结构属性,如语法、词汇和语音属性。
XLM
使用跨语言目标训练的BERT模型被称为跨语言模型(简称为XLM模型)。XLM模型比M-BERT模型表现得更好,因为它可以学习跨语言的特征。
XLM模型使用单语言数据集和平行数据集进行预训练。平行数据集由语言对文本组成,即由两种不同语言的相同文本组成。平行数据集,也称为跨语言数据集。单语言数据集来自维基百科,平行数据集有多个来源,包括MultiUN(联合国多语言语料库)和OPUS(Open Parallel Corpus,开源平行语料库)。XLM模型使用字节对编码,并对所有语言创建共享词表。
XLM模型使用以下任务进行预训练:
- 因果语言模型构建任务
- 掩码语言模型构建任务
- 翻译语言模型构建任务
XLM-R模型是对XLM的扩展,即XLM-RoBERTa模型,代表最先进的跨语言特征学习技术。
对于小语种,获得平行数据集很难,在XLM-R模型中,只用掩码语言模型构建任务目标来训练模型,不使用翻译语言。XLM-R模型只需要一个单语言数据集。
FlauBERT
French Language Understanding via BERT。法语语料库由24个子语料库组成,包含来自不同来源的数据,如维基百科、书籍、内部抓取、WMT19数据、OPUS的法语文本以及维基媒体等。
FLUE(French Language Understanding Evaluation,法语理解评估)。FLUE类似于法语的GLUE标准。FLUE标准中的数据集包括:
- CLS-FR
- PAWS-X-FR
- XNLI-FR
- 法语Treebank
- FrenchSemEval
Sentence-BERT
由Ubiquitous Knowledge Processing Lab(UKP-TUDA)研发,是用来获得固定长度的句子特征的,扩展了预训练的BERT模型(或其变体)以获得句子特征。普遍用于句子对分类、计算两个句子之间的相似度等任务。
两种汇聚策略:
- 通过对所有标记的特征使用平均汇聚法来获得句子特征,从本质上讲,句子特征持有所有词语(标记)的意义。
- 通过对所有标记的特征使用最大汇聚法来获得句子特征,从本质上讲,句子特征持有重要词语(标记)的意义。
Sentence-BERT模型使用二元组网络架构来执行以一对句子作为输入的任务,并使用三元组网络架构来实现三元组损失函数。
公布的Sentence-BERT模型:
- bert-base-nli-cls-token:采用预训练的BERT-base模型,用NLI数据集进行微调。使用CLS标记作为句子特征。
- bert-base-nli-mean-token:采用预训练的BERT-base模型,并用NLI数据集进行微调。使用平均汇聚策略计算句子特征。
- roberta-base-nli-max-tokens:采用预训练的RoBERTa-base模型,并用NLI数据集进行微调。使用最大汇聚策略计算句子特征。
- distilbert-base-nli-mean-tokens:采用预训练的DistilBERT-base模型,用NLI数据集进行微调。使用平均汇聚策略计算句子特征。
ClinicalBERT
一个针对临床领域的BERT模型,它在一个大型临床语料库上进行预训练。临床记录或进度记录包含关于病人的非常有用的信息:就诊记录、症状、诊断情况、日常活动、观察记录、治疗计划、放射性检查结果,等等。理解临床记录的上下文特征具有挑战性,因为它们有自己的语法结构、缩略语和行话。
使用MIMIC-III临床记录进行预训练。MIMIC-III是Beth Israel Deaconess Medical Center参与创建的一个大型健康数据集合,包括一个重症医学数据集,含有超过40000名重症监护室病人的观察数据。
BioBERT
一个针对生物医学领域的BERT模型。可以针对许多生物医学领域特定的下游任务对BioBERT模型进行微调,如生物医学问答任务、生物医学命名实体识别任务等。
使用以下两个生物医学数据集:
- PubMed:一个引文数据库,它包含来自生命科学期刊、在线书籍和MEDLINE(美国国立医学图书馆的生物医学文献数据库)的3000多万条生物医学文献的引文。
- PubMed Central(PMC):一个免费的在线资料库,包括在生物医学期刊和生命科学期刊上发表的文章。
与疾病相关的实体,可以使用以下数据集:
- NCBI
- 2010 i2b2/VA
- BC5CDR
对于与药物/化学品相关的实体,可以使用以下数据集:
- BC5CDR
- BC4CHEMD
对于与基因相关的实体,可以使用以下数据集:
- BC2GM
- JNLPBA
对于与物种相关的实体,可以使用以下数据集:
- LINNAEUS
- Species-800
VideoBERT
第一个联合学习视频特征及语言特征的模型,可应用于图像字幕生成、视频字幕添加、预测视频的下一帧等任务。
与训练BERT模型的下句预测任务类似,语言−视觉对齐也是一个分类任务。但不预测一个句子是否是另一个句子的下一句,而是预测语言标记和视觉标记是否在时间上吻合,即,需要预测文本(语言标记)是否与视频画面(视觉标记)匹配。
使用以下3个目标进行预训练,它们被称为纯文本、纯视频和文本−视频:
- 在纯文本目标中,掩盖语言标记,并训练模型预测被掩盖的语言标记,有助于使模型更好地理解语言特征。
- 在纯视频目标中,掩盖视觉标记,并训练模型预测被掩盖的视觉标记,有助于模型更好地理解视频特征。
- 在文本−视频目标中,掩盖语言标记和视觉标记,并训练模型预测被掩盖的语言标记和视觉标记,这有助于模型理解语言标记和视觉标记之间的关系。
BART
Facebook AI推出的一个有趣的模型。最适合文本生成,语言翻译和语言理解。
基于Transformer架构,本质上是一个降噪自编码器,是通过重建受损文本进行训练的。本质上是一个带有编码器和解码器的Transformer模型。将受损文本送入编码器,编码器学习给定文本的特征并将特征发送给解码器。解码器获得编码器生成的特征,重建原始文本。
BART模型的编码器是双向的,这意味着它可以从两个方向(从左到右和从右到左)读取一个句子,但解码器是单向的,它只能从左到右读取一个句子。有一个双向编码器(针对两个方向)和一个自回归解码器(针对单一方向)。
BART模型是通过最小化重建损失来训练的,也就是原始文本和解码器的生成文本之间的交叉熵损失。不同于BERT模型,在BERT模型中,我们只是将被掩盖的标记送入编码器,然后将编码器的结果送入前馈网络层,用前馈网络层来预测被掩盖的标记。但在BART模型中,将编码器的结果反馈给解码器,由其生成或重构原始句子。
BART模型有两种配置:
- BART-base:6层编码器和解码器
- BART-large:12层编码器和解码器
破坏文本的增噪方法:
- 标记掩盖
- 标记删除
- 标记填充
- 句子重排
- 文档轮换
其他
数据集
本书提到的数据集:
- 多伦多图书语料库(Toronto BookCorpus)
- 维基百科
- CommonCrawl
- CLS-FR
- PAWS-X-FR
- XNLI-FR
- 法语Treebank
- FrenchSemEval
- PubMed
- PMC
Python库
本书提到的Python库:
- Transformers
- sentence-transformers:
- ktrain:用于增强机器学习的低代码库,由Arun S. Maiya开发,是Keras的一个轻量级打包代码库,旨在更容易建立、训练和部署深度学习模型。还包括几个预训练模型,使文本分类、文本摘要、问答、翻译、回归等任务更加容易。用tf.keras实现的,包括几个有趣的功能,如学习率查找器、学习率调度器等。
- bert-as-service库
模型
本书提到的Python Transformers内置的预训练模型:
- bert-base-uncased:不区分大小写的模型
- spanbert-large-finetuned-squadv2:用于问答任务的预训练和微调的SpanBERT模型
- bart-large-cnn:预训练的BART-large模型,可用于文本摘要任务
- bert-base-nli-cls-token:
- bert-base-nli-mean-token:
- roberta-base-nli-max-tokens
- distilbert-base-nli-mean-tokens