Point to the Expression: Solving Algebraic Word Problems using the Expression-Pointer Transformer Model
Proceedings of the 2020 Conference on EMNLP, pages 3768–3779,November 16–20, 2020.
Abstract
针对 NLP 中的代数词问题(algebraic word problems),已有的研究提出使用“Op(operator运算符/operand操作数)” tokens
作为输入/输出的单元。这样的模型需要解决两个问题:
- expression fragmentation
- operand-context separation
对此,本文提出一个纯神经模型 Expression-Pointer Transformer(EPT),使用(1)“Expression” token
和(2)operand-context pointers
来生成解方程。
文章贡献主要有:
- 提出EPT,解决上述两个问题;
- 性能与手工设计特征的模型相当,比现有纯神经模型有40%的性能提升 。
1 Introduction
1.1 任务介绍
现有神经模型与基于手工设计特征的模型有相当大的性能差距。
1.2 两个问题
- expression fragmentation 表达式分片问题
该问题(上图左加粗虚线框)是指expression tree
(表示方程式的计算结构)的分割。- 问题出现
将Op
而不是整个expression tree
作为模型的输入/输出单元,就会出现此问题。例如:图1(a), 使用Op tokens
作为模型输入,将树结构分解为运算符(“ × \times ×”)和操作数(“ x 1 x_1 x1” 和 “ 2 2 2”) - 解决
本文则使用“Expression” token
( × ( x 1 , 2 ) ×(x1, 2) ×(x1,2)),可以显式的捕捉树结构作为一个整体,如图1©
- 问题出现
- operand-context separation 操作数-上下文分离问题
该问题是指operand(操作数)
和与operand
相关的数字之间被切断联系——operand
与上下文分离- 问题出现
代数词 problem 中陈述的数字代入抽象符号以进行概括时,会出现此问题。例如:图1(b),使用Op token
时,数字8变为抽象符号“ N 1 N_1 N1”。 - 解决
当使用“Expression” token
时,数字8并没有被转化为符号。而是建立一个指针,指向数字8在代数词问题中出现的位置。因此,使用这样的“operand-context pointer”
可以使模型预测operand
时利用其上下文信息,如图1©所示。
- 问题出现
2 Related work
2.1 expression fragmentation 表达式分片问题
研究人员试图通过使用两步过程或使用单步seq-to-seq模型来反映operator
和operand
之间的关系信息。
-
两步过程(早期)
- step1:通过对预定义的模板进行分类来选择
operator
step2:将operand
应用于在第一步中选择的模板。 - 其他模型首先选择
operand
,然后在第二步中用operator
构造表达式树。
- step1:通过对预定义的模板进行分类来选择
-
单步seq-to-seq模型(近期)——学习
operator
和operand
之间的隐式关系
这些seq2seq方法在生成operator
时考虑了operand
的关系信息,但是仍未解决在生成operand
时缺少operator
的关系信息的问题。- Chiang和Chen(2019)构建了一个seq2seq模型,该模型使用堆栈上的push/pop动作来生成
operator/operand tokens
。 - Amini等(2019)建立了一个seq2seq模型,以在生成所需的
operand tokens
后立即生成operator token
。
- Chiang和Chen(2019)构建了一个seq2seq模型,该模型使用堆栈上的push/pop动作来生成
2.2 operand-context separation 操作数-上下文分离问题
- 构建手工特征来获取单词的语义内容
- 例如给定数字的单位或数字之间的依赖关系。
- 缺点:设计手工输入特征非常耗时,并且需要领域专业知识。
- 采用分布式表示和神经模型来自动学习
operand
的数字上下文- Huang 使用了一个
pointer-generator
网络,该网络可以指向给定数学问题中number的上下文。缺点是性能无法与使用手工特征的最新模型相媲美。 - 本文通过添加额外的指针(可以利用
operand
和相邻的Expression tokens
的上下文信息),可以提高纯神经模型的性能。
- Huang 使用了一个
3 EPT: Expression-Pointer Transformer
总体采用encoder-decoder架构:
- encoder:预训练模型ALBERT
- input: tokenized word problem
- output:
ALBERT编码器的隐状态向量
(表示给定问题的数字上下文)
- decoder:Transformer Decoder
- input:
Expression tokens
和ALBERT编码器的隐状态向量
- output:
Expression tokens
- input:
3.1 Input vector of EPT’s decoder
symbol | meaning | dimension |
---|---|---|
v i \mathbf{v}_{i} vi | The input vector of i i ith Expression token | D |
f i \mathbf{f}_{i} fi | operator embedding | D |
a i j \mathbf{a}_{i j} aij | the j j jth operand embedding of i i ith Expression | D |
-
v
i
\mathbf{v}_{i}
vi
v i = F F in ( Concat ( f i , a i 1 , a i 2 , ⋯ , a i p ) ) \mathbf{v}_{i}=\mathrm{FF}_{\text {in }}\left(\text { Concat }\left(\mathbf{f}_{i}, \mathbf{a}_{i 1}, \mathbf{a}_{i 2}, \cdots, \mathbf{a}_{i p}\right)\right) vi=FFin ( Concat (fi,ai1,ai2,⋯,aip))其中, F F ∗ \mathrm{FF}_{*} FF∗表示前馈线性层,而 Concat ( ⋅ ) \text { Concat }(\cdot) Concat (⋅)表示括号内所有向量的级联 -
f
i
\mathbf{f}_{i}
fi
f i = LN f ( c f E f ( f i ) + P E ( i ) ) \mathbf{f}_{i}=\operatorname{LN}_{\mathrm{f}}\left(c_{\mathrm{f}} \mathrm{E}_{\mathrm{f}}\left(f_{i}\right)+\mathrm{PE}(i)\right) fi=LNf(cfEf(fi)+PE(i))其中, E ∗ ( ⋅ ) \mathrm{E}_{*}(\cdot) E∗(⋅)表示嵌入向量的查找表, c ∗ ( ⋅ ) \mathrm{c}_{*}(\cdot) c∗(⋅)表示标量参数, L N ∗ ( ⋅ ) \mathrm{LN}_{*}(\cdot) LN∗(⋅)表示层归一化, P E ∗ ( ⋅ ) \mathrm{PE}_{*}(\cdot) PE∗(⋅)表示位置编码。 -
a
i
j
\mathbf{a}_{i j}
aij
为了反映operand
的上下文信息, a i j \mathbf{a}_{i j} aij有三种可能的来源(sources):- problem-dependent numbers
即代数问题中提供的数字(如表1中的“20”)。为了计算一个number的 a i j \mathbf{a}_{i j} aij,重用对应于该number tokens
的编码器隐状态向量,如下所示:
a i j = L N a ( c a u n u m + e a i j ) \mathbf{a}_{i j}=\mathrm{LN}_{\mathrm{a}}\left(c_{\mathrm{a}} \mathbf{u}_{\mathrm{num}}+\mathbf{e}_{a_{i j}}\right) aij=LNa(caunum+eaij) 其中 u ∗ \mathrm{u}_{*} u∗为代表source的向量, e a i j \mathbf{e}_{a_{i j}} eaij为数字 a i j \mathbf{a}_{i j} aij对应的编码器隐状态向量。 - problem-independent constants
即问题中没有说明的预定义数字(如100经常用于百分位数)。为计算一个常数的 a i j \mathbf{a}_{i j} aij,使用一个查找表 E c \mathrm{E}_{c} Ec,如下所示:
a i j = L N a ( c a u const + E c ( a i j ) ) \mathbf{a}_{i j}=\mathrm{LN}_{\mathrm{a}}\left(c_{\mathrm{a}} \mathbf{u}_{\text {const }}+\mathrm{E}_{\mathrm{c}}\left(a_{i j}\right)\right) aij=LNa(cauconst +Ec(aij))其中, L N a \mathrm{LN}_{\mathrm{a}} LNa、 c a c_{\mathrm{a}} ca在不同的源之间共享。 - the result of the prior Expression token
即在 i i ith Expression之前生成的Expression (如R0)。为了计算result的 a i j \mathbf{a}_{i j} aij,使用如下的位置编码:
a i j = L N a ( c a u e x p r + P E ( k ) ) \mathbf{a}_{i j}=\mathrm{LN}_{\mathrm{a}}\left(c_{\mathrm{a}} \mathbf{u}_{\mathrm{expr}}+\mathrm{PE}(k)\right) aij=LNa(cauexpr+PE(k))其中,k是先前的Expression
a i j \mathbf{a}_{i j} aij的索引。
- problem-dependent numbers
3.2 Output layer of EPT’s decoder
- 预测下一个
operator
f i + 1 \mathbf{f}_{i+1} fi+1:
f i + 1 = arg max f σ ( f ∣ F F out ( d i ) ) f_{i+1}=\arg \max _{f} \sigma\left(f \mid F F_{\text {out }}\left(\mathbf{d}_{i}\right)\right) fi+1=argfmaxσ(f∣FFout (di)) - 预测下一个
operand
a i + 1 , j \mathbf{a}_{i+1,j} ai+1,j:
(1) 输出层会应用operand-context pointers
,这受指针网络 pointer networks 的启发。在 pointer networks 中,输出层使用对候选向量的 attention 来预测下一个 token。 EPT根据operand
的来源,以三种不同的方式收集the next (i+1)th Expression
的候选向量:
e k for the k th number in the problem , d k for the k th Expression output , E c ( x ) for a constant x \begin{aligned} &\mathbf{e}_{k} \quad\quad \text {for the } k \text {th number in the problem }, \\ &\mathbf{d}_{k} \quad\quad \text {for the } k \text {th Expression output },\\ &\mathrm{E}_{\mathrm{c}}(x)\quad \text {for a constant } x \end{aligned} ekfor the kth number in the problem ,dkfor the kth Expression output ,Ec(x)for a constant x
(2) EPT预测the next jth operand
a i + 1 , j \mathbf{a}_{i+1,j} ai+1,j。
令 A i j A_{ij} Aij为矩阵,其行向量就是上述候选向量。然后计算key
矩阵 K i j K_{ij} Kij上query
向量 Q i j Q_{ij} Qij的注意力来预测 a i + 1 , j \mathbf{a}_{i+1,j} ai+1,j。
Q i j = F F query , j ( d i ) K i j = F F key , j ( A i j ) a i + 1 , j = arg max a σ ( a ∣ Q i j K i j ⊤ D ) \begin{aligned} Q_{i j} &=\mathrm{FF}_{\text {query }, j}\left(\mathbf{d}_{i}\right) \\ K_{i j} &=\mathrm{FF}_{\text {key }, j}\left(\mathbf{A}_{i j}\right) \\ a_{i+1, j} &=\arg \max _{a} \sigma\left(a \mid \frac{Q_{i j} K_{i j}^{\top}}{\sqrt{D}}\right) \end{aligned} QijKijai+1,j=FFquery ,j(di)=FFkey ,j(Aij)=argamaxσ(a∣DQijKij⊤)loss:将operator
的loss和其所需参数
的loss相加来计算Expression
的损失。所有loss函数都是通过cross-entropy with the label smoothing
计算的。
4 Experimental Setup
4.1 Metric and Datasets
使用三个公开可用的英语代数单词问题数据集:
- ALG514 —— 高复杂度
- DRAW-1K —— 高复杂度
- MAWPS —— 低复杂度
4.2 Baseline and ablated models
EPT 与五个现有 SoTA 模型对比,这五个模型分为三种类型:使用手工特征的模型,纯神经模型,混合模型。
消融实验:
4.3 Implementation details
- PyTorch 1.5
- encoder:使用了三种不同尺寸的ALBERT模型:albert-base-v2,albert-large-v2和albert-xlarge-v2。在训练期间固定了编码器的嵌入矩阵,以保留嵌入矩阵中的世界知识和稳定整个学习过程。
- decoder:堆叠了六个解码器层,并在不同层之间共享参数以减少内存使用。
- 将输入向量的维数 D D D设置为编码器隐状态向量的维数。
- 在训练阶段使用 teacher forcing,在评估阶段使用 3 beams 进行 beam search。
- EPT的超参数,除训练时期,批量大小,预热时期和学习率外,其他参数均遵循ALBERT模型的参数。具体设置见论文。
- optimizer:LAMB,使用带 warm-up 的 linear decay
5 Result and Discussion
5.1 Comparison study 比较研究
EPT优于现有的纯神经模型的一个可能的解释是使用了operand
的上下文信息。
使用
symbols
的四种方式是:(1)泛化常见模式,(2)表示方程中的未知数,(3)表示函数的一个参数,(4)替换任意标记。
- 现有的神经模型——使用
symbols
来提供与问题相关(problem-dependent)的数字或未知数的抽象,即通过应用模板分类或机器学习技术,应用了(1)和(2)。 - EPT模型——使用
Expression tokens
处理(3),使用operand-context pointers
处理(4)。
5.2 Ablation study 消融研究
表6给出了误差分析的结果:
在高复杂度数据集上,性能增强有两种可能的解释:
- 使用
Expression tokens
,解决了生成求解方程时的expression fragmentation
问题。 - 使用和
operand-context pointers
解决了选择操作数时operand-context separation
问题。
错误的例子(case 3 和 case 4)可以分为两类:比较误差和时间顺序误差。
6 Conclusion
本文的工作证明了“在解决代数词问题中,降低使用手工设计特征的高昂成本”的可能性。