本文提出了一种通用的方法,通过自动生成大量的数据并进行预训练,来向语言模型直接注入数值推理的能力。其首先通过模板生成两类数据:
(1) Numerical Data,全部由数值计算构成的问答文本,例如Q:max(100, 200),A:200;
(2) Textual Data,包含上下文的问答文本,这些文本包含一段上下文以及几个数值相关的问题和答案。
基于这些自动生成的问答样本,本文构造了一个简单的基于BERT的生成模型进行继续预训练。为了防止模型丢失原本的语言知识,本文在继续预训练阶段加入了原始的MLM损失。实验证明,该方法可以有效提升模型在数值推理任务上的表现,成功向模型注入了数值计算的能力。
贡献
一种方法: 将数值推理技巧融入到预训练语言模型中。
一种架构: 具有提取和生成能力的预训练语言模型架构。
一种框架: 为数值推理生成数字和文本合成数据的框架。
文本的数值推理
方法
-
A Symbolic approach: 模型输入为文本和问题,输出为数值表达式,然后通过一个额外的符号计算器去计算答案。
缺点:
- 因为数值表达式是离散的,且空间是组合增长的,模型必须学会使用不可微分的操作在空间中搜索,所以会导致很难优化。
- 数值表达式仅限于数值答案,但是在DROP数据集中很多问题需要进行数值计算,但是最终的答案是一段文本跨度。
-
A distributed approach: 模型直接给出答案。如果答案是一个文本跨度,模型直接在输入文本中进行抽取;如果答案是输入文本中没有的数字,那就需要模型去生成答案。
优点:
训练简单.
缺点:
模型必须学会在相对较小的目标数据集上进行数值计算。会导致性能下降。
-
A hybrid approach: 用专用模块去处理有限的数值计算,增强标准的抽取式问答模型。
-
输入含有 n 1 n_1 n1 个token的 q q q 和含有 n 2 n_2 n2 个token的 c c c 。
-
模型使用预训练语言模型计算输入的上下文表示< [CLS] q [SEP] c [SEP] >。
L = L M ( q , c ) L = LM(q,c) L=LM(q,c) -
将 L L L 传入多个 h e a d head head 中估计给定输入并以 h h h 作为条件的答案概率 p ( a ∣ q , c , h ) p(a|q,c,h) p(a∣q,c,h) 。 h e a d head head 对应于不同的答案类型。
- Context head head: 使用一个前馈神经网络 F F c ( L ) FF_c(L) FFc(L) 计算所有在context 中的跨度分布。
- Question span head: 使用一个前馈神经网络 F F q ( L ) FF_q(L) FFq(L)计算所有在question 中的跨度分布。
- Count head: 使用一个前馈神经网络 F F c n t ( L ) FF_{cnt}(L) FFcnt(L) 计算数字{0,…,9}的分布。
- Arithmetic head: 使用一个前馈神经网络 F F c m b ( L ) FF_{cmb}(L) FFcmb(L) 计算在context 上所有数字的组合分布。
-
为了决定对input 使用哪个head ,设置type head 使用一个前馈神经网络 F F t y p ( L ) FF_{typ}(L) FFtyp(L) 计算 p h e a d ( h ∣ a , c ) p_{head}(h|a,c) phead(h∣a,c) 。
-
模型最终的答案概率为:
p ( a ∣ q , c ) = ∑ h ∈ h e a d s p h e a d ( h ∣ c , q ) ⋅ p ( a ∣ c , q , h ) p(a|q,c) = \sum_{h \in heads} p_{head}(h|c,q)\cdot p(a|c,q,h) p(a∣q,c)=h∈heads∑phead(h∣c,q)⋅p(a∣c,q,h)
训练是通过列举所有的头得到的答案完成的,然后最大化边缘概率。
-
现存模型的不足
- 输出空间限制模型只能计数到 9 。
- 扩展数值计算的空间是不可取的,因为训练涉及到边缘化所有导致正确答案的表达式。而且由于数值表达式空间呈指数型增长,会导致模型在空间搜索困难。
- 把数值计算放在额外的计算器上会导致建模困难,因为文本和数值计算之间可能会有互动。
GenBERT: A BERT-based Model for Generating Arbitrary Outputs
本质上是一个在内部进行数值计算的简单的基于Bert的生成模型,在内部执行数值计算。模型的encoder是一个标准的transformer encoder,用Bert权重进行初始化。
将encoder 和decoder的权重结合,这样decoder也能用到encoder的表示。
由于encoder和decoder权重捆绑在一起,为了使得模型学习到不同的表示,所以添加一个全连接层
F
F
e
n
c
FF{enc}
FFenc 将encoder上下文表示*
L
e
n
c
L_{enc}
Lenc转换为
H
e
n
c
H_{enc}
Henc
H
e
n
c
=
l
a
y
e
r
−
n
o
r
m
(
g
e
l
u
(
W
⋅
L
e
n
c
)
)
H_{enc} = layer-norm(gelu(W \cdot L_{enc}))
Henc=layer−norm(gelu(W⋅Lenc))
相同的,在decoder也添加一个
F
F
d
e
c
FF_{dec}
FFdec 。为了进一步区分encoder和decoder,对input和outputs采用不同的开始与结束tokens。输入长度为m的
a
=
(
a
1
,
.
.
.
,
a
m
)
a = (a_1,...,a_m)
a=(a1,...,am),输出为长度为m+2的< [SOS] a [EOS] >* 。输出被传送给decoder和
F
F
d
e
c
FF_{dec}
FFdec 得到
H
d
e
c
H_{dec}
Hdec 。
最终答案的概率为
p
d
e
c
(
<
a
>
∣
c
,
q
)
=
∏
i
=
0
m
p
d
e
c
(
a
i
+
1
∣
a
0
,
.
.
.
a
i
,
c
,
q
)
p_{dec}(<a>|c,q) = \prod_{i = 0}^{m}p_{dec}(a_{i+1}|a_0,...a_i,c,q)
pdec(<a>∣c,q)=i=0∏mpdec(ai+1∣a0,...ai,c,q)
为了提升对数字数据的预训练,做了两个额外的修改。
Digit Tokenization (DT)
传统的分词标记对数字的处理与其他标记没有区别。但是,在计算值的时候直接使用数字会更加简单。所有,本工作逐位标记数字。
Random shift (RS)
原始的transformer对每个token使用绝对位置嵌入。但是当训练类似*“1086.1-2.54+343.8”* 类似的短输入时,模型可能会过拟合,导致只有数字位于输入序列开头时才进行数值计算。为了避免这种情况,当输入长度 n 1 + n 2 + 3 < 512 n_1 + n_2 +3 < 512 n1+n2+3<512 时,将所有位置随机移动一个整数 ( 0 , 1 , . . . , 512 − ( n 1 + n 2 + 3 ) ) (0,1,...,512-(n_1 +n_2 +3)) (0,1,...,512−(n1+n2+3))。
Training
损失
L
m
o
d
e
l
L_{model}
Lmodel
L
m
o
d
e
l
=
−
l
o
g
(
p
d
e
c
⋅
p
d
e
c
(
<
a
>
)
+
∑
h
∈
q
,
c
p
h
⋅
∑
(
i
,
j
)
∈
S
p
h
(
i
,
j
)
)
L_{model} = -log(p_{dec} \cdot p_{dec(<a>)} + \sum_{h \in q,c}p_h \cdot \sum_{(i,j) \in S}p_h(i,j))
Lmodel=−log(pdec⋅pdec(<a>)+h∈q,c∑ph⋅(i,j)∈S∑ph(i,j))
在DROP对模型的数值推理能力进行评估,获得EM 46.1% ,F1 49.3 ,比之前的模型低了20个百分点。所以仅由DROP数据集学习数值推理技巧时困难的。
为了解决上述问题,本工作将自动生成训练数据,在对模型进行DROP训练之前,学习数值推理技巧。
Pre-training Tasks for Numerical Skills
Generating Numerical Data(ND)
集中于学习数值表达式和数值操作,不涉及文本内容。以下是设置的数据模板。
Generating Textual Data(TD)
用框架自动生成样本。提取描述容器拥有的实体数量变化的模板,并从这些模板自动生成问题上下文对。
生成 TD 数据如下:
Template extraction
使用Hosseini等人描述的过程将其标记抽象为以下类别:数字(NUM)、实体(ENT)、容器(CONT)和属性(ATTR)。此外,动词被抽象为六类,每一类对应容器拥有的实体数量的不同变化。
计算抽取的模板在数据中出现的频率,使用 top-12 生成段落。
Passage generation
使用抽取模板生成句子。
-
构建一个小词汇表(<100个单词),它将类别映射到特定于领域的单词,并使用以下程序生成段落。
-
对3-6个模板进行替换,逐个实例化。每个模板的实例化都是通过从词汇表(概率为1 - p)和之前生成的句子(概率为p)中均匀抽样来实现的。
-
为了避免不相关句子的集合,使用之前使用过的值的概率设为p = 0.7
Question generation
创建了13个问题模板。
Training GenBERT on Synthetic Data
生成1M 训练样本,10K 验证样本对 ND 数据进行预训练。
生成2.5M* 训练样本,10K 验证样本对 TD 数据进行训练。
对于两个数据集,采用 L m o d e l L_{model} Lmodel 计算损失。
为了确保模型不会失去其语言理解能力,采用了一个 multi-task,并包括一个来自BERT的标准 **masked LM **目标.
-
给定一个 masked token sequence <m> ,计算上下文表示 L e n c L_{enc} Lenc 。
-
传给 F F m l m FF_{mlm} FFmlm ,对每一个token索引,输出原始token( a i a_i ai)的概率 p ( a i ∣ i , < m > ) p(a_i|i,<m>) p(ai∣i,<m>) 。
-
MLM 损失
L m l m ( < m > ) = m e a n i ∈ m a s k e d − l o g ( p ( a i ∣ i , < m > ) ) L_{mlm}(<m>) = mean_{i \in masked} - log(p(a_i|i,<m>)) Lmlm(<m>)=meani∈masked−log(p(ai∣i,<m>)) -
在对ND和TD预训练的同时,对目标进行优化
L m o d e l ( X N D ) + L m o d e l ( X T D ) + λ ⋅ L m l m ( X M L M ) L_{model}(X_{ND}) + L_{model}(X_{TD}) + \lambda \cdot L_{mlm}(X_{MLM}) Lmodel(XND)+Lmodel(XTD)+λ⋅Lmlm(XMLM)
Experimental Evaluation
模型
-
G E N B E R T + N D GENBERT_{+ND} GENBERT+ND: trained on numerical data.
-
G E N B E R T + N D − L M GENBERT_{+ND-LM} GENBERT+ND−LM:trained on ND without the additional MLM loss.
-
G E N B E R T + N D − L M − D T GENBERT_{+ND-LM-DT} GENBERT+ND−LM−DT:trained on ND usin gwordpiece tokenization, without the MLM loss.
-
G E N B E R T + N D − L M − R S GENBERT_{+ND-LM-RS} GENBERT+ND−LM−RS:trained on ND without MLM loss and random shift (RS).
-
G E N B E R T + T D GENBERT_{+TD} GENBERT+TD:trained on textual data (TD).
-
G E N B E R T + N D + T D GENBERT_{+ND+TD} GENBERT+ND+TD: G E N B E R T + N D GENBERT_{+ND} GENBERT+ND trained on both ND and TD.
Pre-training Performance
- 在ND、TD、ND+TD 情况下,模型准确率达到 **96% **。所以一个预训练语言模型确实可以从生成的数据中学习技能。
- 在 ND - LM - DT 模型上并没有学到解决数值数据任务。结果表明了在传统分词上使用DT的有效性。(与 ND - LM 对比)
Numerical Reasoning Performance
Results on DROP
引入的技巧是否健壮?
- G E N B E R T + N D GENBERT_{+ND} GENBERT+ND 与 G E N B E R T + T D GENBERT_{+TD} GENBERT+TD 的结果都比 G E N B E R T GENBERT GENBERT 好,表明ND和TD的有效性。而 G E N B E R T + N D + T D GENBERT_{+ND+TD} GENBERT+ND+TD 结果更好,表明 TD 和 ND 是互补的。
- G E N B E R T + N D − L M GENBERT_{+ND-LM} GENBERT+ND−LM 和 G E N B E R T + N D − L M − R S GENBERT_{+ND-LM-RS} GENBERT+ND−LM−RS 的结果表明 MLM 损失的重要性及RS的有效性。
- 在spans类型问题上, M T M S N B A S E MTMSN_{BASE} MTMSNBASE 比 G E N B E R T + N D + T D GENBERT_{+ND+TD} GENBERT+ND+TD 好是因为 M T M S N MTMSN MTMSN 有专门的模块处理这类问题。
Generalization to MWP (zero-shot)
G E N B E R T + N D + T D GENBERT_{+ ND + TD} GENBERT+ND+TD在2到3个词之间的性能下降明显小于 G E N B E R T + N D GENBERT_{+ ND} GENBERT+ND和 G E N B E R T + T D GENBERT_{+ TD} GENBERT+TD。 这表明ND和TD均可用于提高鲁棒性。
Error analysis
- 问题没有涵盖在预训练的模板中,或不涉及数字。
- 模型预测不准确。
Reading Comprehension Performance
在SQuAD上对模型进行评估。 G e n B E R T + T D + N D GenBERT_{+TD+ND} GenBERT+TD+ND 与 B E R T BERT BERT 结果几乎一样。
GenBERT With Other Architectures
经验表明,可以将数值推理技能注入到预训练的LM中,从而在DROP和MWP上获得良好的性能,同时在标准RC数据集上保持高性能。此外,得到的权重可用于初始化数值推理模型。
Conclusions
- GENBERT is able to solve pre-training tasks for numerical reasoning.
- Pre-training on these tasks provides GENBERT with 1) skills to reach performance that matches state-of-the-art models of comparable size on DROP, a standard numerical reasoning dataset, as well as 2) the ability to generalize to math word problem (MWP) datasets.
- GENBERT learns these numerical skills while maintaining high performance on SQuAD, a standard reading comprehension dataset.
- Initializing models for numerical reasoning with GENBERT’s weights improves their original performance.