数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
二十、UniLM [2019]
语言模型的预训练在各种自然语言处理任务中大大推进了
SOTA
。预训练的语言模型通过使用大量的文本数据根据单词的上下文来预测该单词来学习contextualized text representation
,并且可以进行微调从而适应下游的任务。不同的预测任务和训练目标已经被用于预训练不同类型的语言模型,如下表所示:
ELMo
学习两个单向的语言模型:一个正向语言模型从左到右编码文本,一个反向的语言模型从右到左编码文本。GPT
使用一个从左到右的transformer
来word-by-word
地预测文本序列。- 相比之下,
BERT
采用了一个双向Transformer encoder
来融合左右两侧的上下文从而预测masked word
。虽然BERT
极大地提高了各种自然语言理解natural language understanding: NLU
任务的性能,但其双向性bidirectionality
的特点使其难以应用于自然语言生成natural language generation: NLG
任务。
在论文
《Unified Language Model Pre-training for Natural Language Understanding and Generation》
中,作者提出了一个新的UNIfied pre-trained Language Model: UNILM
,可以应用于自然语言理解任务和自然语言生成任务。UNILM
是一个多层的Transformer
网络,在大量的文本上联合预训练,为三种类型的无监督语言建模目标进行了优化,如下表所示。具体而言,论文设计了一组完形填空任务cloze task
,其中根据上下文预测一个masked word
。这些完形填空任务的不同之处在于如何定义上下文:- 对于
left-to-right
的单向语言模型,要预测的masked word
的上下文包括其左边的所有单词。 - 对于
right-to-left
的单向语言模型,要预测的masked word
的上下文包括其右边的所有单词。 - 对于双向语言模型,要预测的
masked word
的上下文由左右两侧的所有单词组成。 - 对于序列到序列的语言模型,第二个序列(即,
target
序列)中要预测的单词的上下文由第一个序列(即,source
序列)中的所有单词、以及target
序列中被预测单词左边的所有单词组成。
这些不同的语言模型是通过
self-attention mask
来实现的。与
BERT
类似,预训练的UNILM
可以进行微调(必要时增加task-specific layer
)以适配各种下游任务。但与主要用于自然语言理解任务的BERT
不同,UNILM
可以通过使用不同的自注意力掩码self-attention mask
进行配置,为不同类型的语言模型聚合上下文,因此可以同时用于自然语言理解任务和自然语言生成任务。UNILM
有三个主要优势:- 首先,统一的预训练程序导致了一个单一的
Transformer
语言模型,它对不同类型语言模型采用共享的参数和架构,缓解了单独训练和host
多个语言模型的需要。 - 第二,参数共享使学到的
text representation
更加通用,因为它们是针对不同的语言建模目标共同优化的,其中上下文的利用方式不同从而缓解了对任何单个语言模型任务的过拟合。 - 第三,除了应用于自然语言理解任务外,
UNILM
可以作为sequence-to-sequence
的语言模型来使用,使其成为自然语言生成任务的自然选择,如抽象式摘要abstractive summarization
和问题生成question generation
。
实验结果表明,
UNILM
作为一个双向编码器来使用,在GLUE benchmark
和两个抽取式问答extractive question answering
任务(即SQuAD 2.0
和CoQA
)上与BERT
相比更有优势。此外,论文还证明了UNILM
在五个自然语言生成数据集上的有效性,其中UNILM
作为一个sequence-to-sequence
的语言模型来使用, 在CNN/DailyMail
和Gigaword
的抽象式摘要、SQuAD
问题生成、CoQA
生成式问答enerative question answering
、以及DSTC7
对话式响应生成dialog response generation
上创造了新的SOTA
。
20.1 模型
给定一个输入序列
$ X = x_1\cdots,x_{|X|} $ ,UNILM
为每个token
获得了一个contextualized vector representation
。如下图所示, 预训练通过几个无监督的语言建模目标来优化共享的Transformer
网络,即单向语言模型、双向语言模型、以及sequence-to-sequence
语言模型。为了控制对将要预测的word token
的上下文的访问,我们采用了不同的自注意力掩码。换句话说,我们使用掩码来控制token
在计算其contextualized representation
时应该注意多少上下文。一旦UNILM
得到预训练,我们就可以利用下游任务的task-specific
数据对其进行微调。Input Representation
:输入 $ X $ 是一个单词序列:- 对于单向语言模型而言,
$ X $ 是一个text segment
。 - 对于双向语言模型和
sequence-to-sequence
语言模型而言, $ X $ 是打包在一起segment pair
。
我们总是在输入的开头添加一个特殊的
start-of-sequence token
([SOS]
),并在每个segment
的结尾添加一个特殊的end-of-sequence token
([EOS]
)。[EOS]
不仅标志着自然语言理解任务中的句子边界,而且在自然语言生成任务中还用于模型学习何时终止解码过程。注意,这里的
[SOS]
类似于BERT
中的[CLS]
。input representation
遵从BERT
:- 通过
WordPiece
将文本tokenize
为子词单元subword unit
。 - 对于每个
input token
,它的vector representation
是由相应的token embedding
、position embedding
、以及segment embedding
相加而计算出来的。
由于
UNILM
是使用多个语言模型任务进行训练的,segment embedding
也起到了语言模型id
的作用,因为我们为不同的语言模型目标使用不同的segment embedding
。对于单向语言模型,只有一个
segment
,因此segment id
都是1
;对于双向语言模型和sequence-to-sequence
语言模型,有两个segment
,因此segment id
是1
和2
。因此,根据segment id
是几个,可以粗略地(而无法精确地)区分不同的语言模型。- 对于单向语言模型而言,
Backbone Network: Multi-Layer Transformer
:input
向量 $ \left\{\mathbf{\vec x}_i\right\}_{i=1}^{|X|} $ 被打包为 $ \mathbf H^{(0)}=\left[\mathbf{\vec x}_1,\cdots,\mathbf{\vec x}_{|X|}\right]\in \mathbb R^{d\times |X|} $ ,其中 $ d $ 为token embedding
维度(也是position embedding
、segment embedding
的维度)。然后 $ \mathbf H^{(0)} $ 通过一个 $ L $ 层的Transformer
被编码到不同level
的contextual representation
:其中
$ \mathbf H^{(l)} $ 为第 $ l $ 个层Transformer
的输出。在每个
Transformer Block
中,多个self-attention head
被用于聚合前一层的输出向量。对于第 $ l $ 个Transformer
层,单个self-attention head
$ \mathbf A^{(l)} $ 是通过如下的公式来计算的:其中:
$ \mathbf W_Q^{(l)},\mathbf W_K^{(l)},\mathbf W_V^{(l)}\in \mathbb R^{d_h\times d} $ 为三个投影函数,分别将 $ \mathbf H^{(l-1)}\in \mathbb R^{d_h\times |X|} $ 投影到query
空间、key
空间、value
空间。 $ d_h $ 为self-attention head
的维度。 $ \mathbf M\in \mathbb R^{|X|\times |X|} $ 为mask matrix
(也叫做self-attention mask matrix
),用于决定一对token
之间是否可以相互关注attend
。
我们使用不同的
mask matrix
$ \mathbf M $ 来控制一个token
可以关注的上下文从而计算该token
的contextualized representation
,如Figure 1
所示。以双向的语言模型为例:mask matrix
的元素都是0
,表明所有的token
都可以相互访问。预训练目标:我们使用四个完形填空任务来预训练
UNILM
,这些完形填空任务为了不同语言建模目标而设计的。在完形填空任务中,我们在输入中随机选择一些WordPiece token
,并用special token
(即,[MASK]
)替换它们。然后,我们将Transformer
网络计算出的、这些special token
对应的输出向量馈入一个softmax
分类器,以预测masked token
。UNILM
的参数被学习为:使predicted token
和original token
计算的交叉熵损失最小。值得注意的是,使用完形填空任务使得所有的语言模型都可以使用相同的训练程序,单向和双向的都一样。单向语言模型:我们同时使用
left-to-right
语言模型目标、以及right-to-left
语言模型目标。以
left-to-right
语言模型为例。每个token
的representation
只编码左侧的context token
和它自身。例如,为了预测 " $ x_1x_2\text{[MASK]}x_4 $ " 的masked token
,只能使用token
$ x_1, x_2 $ 及其自身(即[MASK]
)。这是通过使用三角矩阵的self-attention mask
$ \mathbf M $ 来实现的,其中self-attention mask
的上三角部分被设置为 $ -\infty $ ,其他不分被设置为 $ 0 $ ,如图Figure 1
所示。类似地,
right-to-left
语言模型以token
的右侧上下文为条件来预测该token
。双向语言模型:遵从
BERT
,双向语言模型允许所有token
在预测中相互关注。双向语言模型对来自两个方向的上下文信息进行编码,并能产生比单向语言模型更好的contextual representation
。在双向语言模型中,self-attention mask
$ \mathbf M $ 是一个全零矩阵,因此在输入序列的所有位置上可以关注每个token
。Sequence-to-Sequence
语言模型: 如图Figure 1
所示,对于预测来说:- 第一个
segment
(即,source segment
)的token
可以从source segment
内的两个方向相互关注。 - 而第二个
segment
(即,target segment
)的token
只能关注target segment
内的左侧上下文及其自身,以及source segment
内的所有token
。
例如,给定
source segment
$ t_1t_2 $ 及其target segment
$ t_3t_4t_5 $ ,我们将input
" $ \text{[SOS]}t_1t_2\text{[EOS]}t_3t_4t_5\text{[EOS]} $ " 馈入模型。 $ t_1 $ 和 $ t_2 $ 都可以访问前面四个token
(即," $ \text{[SOS]}t_1t_2\text{[EOS]} $ "),但 $ t_4 $ 只能访问前面六个token
(即," $ \text{[SOS]}t_1t_2\text{[EOS]}t_3t_4 $ ")。Figure 1
显示了用于Sequence-to-Sequence
语言模型目标的self-attention mask
$ \mathbf M $ 。 $ \mathbf M $ 的左边部分被设置为全 $ 0 $ ,这样所有的token
都能访问到第一个segment
。 $ \mathbf M $ 的右上部分被设置为 $ -\infty $ ,从而阻止source segment
关注到target segment
。- 此外,对于
$ \mathbf M $ 的右下部分,我们把它的上三角部分设置为 $ -\infty $ 、其他位置设置为 $ 0 $ ,这样可以防止target segment
中的token
关注到它们未来的位置(即,右侧)。
在训练过程中,我们同时在两个
segment
中随机选择token
,并用special token
(即,[MASK]
)来替换它们。该模型被学习从而恢复masked token
。由于source text
和target text
的pair
对在训练中被打包成一个连续的输入文本序列,我们隐式地鼓励模型学习这两个segment
之间的关系。为了更好地预测target segment
中的token
,UNILM
学习有效地编码source segment
。因此,针对Sequence-to-Sequence
语言模型设计的完形填空任务(也被称为encoder-decoder
模型),同时预训练了一个双向编码器和一个单向解码器。预训练的模型作为encoder-decoder
模型,可以很容易地适用于广泛的条件文本生成conditional text generation
任务,如抽象式摘要abstractive summarization
。这里的 “
Sequence-to-Sequence
语言模型”其实同时混合了双向语言模型(当[MASK]
位于source segment
)和Sequence-to-Sequence
模型(当[MASK]
位于target segment
)。此外,这里的
decoder
仅解码[MASK]
对应的token
,因此是一个incomplete
的解码过程。此外,这里的
encoder-decoder
架构与传统的架构不同,这里decoder
可以直接访问encoder
的所有位置。而传统的架构中,decoder
仅能访问单个encoder representation
,这个encoder representation
聚合了所有encoder input
信息。- 第一个
Next Sentence Prediction
:遵从BERT
,对于双向语言模型,在预训练中我们也包括next sentence prediction
任务。
预训练配置:整体预训练目标是上述不同类型的语言模型的目标之和。具体而言,在一个
training batch
中,包含:1/3
的双向语言模型目标、1/3
的Sequence-to-Sequence
语言模型目标、1/6
的left-to-right
语言模型目标、1/6
的right-to-left
语言模型目标。UNILM
的模型结构遵循BERT_LARGE
的结构,以便进行公平的比较。遵从GPT
,UNILM
采用gelu
激活函数。具体而言,我们使用一个24
层的Transformer
,隐层维度1024
、注意力头16
个,共包含大约340M
的参数。softmax
分类器的权重矩阵与token embedding
绑定(即,二者共享相同的参数矩阵)。UNILM
由BERT_LARGE
初始化,然后使用English Wikipedia
和BookCorpus
进行预训练,这两个数据集的处理方式与BERT
相同。词表vocabulary
规模为28996
。输入序列的最大长度为512
。token masking
的概率为15%
。在masked position
中,80%
的时间我们用[MASK]
来替代被选中的token
,10%
的时间用random token
来替代,其余的10%
时间保持original token
。此外,80%
的时间我们每次随机掩码一个token
,20%
的时间我们随机掩码一个bigram
或一个trigram
。我们使用
$ \beta_1=0.9,\beta_2 = 0.999 $ 的Adam
优化器。学习率为3e-5
,其中在最初的40K
步中进行线性预热然后进行线性衰减。dropout-rate = 0.1
,weight-decay = 0.01
,batch-size = 330
。预训练程序运行了大约770K
步。使用8
块Nvidia Telsa V100 32GB GPU card
进行混合精度训练,每10K
步需要约7
小时。用
BERT_LARGE
初始化之后还预训练了770K
步,那初始化的意义和影响是什么?通常,用预训练好的模型作为初始化之后,只需要训练少量的step
就能达到比较好的效果。从工程落地上来讲,用
BERT_LARGE
来初始化有利于更快地收敛从而降低训练成本;从实验上来讲,最好是从头开始训练从而进行公平地比较。下游自然语言理解任务和自然语言生成任务的微调:
对于自然语言理解任务,我们将
UNILM
作为一个双向Transformer encoder
来微调,就像BERT
。以文本分类任务为例。我们使用
[SOS]
的encoding vector
作为input representation
,记做 $ \mathbf{\vec h}_1^{(L)} $ ,并将其馈入随机初始化的softmax
分类器(即task-specific
输出层),其中类别概率计算为: $ \text{softmax}\left(\mathbf{\vec h}_1^{(L)} \mathbf W_C\right) $ ,其中 $ \mathbf W_C\in \mathbb R^{d \times C} $ 是一个参数矩阵, $ C $ 是类别数量。我们通过更新预训练的语言模型以及被添加的softmax
分类器的参数,从而最大化labeled training data
的似然likelihood
。对于自然语言生成任务,我们以
sequence-to-sequence
任务为例。微调过程类似于使用self-attention mask
的预训练。令 $ S_1 $ 和 $ S_2 $ 分别表示source sequence
和target sequence
。我们通过special token
将它们打包在一起,形成输入 " $ \text{[SOS] } S_1 \text{ [EOS] } S_2 \text{ [EOS]} $ " 。该模型通过随机掩码target
序列中一定比例的token
来进行微调,并学习恢复masked word
。训练目标是在给定上下文的情况下,最大化masked token
的似然likelihood
。值得注意的是,标识着
target
序列结束的[EOS] token
在微调过程中也可能被掩码,因此当这种情况发生时,模型会学习何时发出[EOS] token
从而终止target
序列的生成过程。UNILM
在自然语言生成任务上的微调与常规的sequence-to-sequence
模型不同。常规的sequence-to-sequence
模型会依次生成target sequence
(包括[EOS] token
)。而这里的UNILM
采用它预训练时的方式,仅掩码target sequence
并且仅仅预测masked token
(而不是序列生成)。常规的
sequence-to-sequence
更符合实际,因为在实际应用中,我们通常只有source sequence
而没有target sequence
。而UNILM
不仅需要知道source sequence
、还需要知道部分的target sequence
信息(从而预测被masked
的部分)。
20.2 实验
- 我们对自然语言理解任务(即
GLUE benchmark
,以及抽取式问答extractive question answering
)和自然语言生成任务(即抽象式摘要abstractive summarization
、问题生成、生成式问答、以及对话响应生成dialog response generation
)都进行了实验。
20.2.1 抽象式摘要
自动文本摘要
automatic text summarization
能产生一个简明流畅的summary
,传达input
(如,一篇新闻文章)的关键信息。我们聚焦于抽象式摘要,这是一项生成任务,其中summary
不必使用输入文本中的短语或句子。我们使用CNN/DailyMail
数据集的非匿名版本、以及Gigaword
来用于模型微调和评估。我们按照前面描述的程序将UNILM
作为一个sequence-to-sequence
模型进行微调,将文档(第一个segment
)和summary
(第二个segment
)拼接起来作为输入,并根据预定义的最大序列长度进行截断。我们在训练集上对我们的模型微调了
30
个epoch
。我们复用预训练中的大多数超参数。掩码概率为0.7
。我们还使用平滑率为0.1
的标签平滑label smoothing
。- 对于
CNN/DailyMail
,我们设置batch size = 32
,最大序列长度为768
。 - 对于
Gigaword
,我们设置batch size = 64
,最大序列长度为256
。
在解码过程中,我们使用
beam size = 5
的beam search
。对于CNN/DailyMail
和Gigaword
来说,input document
被截断为前640
个token
和后192
个token
。我们在beam search
中删除了重复的trigram
,并在验证集上调整了maximum summary length
。- 对于
我们使用
F1
版本的ROUGE
作为两个数据集的评估指标。在下表中,在CNN/DailyMail
数据集上,我们将UNILM
与baseline
以及几个SOTA
模型进行比较:LEAD-3
是一个baseline
模型,它抽取文档中的前三句话作为其摘要。PGNet
是一个基于pointer-generator network
的sequence-to-sequence
模型。S2S-ELMo
使用一个sequence-to-sequence
模型,用预训练好的ELMo representation
进行增强,被称为SRC-ELMO+SHDEMB
。Bottom-Up
是一个sequence-to-sequence
模型,用一个bottom-up content selector
来选择突出的短语。
我们还在下表中列出了数据集上最好的抽取式摘要结果。如下表所示,我们的模型优于以前所有的抽象式系统
abstractive system
,在数据集上创造了一个新的SOTA
的抽象式结果。在ROUGE-L
中,我们的模型也比最好的抽取式模型高出0.88
分。在下表中,我们对模型在不同规模(
10K
和3.8M
)的Gigaword
上进行了评估。Transforme
和OpenNMT
都实现了标准的attentional sequence-to-sequence
模型。Re3Sum
检索摘要作为候选模板,然后使用一个扩展的sequence-to-sequence
模型来生成摘要。MASS
是一个基于Transformer
网络的预训练的sequence-to-sequence
模型。
实验结果表明:
UNILM
取得了比以往工作更好的性能。此外,在低资源环境下(即只使用10K
个样本作为训练数据),我们的模型在ROUGE-L
中比MASS
高出7.08
分。
20.2.2 问答
Question Answering: QA
任务是在给定一个段落的条件下回答一个问题。有两种setting
:- 第一种被称为抽取式问答
extractive QA
,答案被假定为段落中的一个text span
。 - 另一种被称为生成式问答
generative QA
,答案需要即时生成。
- 第一种被称为抽取式问答
抽取式问答:这项任务可以被表述为自然语言理解任务,我们需要预测答案在段落中的开始位置和结束位置。我们对预训练的
UNILM
进行微调,将UNILM
作为双向编码器从而用于抽取式问答。我们在Stanford Question Answering Dataset: SQuAD
的2.0
版本、以及Conversational Question Answering: CoQA
数据集上进行了实验。在
SQuAD 2.0
上的结果如下表所示,我们比较了两个模型的精确匹配Exact Match: EM
分和F1
分。RMR+ELMo
是一个基于LSTM
的问答模型,用预训练好的language representation
来增强。BERT_LARGE
是一个cased
模型(即,字母保持大小写),在SQuAD
训练数据上微调了3
个epoch
,batch size = 24
,最大序列长度为384
。UNILM
以与BERT_LARGE
相同的方式进行微调。
我们看到
UNILM
的表现优于BERT_LARGE
。CoQA
是一个对话式问答conversational question answering
数据集。与SQuAD
相比,CoQA
有几个独有的特点:- 首先,
CoQA
中的样本是对话式的,所以我们需要根据对话历史来回答input question
。 - 其次,
CoQA
中的答案可以是自由格式的文本,包括很大一部分是"yes/no"
的答案。
我们对用于
SQuAD
的模型做了如下修改:首先,除了被问的问题,我们将
question-answer
的历史拼接到第一个segment
,这样模型就可以捕获到对话信息。其次,对于
"yes/no"
问题,我们使用[SOS] token
的final hidden vector
来预测input question
是否是一个"yes/no"
问题,以及答案为"yes/no"
。对于非
"yes/no"
问题 ,我们选择一个F1
分数最高的passage subspan
用于训练。
CoQA
的实验结果如下表所示。我们比较了两个模型的F1
分:DrQA+ELMo
是一个基于LSTM
的问答模型,用预训练好的ELMo representation
来增强。BERT_LARGE
是一个cased
模型(即,字母保持大小写),在CoQA
训练数据上微调了2
个epoch
,batch size = 16
,最大序列长度为512
。UNILM
以与BERT_LARGE
相同的方式进行微调。
我们看到
UNILM
的表现优于BERT_LARGE
。- 首先,
生成式问答:生成式问答为
input question
和段落生成自由形式的答案,这是一个自然语言生成任务。相比之下,抽取式问答只能预测input passage
的subspan
作为答案。在CoQA
数据集上(如前所述),《CoQA: A conversational question answering challenge》
表明:普通的sequence-to-sequence
模型的性能仍然远远低于抽取式方法。我们为生成式问答来适配
UNILM
,从而将UNILM
作为一个sequence-to-sequence
模型。第一个segment
(即input sequence
)是对话历史、input question
、以及段落的拼接。第二个segment
(即,output sequence
)是答案。我们在CoQA
训练集上对预训练的UNILM
微调了10
个epoch
。我们设置batch size = 32
,掩码率为0.5
,最大序列长度为512
。我们还使用平滑率为0.1
的标签平滑。其他超参数与预训练保持一致。在解码过程中,我们使用
beam size = 3
的beam search
,input question
和段落的最大长度为470
。对于超过最大长度的段落,我们用滑动窗口的方法将段落分成若干块,并选择一个与question
具有最高word overlap
的块。我们将我们的方法与生成式问答模型
Seq2Seq
和PGNet
进行了比较:Seq2Seq baseline
是一个带有注意力机制的sequence-to-sequence
模型。PGNet
模型用一个copy
机制增强了Seq2Seq
。
如下表所示,我们的生成式问答模型在大大超过了以前的生成式方法,这极大地缩小了生成式方法和抽取式方法之间的差距。
20.2.3 问题生成
我们对
answer-aware
的问题生成question generation
任务进行了实验。给定一个input passage
和一个answer span
,我们的目标是生成一个针对答案的问题。SQuAD 1.1
数据集被用于评估。遵从《Learning to ask: Neural question generation for reading comprehension》
,我们将原始训练集拆分为训练集和测试集,并保留原始验证集。我们还遵从《Paragraph-level neural question generation with maxout pointer and gated self-attention networks》
中的数据拆分方式进行实验,即,使用反向的dev-test
拆分。问题生成任务被表述为一个
sequence-to-sequence
问题。第一个segment
是input passage
和答案的拼接,而第二个segment
是被生成的问题。我们在训练集上对
UNILM
微调了10
个epoch
。我们设置batch size = 32
,掩码率为0.7
,学习率为2e-5
。我们采用平滑率为0.1
的标签平滑。其他超参数与预训练相同。在解码过程中,我们将输入截断为
464
个token
并选择包含答案的passage
块。评估指标BLEU-4, METEOR, ROUGE-L
的计算方法与《Learning to ask: Neural question generation for reading comprehension》
中的脚本相同。结果如下表所示。
CorefNQG
是基于一个带有注意力的sequence-to-sequence
模型、以及一个特征丰富的编码器。MP-GSN
使用了一个带门控自注意力编码器的attention-based sequence-to-sequence model
。SemQG
使用两个语义增强的奖励semantics-enhanced reward
来正则化generation
。
UNILM
的性能优于以前的模型,并针对问题生成任务达到了新的SOTA
。生成的问题来改善
QA
:问题生成模型可以从文本语料库中自动收集大量的question-passage-answer
的样本。我们表明,由问题生成模型产生的augmented data
可以改善问答模型。我们生成了
5M
个可回答的样本,并通过修改可回答的样本生成了4M
万个不可回答的样本。我们在生成的数据上对我们的问题回答模型微调一个epoch
。然后在SQuAD 2.0
的数据上再微调两个epoch
。生成的
augmented data
并不是和下游任务的数据混合,而是进行stack-style
的微调。因此,augmented data
微调的模型仅用于初始化。下游任务的目标数据才是作为最终的微调,使得与测试集的数据分布保持一致。如下表所示,由
UNILM
生成的augmented data
改善了问答模型。请注意,在微调过程中,我们对生成的数据集和
SQuAD 2.0
数据集都使用了双向masked language modeling: MLM
作为辅助任务(MLM
原本用于预训练阶段)。与直接使用自动生成的样本相比,双向MLM
带来了2.3
个点的绝对改进。一个可能的原因是,当在augmented data
上进行微调时,辅助任务缓解了灾难遗忘catastrophic forgetting
。这个
2.3
的绝对改进并没有在下表中展示。
20.2.4 响应生成
我们在以文档为基础的
dialog response generation
任务上评估UNILM
。给定一个多轮对话历史、以及一个网络文档web document
作为知识源,系统需要生成一个既适合对话、又反映网络文档内容的自然语言响应。我们微调UNILM
来完成这个任务,其中UNILM
作为一个sequence-to-sequence
模型。第一个segment
(input sequence
)是web document
和对话历史的拼接。第二个segment
(output sequence
)是响应。我们在
DSTC7
的训练数据上对UNILM
微调了20
个epoch
,batch size = 64
。掩码率为0.5
。最大序列长度为512
。在解码过程中,我们使用beam size = 10
的beam search
。产生的响应的最大序列长度被设置为40
。如下表所示,在
DSTC7
共享任务中,UNILM
在所有评估指标上都超过了最好的系统。
20.2.5 GLUE Benchmark
我们在
GLUE benchmark
上评估UNILM
。GLUE
是九个语言理解任务的集合,包括问答、语言可接受性linguistic acceptability
、情感分析、文本相似性、转述检测paraphrase detection
、以及自然语言推理natural language inference : NLI
。我们的模型作为一个双向语言模型被微调。我们使用
Adamax
优化器,学习率为5e-5
,batch size = 32
。最大epoch
数被设为5
。使用一个带预热(预热比例0.1
)的线性学习率衰减的学习率调度。每个任务的last linear projection
的dropout-rate = 0.1
,除了MNLI
的0.3
、CoLA/SST-2
的0.05
。为了避免梯度爆炸问题,梯度范数被剪裁在1.0
以内。我们截断token
使得输入序列长度不超过512
。下表列出了从
benchmark evaluation server
获得的GLUE
测试结果。结果显示,在GLUE
任务中,UNILM
与BERT_LARGE
相比获得了相差无几的性能。
20.2.6 未来工作
UNILM
可以从以下几个方面继续改善:- 我们将通过在
web-scale
的文本语料库上训练更多的epoch
和更大的模型来推动当前方法的极限。同时,我们还将在下游应用上进行更多的实验以及消融实验,从而研究模型能力以及采用相同网络来预训练多种语言建模任务的好处。 - 在我们目前的实验中,我们聚焦于单语
NLP
任务。我们还对扩展UNILM
从而支持跨语言的任务感兴趣。 - 我们将对自然语言理解和自然语言生成任务进行多任务微调,这是
Multi-Task Deep Neural Network: MT-DNN
的自然延伸。
- 我们将通过在
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论