这篇文章是腾讯人工智能实验室发表在EMNLP 2017上的文章,基于细粒度的模板解数学应用题。

贡献点

  1. 学习问题文本到模板片段的映射,充分利用模板的信息。
  2. 为每个模板自动构建sketch。
  3. 实现了一个两阶段的系统,包括模板检索和对齐排序。

整体思路

总结下来,该工作主要分为三个部分:

1. 模板归纳 sketch for template

训练集中的题目包含文本和表达式。

  • 首先,把文本中的操作数映射到n1,n2,...n_1, n_2, ...,对表达式中的具体操作数也用n1,n2,...n_1, n_2,...来代替,转换成表达式模板。
  • 每个模板可能对应多个题目,将相同模板的题目归为一类。抽取其特征,包括单位、问题关键词、文本表达等来表征这个模板。这里的文本表达是对应于模板片段的,即细粒度的模板匹配。【如下图】
    论文笔记 | Learning Fine-Grained Expressions to Solve MathWord Problems

2. 训练过程

有了每个模板对应的归纳特征,我们就想要对训练集中的数据进行训练。训练的过程分为两个部分,一部分是训练选择模板的正确性,另一部分是在选择候选的模板之后,将操作数填到模板中的位置正确性。对于这两个部分的训练,损失函数都是使用了Ranking SVM的方法。

定义选择模板的损失:
L=12vt2+Cil(vtTf(xi,tj)+vtTf(xi,tl))L = \frac{1}{2}||v_t||^2 + C \sum_{i} l(v_t^T f(x_i, t_j)^+ - v_t^T f(x_i, t_l)^-)

其中的l(t) = max(0, 1-t)^2,+表示预测正确。这里的f(x_i, t_j)表示特征向量,特征是根据题目x_i和模板t_j来人工构造的。v_t^T表示可学习参数。所以上式的目标就是要使得题目x_i属于模板t_j的可能性大于属于其他模板的可能性。为每个题目选择可能性最大的top-n个模板作为候选模板。

定义操作数填到模板各位置上的损失:
L=12va2+Cil(vaTf(xi,ak)+vaTf(xi,al))L = \frac{1}{2}||v_a||^2 + C \sum_{i} l(v_a^T f(x_i, a_k)^+ - v_a^T f(x_i, a_l)^-)

上式想要达到的目标就是尽可能的让操作数在模板的正确的位置上。

3. 测试过程

在参数v^T训练好之后,我们就可以利用这个模型,来判断测试集中的题目属于哪个模板的概率比较大。以及题目中的操作数应该如何填在模板的slot当中。

对应这两个问题,这里应该定义两个概率函数。

一个是计算题目x_i属于模板t_j的概率:
p(tjxi;vt)=exp(vtf(xi,tj))tjTexp(vtf(xi,tj)) p(t_j|x_i; v_t) = \frac{exp(v_t \cdot f(x_i, t_j))}{\sum_{t_j' \in T}exp(v_t \cdot f(x_i, t_j'))}

一个是确定该题目对应于模板的位置(对齐操作):

p(ak)=exp(vaf(xi,ak))akAexp(vaf(xi,ak))p(a_k) = \frac{exp(v_a \cdot f(x_i, a_k))}{\sum_{a_k' \in A}exp(v_a' \cdot f(x_i, a_k'))}

分析

这篇文章基于模板匹配来解决Math Word Problems,本质上还是属于相似度比较的范畴,即计算待解题目和训练集中的模板的相似度,找到相似度最高的模板,然后将题目文本中的操作数对应到解题模板中去。得到解题的表达式,最终得到结果。

文中的方法和他所比较的方法都存在一个问题,就是在一个模板对应的题目很少的情况下,最终得到的准确率结果就比较差。因为如果一个模板对应的题目很少,那么对于这个模板的训练就不足,那么久很难得到好的结果。

关于这一点,之前的文章中也有讲到混合模型,就是当相似度大于一个阈值的时候,就是用相似度比较的方法,当相似度小于阈值的时候,就是用端到端的深度学习方法。这篇文章为什么没有使用呢?

文章中值得借鉴的一点就是:对模板进行了细粒度的分析,对于模板中所出现的操作符及其对应的两个操作数,都会找一些与其对应的文本表达。

相关文章: