ACL-2022 | 字節跳動與新加坡科技與設計大學提出:基於演繹推理的數學解題

語言: CN / TW / HK

論文鏈接:http://arxiv.org/abs/2203.10316

研究動機

作為一類需要解題的推理過程,在數學解題任務中比較適合應用演繹推理模型。我們嘗試在此任務上做一些多步的推理 (multi-step reasoning), 使得模型預測能夠提供相對可解釋的預測結果。

問題描述

在給定一個數學問題的情況下,我們進行算術解答並得到答案。

Question: In a division sum , the remainder is 8 and the divisor is 6 times the quotient and is obtained by adding 3 to the thrice of the remainder. What is the dividend?

Answer: 129.5

Mathematical Expression: ((8×3+3)×(8×3+3)÷6)+8

上面的這個(取自於 MathQA [3] dataset)例子中,我們需要得到最後被除數 (dividend) 129.5。同時數據集也給出計算的表達式,可以用來當作監督信號。這種多步的表達式,也便於驗證 multi-step reasoning 的方法。這邊我們也主要考慮一些基本的數學運算符,包括加 (+) 減 (-) 乘 (×) 除 (÷) 以及冪 (^),其他更復雜的運算其實可以分解成這些基本的運算。

現有方法

目前流行的數學解題方法主要是 sequence-to-sequence (Seq2Seq) 以及 sequence-to-tree (Seq2Tree) 的方法。針對 Seq2Seq 的方法,優點是簡單直接,缺點是需要有非常大量的數據才得到好的效果,否則效果不如結構化模型 Seq2Tree。Seq2Tree 主要的代表工作是 Goal-Driven Tree-Structure (GTS) [4],目前也是大家比較頻繁借鑑的工作。同時 Seq2Tree 也有可以改進的地方,如下圖所示,生成的過程是一個前序遍歷 (pre-order traveral) 的過程,會先生成頂端的數學運算符 (operator),然後是 operator 左邊的運算,最後是右邊的運算。生成的過程相對來説比較不符合直覺,並不是一個一步步計算的過程。此外,我們可以看到同一個表達式 8×3+3 被生成了 2 次,然而我們其實是可以重複使用這個表達式的結果。但在 Seq2Tree 的方法中,我們無法這樣去使用,必須重新生成整個子樹結構。

演繹推理

我們的思路其實比較直接,通過一步步的方法得到最後的結果,並且每一步的生成可以對應到文中相應的描述。

如上圖所示,我們只需要對所提供的表達式拆成多步運算即可。前兩步的運算,我們得到除數 divisor,第三步我們得到商 quotient ,最後兩步則得到最後的被除數 dividend。對於每一步,我們能夠找到文中相對應的文本描述,總的來説,有以下的優點:

  1. 通過重複利用已有的結果計算,減少了總的計算步數。

  2. 一步步的計算過程相對於 Seq2Tree 的生成更加可解釋。

  3. 生成是生成整個表達式,而不是單個 operator 或者是數字。這樣的 constraint 在訓練過程中使得模型要更加準確的得到整個表達式。

額外的一個優點是,假如我們已經有了前三步,我們也可以從第三步出發繼續推理,不需要從頭開始。

推理系統

模型輸入:在問題中出現的數字以及整個 constant 的集合,我們用 Q 表示。

對於表達式的表示:

表示從 q_i 到 q_j 的數學運算,上述這個表達式  是有方向性的。比如對於減法或者除法,我們會有「-_reverse」這樣的符號,代表相反的方向 q_j - q_i。

從正式的演繹推理系統角度,我們可以用上圖表示狀態的變化 (和 Dependency Parsing 中的 transition-based system 類似),從 t 到 t+1 狀態的變化主要是增加了新的表達式  ,並且這個新的表達式會成為新的候選數字加入到下一個狀態當中。

上面這張圖簡單地可視化了狀態的變化過程,我們也可以看到,隨着 t 的增加,狀態的 size 也會由於新的數字的加入隨之變「大」。

模型實現

首先我們還是用預訓練語言模型例如 BERT 或者 Roberta 得到數字的向量表達 (representation),然後在這個基礎上做 inference。這邊我們用一個 q_1/q_2 × q_3 作為例子:

第一步我們得到 q_1 和 q_3  的聯合表示,主要通過拼接 representation 方式完成,然後對於每一個 operator ,我們有一個 operator-specific 的 Feed-forward network 來得到數學表達式 e_{1,2,÷} 的向量表達,從而這個新的表達式在下一個 timestep,會變成新的候選數字 q_4。同時,在 inference 的過程當中,我們可能會得到錯誤的表達式,比如説上圖的 e_{1,2,×}。所以,我們是在所有可能的表達式中,通過 scoring 選取一個最好的表達式來當作 q_4。然後當 t=1 的時候,我們最後能得到 e_{3,4,×} = q_3 × q_4。

注意到的是,在不同的 timestep t,狀態當中數字數量不同,導致所有可能的數學表達式的數量不同。如果我們做 beam-search 的話,這種情況是比較困難的。因為每個 timestep 的概率分佈會不平衡。

我們的方法的好處是可以增加一些 constraints,比如説如果 e_{1,2,×} 是一個不可能出現的表達式,或者是 q_1× q_2 的結果是不可能存在的,則我們可以直接從整個狀態空間中去掉這個表達式。

實驗

我們主要在現有的公開數據集中做實驗:MAWPS, Math23k, MathQA 和 SVAMP。這邊展示一些現有比較好的方法的主要結果。實驗過程中,我們最好的 varaint 是 「Roberta-DeductiveReasoner」,並且我們不採用 beam-search,這邊比較的之前的工作,全都有采用 beam size 為 5 的 beam search。

整體來説,我們在答案的準確率上能比之前的 seq2tree 的工作都能高出不少,我們把主要的提升歸咎於我們預測整個表達式,而不是一個個操作符和數字。但整體的絕對數字,發現並不高,尤其是 SVAMP ,我們文章中後續對 SVAMP 的困難度做了一些分析,詳細可以看一下文章細節。對於 SVAMP 數據集,我們發現 constraint 的作用尤其的大,這裏的 constraint 主要是不允許中間結果出現負數。這個 constraint 對於我們 BERT-based 的 Reasoner 能提高 7 個點的準確率,對於 Roberta-based 的 Reasoner 能提高 2 個點。

可解釋分析

在這個例子中,我們想展示模型的可解釋的能力。

Question: There are 255 apple trees in the orchard. Planting another 35 pear trees makes the number exactly the same as the apple trees. If every 20 pear trees are planted in a row, how many rows can be planted in total?

Answer: 11.   Gold Expression :  (255 - 35) / 20.   Predicted Expression :  (255 + 35) / 20 Deductive Scores: Prob(‘255+35=290’) = 0.068 > Prob(‘255-35=220’) = 0.062

模型在第一步表達式預測錯誤,我們定位到圖中標紅的那一句描述。我們懷疑「planting another」會誤導模型去預測 + 的數學運算符。我們通過修改那一句話希望那一句話會有更準確的表達,下圖中標藍的為修改後的話。

Question: There are 255 apple trees in the orchard. The number of pear trees is 35 fewer than the apple trees.  If every 20 pear trees are planted in a row, how many rows can be planted in total?

Prob(255+35=290) = 0.061 < Prob(255-35=220) = 0.067

通過 fewer 這個詞希望讓模型知道這個地方是一個減法。這個分析能讓我們從模型的預測中,學習到模型 inference 過程中的一些行為。

結論

本文提出的整體演繹推理系統從速度上相對樹結構模型更高效,並且可以提供一些可解釋的解答步驟。此外,我們也能加入一些先驗知識變成 constraint ,從而提高模型的效果。從理論上説,我們的演繹推理模型可以不僅僅用在數學解題上,對於其他涉及多步推理的問答任務以及一些結構預測任務也是適用的。

我們的模型也有一些缺陷,比如説計算中有很多的數學運算符以及常數的時候,模型耗費的空間會比較大,造成資源的浪費。此外,beam search 目前還無法很好的地運用在這個框架下面,會有上文提到的概率分佈不平衡的問題。

參考文獻

[1] Bengio, Yoshua, Yann Lecun, and Geoffrey Hinton. "Deep learning for AI." Communications of the ACM 64.7 (2021): 58-65.

[2] Daniel, Kahneman. "Thinking, fast and slow." (2017).

[3] Amini, Aida, et al. "MathQA: Towards Interpretable Math Word Problem Solving with Operation-Based Formalisms." Proceedings of NAACL, 2019.

[4] Xie, Zhipeng, and Shichao Sun. "A Goal-Driven Tree-Structured Neural Model for Math Word Problems." Proceedings of IJCAI. 2019.

「其他文章」