UniLM:用于自然语言理解和生成的统一语言模型预训练《Unified Language Model Pre-training for Natural Language Understanding and Generation》
论文地址:/pdf/1905.03197.pdf
相关博客
【自然语言处理】【文本生成】CRINEG Loss:学习什么语言不建模
【自然语言处理】【文本生成】使用Transformers中的BART进行文本摘要
【自然语言处理】【文本生成】Transformers中使用约束Beam Search指导文本生成
【自然语言处理】【文本生成】Transformers中用于语言生成的不同解码方法
【自然语言处理】【文本生成】BART:用于自然语言生成、翻译和理解的降噪Sequence-to-Sequence预训练
【自然语言处理】【文本生成】UniLM:用于自然语言理解和生成的统一语言模型预训练
【自然语言处理】【多模态】OFA:通过简单的sequence-to-sequence学习框架统一架构、任务和模态
一、简介
预训练语言模型提高了各种自然语言处理任务的表现。预训练语言模型通过使用大量文本进行基于上下文的预测来学习上下文表示,并通过微调来适应下游任务。
不同类型的预训练语言模型具有不同的预测任务和训练目标函数。ELMo\text{ELMo}ELMo学习两个单向LMs\text{LMs}LMs:一个前向LM\text{LM}LM从左到右读取文本,一个后向LM\text{LM}LM则从右到左编码文本。GPT\text{GPT}GPT使用一个left-to-right
的Transformer\text{Transformer}Transformer来逐个词的预测文本序列。作为对比,BERT\text{BERT}BERT利用双向Transformer\text{Transformer}Transformer编码器来融合左和右两个方向上下文来预测遮蔽单词。虽然BERT\text{BERT}BERT显著改善了各种自然语言处理任务,但是双向的本质使得其应用在自然语言生成任务上比较困难。
在本文中,作者提出了一个新的统一预训练语言模型(Unifiedpre-trainedLanguageModel,UniLM)\text{(Unified pre-trained Language Model,UniLM)}(Unifiedpre-trainedLanguageModel,UniLM),其能够被同时应用在自然语言理解和自然语言生成。UniLM\text{UniLM}UniLM是多层Transformer\text{Transformer}Transformer网络,在大规模文本上进行预训练并使用三种无监督目标函数进行优化。特别地,作者设计了一组完型填空任务来基于上下文预测遮蔽单词。这些完型填空任务的不同在于如何定义上下文。对于一个从左到右的单向LM\text{LM}LM,需要被预测遮蔽词的上下文由其左侧的所有词组成。对于一个从右到左的单向LM\text{LM}LM,上下文是由右边的单词组成。对于双向LM\text{LM}LM,上下文是由左和右两边的单词组成。对于sequence-to-sequence
LM\text{LM}LM,目标序列中将要被预测单词的上下是由源序列中的所有单词和目标序列中右侧单词组成。
类似于BERT\text{BERT}BERT,预训练UniLM\text{UniLM}UniLM可以被微调来适应各种下游任务。不同于BERT\text{BERT}BERT主要用于NLU\text{NLU}NLU任务,UniLM\text{UniLM}UniLM可以配置不同类型的自注意力机制来聚合不同类型的上下文,其可以同时用于NLU\text{NLU}NLU和NLG\text{NLG}NLG任务。
提出了UniLM\text{UniLM}UniLM有三个优点。首先,统一的预训练过程带来了用于共享参数和不同类型LM\text{LM}LM架构的单一TransformerLM\text{Transformer LM}TransformerLM,缓解了独立训练和托管多个LM\text{LM}LM的需求。第二,共享参数使得学习到的文本表示更具通用性,因为它们联合优化了不同的语言模型目标函数。第三,除了应用于NLU\text{NLU}NLU任务,UniLM\text{UniLM}UniLM可以用作sequence-to-sequence LM
任务,使其天然适合NLG\text{NLG}NLG,例如摘要和问题生成。
二、统一语言模型预训练
给定一个输入序列x=x1…x∣x∣x=x_1\dots x_{|x|}x=x1…x∣x∣,UniLM\text{UniLM}UniLM为每个token
获得上下文向量表示。如上图所示,使用若干个无监督语言建模目标函数来预训练优化共享Transformer\text{Transformer}Transformer网络,即单向LM\text{LM}LM、双向LM\text{LM}LM和sequence-to-sequence
LM\text{LM}LM。为了控制将要被预测单词的上下文,利用了不同的自注意力mask
策略。
1. 输入表示
输入xxx是一个单词序列,其是用于单向LMs\text{LMs}LMs的一个文本片段,或者是用于双向LM\text{LM}LM和sequence-to-sequence
LM\text{LM}LM的一对文本片段。在输入的开始处添加特殊的序列开始符[SOS]\text{[SOS]}[SOS],并在每个片段的结尾添加特定的序列结束符[EOS]\text{[EOS]}[EOS]。[EOS]\text{[EOS]}[EOS]不仅能够用于标记NLU\text{NLU}NLU任务中的句子边界,还可以用于NLG\text{NLG}NLG任务中模型学习何时结束解码过程。遵循BERT\text{BERT}BERT的输入表示。文本通过WordPiece\text{WordPiece}WordPiece被切分为子词单元。对于每个输入的token
,其向量表示是通过将对于的token
嵌入、位置嵌入和segment
嵌入相加求得。因为UniLM\text{UniLM}UniLM使用多个LM\text{LM}LM任务训练,segment
嵌入扮演着LM\text{LM}LM标识符的作用,即使用不同的segment
嵌入使用不同的LM\text{LM}LM目标函数。
2. 主干网络:多层Transformer\text{Transformer}Transformer
输入向量{xi}i=1∣x∣\{\textbf{x}_i\}_{i=1}^{|x|}{xi}i=1∣x∣被合并为H0=[x1,…,x∣x∣]\textbf{H}^0=[\textbf{x}_1,\dots,\textbf{x}_{|x|}]H0=[x1,…,x∣x∣],然后使用LLL层的Transformer\text{Transformer}Transformer Hl=Transformerl(Hl−1),l∈[1,L]\textbf{H}^l=\text{Transformer}_l(\textbf{H}^{l-1}),l\in[1,L]Hl=Transformerl(Hl−1),l∈[1,L]将其编码为不同抽象等级的上下文表示Hl=[h1l,…,h∣x∣l]\textbf{H}^l=[\textbf{h}_1^l,\dots,\textbf{h}_{|x|}^l]Hl=[h1l,…,h∣x∣l]。在每个Transformer\text{Transformer}Transformer块,多自注意力头被用于聚合前一层的输出向量。对于第lll层Transformer\text{Transformer}Transformer,自注意力头Al\text{A}_lAl的输出计算如下:
Q=Hl−1WlQ,K=Hl−1WlK,V=Hl−1WlV(1)\textbf{Q}=\textbf{H}^{l-1}\textbf{W}_l^Q,\quad \textbf{K}=\textbf{H}^{l-1}\textbf{W}_l^K,\quad\textbf{V}=\textbf{H}^{l-1}\textbf{W}_l^V \tag{1} Q=Hl−1WlQ,K=Hl−1WlK,V=Hl−1WlV(1)
Mij={0,allowtoattend−∞,preventfromattending(2)\textbf{M}_{ij}= \begin{cases} 0,\quad \text{allow to attend} \tag{2}\\ -\infty,\quad \text{prevent from attending} \end{cases} Mij={0,allowtoattend−∞,preventfromattending(2)
Al=softmax(QK⊤dk+M)Vl(3)\textbf{A}_l=\text{softmax}(\frac{\textbf{QK}^\top}{\sqrt{d_k}}+\textbf{M})\textbf{V}_l \tag{3} Al=softmax(dkQK⊤+M)Vl(3)
其中,前一层的输出Hl−1∈R∣x∣×dh\textbf{H}^{l-1}\in\mathbb{R}^{|x|\times d_h}Hl−1∈R∣x∣×dh使用参数矩阵WlQ,WlK,WlV∈Rdh×dk\textbf{W}_l^Q,\textbf{W}_l^K,\textbf{W}_l^V\in\mathbb{R}^{d_h\times d_k}WlQ,WlK,WlV∈Rdh×dk来线性投影为queries
、keys
、values
,掩码矩阵M∈R∣x∣×∣x∣\textbf{M}\in\mathbb{R}^{|x|\times|x|}M∈R∣x∣×∣x∣来决定一对tokens
是由能相关影响。
使用不同的掩码矩阵M\textbf{M}M来控制一个token
能够见到的上下文。采用双向LM\text{LM}LM作为例子。掩码矩阵的所有元素为0,表示所有的tokens
都能够相关访问。
3. 预训练目标函数
使用4中不同的完型填空任务来预训练UniLM\text{UniLM}UniLM。在完型填空任务中,随机选择输入中的一些WordPiece\text{WordPiece}WordPiecetokens
,并使用[MASK]
进行替换。然后,通过Transformer\text{Transformer}Transformer计算其对应的输出向量并将其送入softmax\text{softmax}softmax来预测遮蔽的token
。UniLM\text{UniLM}UniLM的参数是通过最小化预测token
和原始token
的交叉熵损失函数进行学习。值得注意的是,完型填空任务使得所有的LMs\text{LMs}LMs使用相同的训练程序成为可能。
3.1 单向LM\text{LM}LM
使用left-to-right
和right-to-left
两个LM\text{LM}LM目标函数。以left-to-right
LM\text{LM}LM为例。每个token
的表示都仅编码其本身和左边的上下文。举例来说,为了预测x1x2[MASK]x4x_1x_2\text{[MASK]}x_4x1x2[MASK]x4的遮蔽token
,仅会考虑x1,x2x_1,x_2x1,x2和其本身。这是通过对自注意力掩码M\textbf{M}M使用三角来完成的,其中自注意力掩码的上三角部分被设置为−∞-\infty−∞,其他的元素为0。
3.2 双向LM\text{LM}LM
双向LM\text{LM}LM允许所有的token
相关访问。其从两个方向编码上下文信息,并能比单向生成更好的上下文表示。正如等式(2)描述,自注意力掩码M\textbf{M}M是一个0矩阵,允许每个token
能够访问输入序列的所有位置。
3.3 序列到序列LM\text{LM}LM
对于预测,在源片段中的token
能够在片段内访问双向token
,而目标片段中的token
只能访问左边的上下文和源片段的所有tokens
。举例来说,给定一个源片段t1t2t_1t_2t1t2和目标片段t3t4t5t_3t_4t_5t3t4t5,将[SOS]t1t2[EOS]t3t4t5[EOS]\text{[SOS]}t_1t_2\text{[EOS]}t_3t_4t_5\text{[EOS]}[SOS]t1t2[EOS]t3t4t5[EOS]输入模型。t1t_1t1和t2t_2t2可以访问前4个tokens
,包括[SOS]\text{[SOS]}[SOS]和[EOS]\text{[EOS]}[EOS],t4t_4t4则仅能访问前六个tokens
。
上图展示了sequence-to-sequence
LM\text{LM}LM目标函数使用的自注意力掩码M\textbf{M}M。M\textbf{M}M的左半部分设置为0,所有的token
都可以访问第一个片段。右上部分被设置为−∞-\infty−∞来阻塞源片段自目标片段的注意力。此外,对于右下部分,设置右上三角部分为−∞-\infty−∞且其他元素为0。
在训练过程中,随机选择两个文本片段中的tokens
,并使用特殊的[MASK]
进行替换。模型学习来恢复遮蔽的tokens
。因为在训练过程中源片段和目标片段被打包成连续的文本序列,然后鼓励模型来学习两个片段的关系。为了更好的预测目标片段的tokens
,UniLM\text{UniLM}UniLM学习对源片段进行高效编码。因此,用于sequence-to-sequence
LM\text{LM}LM的完型填空任务,也称为encoder-decoder
模型,同时预训练双向encoder
和一个单向decoder
。用作encoder-decoder
模型预训练模型能够轻易应用于广泛的文本生成任务。
4. 在下游NLU\text{NLU}NLU和NLG\text{NLG}NLG任务上微调
对于NLU\text{NLU}NLU任务,微调UniLM\text{UniLM}UniLM作为双向Transformer\text{Transformer}Transformer编码器,类似于BERT\text{BERT}BERT。以文本分类为例。使用[SOS]
的编码向量作为输入的表示,记为h1L\textbf{h}_1^Lh1L,并将其送入随机初始化的softmax
分类器。类别概率计算为softmax(h1LWC)\text{softmax}(\textbf{h}_1^L\textbf{W}^C)softmax(h1LWC),其中WC∈Rdh×C\textbf{W}^C\in\mathbb{R}^{d_h\times C}WC∈Rdh×C是参数矩阵,CCC是类别数量。
对于NLG\text{NLG}NLG任务,使用sequence-to-sequence
任务为例。微调过程类似于使用注意力掩码的预训练。令S1S1S1和S2S2S2表示源序列和目标序列。使用特殊的token
将其连在一起,形成输入[SOS]S1[EOS]S2[EOS]\text{[SOS]S1[EOS]S2[EOS]}[SOS]S1[EOS]S2[EOS]。通过随机遮蔽目标序列中的tokens
来微调模型,并学习恢复遮蔽的tokens
。值得注意的是,[EOS]\text{[EOS]}[EOS]标记这目标序列的结束,其也可以在微调过程中被遮蔽,因为当这种情况发生时,模型学习何时产生[EOS]\text{[EOS]}[EOS]来终止目标序列的生成过程。