这篇文章是腾讯人工智能实验室发表在EMNLP 2017上的文章,基于细粒度的模板解数学应用题。
贡献点
- 学习问题文本到模板片段的映射,充分利用模板的信息。
- 为每个模板自动构建sketch。
- 实现了一个两阶段的系统,包括模板检索和对齐排序。
整体思路
总结下来,该工作主要分为三个部分:
1. 模板归纳 sketch for template
训练集中的题目包含文本和表达式。
- 首先,把文本中的操作数映射到,对表达式中的具体操作数也用来代替,转换成表达式模板。
- 每个模板可能对应多个题目,将相同模板的题目归为一类。抽取其特征,包括单位、问题关键词、文本表达等来表征这个模板。这里的文本表达是对应于模板片段的,即细粒度的模板匹配。【如下图】
2. 训练过程
有了每个模板对应的归纳特征,我们就想要对训练集中的数据进行训练。训练的过程分为两个部分,一部分是训练选择模板的正确性,另一部分是在选择候选的模板之后,将操作数填到模板中的位置正确性。对于这两个部分的训练,损失函数都是使用了Ranking SVM的方法。
定义选择模板的损失:
其中的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个模板作为候选模板。
定义操作数填到模板各位置上的损失:
上式想要达到的目标就是尽可能的让操作数在模板的正确的位置上。
3. 测试过程
在参数v^T训练好之后,我们就可以利用这个模型,来判断测试集中的题目属于哪个模板的概率比较大。以及题目中的操作数应该如何填在模板的slot当中。
对应这两个问题,这里应该定义两个概率函数。
一个是计算题目x_i属于模板t_j的概率:
一个是确定该题目对应于模板的位置(对齐操作):
分析
这篇文章基于模板匹配来解决Math Word Problems,本质上还是属于相似度比较的范畴,即计算待解题目和训练集中的模板的相似度,找到相似度最高的模板,然后将题目文本中的操作数对应到解题模板中去。得到解题的表达式,最终得到结果。
文中的方法和他所比较的方法都存在一个问题,就是在一个模板对应的题目很少的情况下,最终得到的准确率结果就比较差。因为如果一个模板对应的题目很少,那么对于这个模板的训练就不足,那么久很难得到好的结果。
关于这一点,之前的文章中也有讲到混合模型,就是当相似度大于一个阈值的时候,就是用相似度比较的方法,当相似度小于阈值的时候,就是用端到端的深度学习方法。这篇文章为什么没有使用呢?
文章中值得借鉴的一点就是:对模板进行了细粒度的分析,对于模板中所出现的操作符及其对应的两个操作数,都会找一些与其对应的文本表达。