論文筆記 | Tree-structured Decoding for Solving Math Word Problems

這篇文章是由京都大學和北京大學合作發表在EMNLP 2019上的。主要是在seq2seq架構上做了改進,用樹結構的decoder來生成抽象語法樹(也可簡單理解爲表達式樹)。並且利用棧結構輔助,能夠清楚的知道下一次要生成的token是什麼,還有什麼時候可以停止解碼。

研究動機

目前已有很多用seq2seq結構來做解題的工作,但這些工作都沒有充分利用抽象語法樹。也就是,這篇文章在生成一個token的時候,會考慮其父token的表示,左邊同級token的表示,以及在前綴表達式中的前一個token的表示。

並且,在生成token的過程中,也進行相應的入棧出棧操作,將中間操作過程也保存在棧中,最終出棧操作可以得到一個前綴表達式。

Decoding生成token的判斷過程如下:

  • 如果decoder預測出來的token是一個操作符,那麼就將操作符入棧,接下來預測該操作符左孩子節點。
  • 如果decoder預測出來的token是一個操作數,那就根據棧內的情況做不同的操作。如果棧頂是一個操作符,那就將該操作數入棧,然後去預測該操作數的同級右節點。如果棧頂是一個操作數,那就將取出棧頂的兩個元素,分別是<op>和<num>,這可以和當前預測出來的token組成一個子樹。然後直接將該子樹(前綴表達式形式:<op><num><num>)入棧。
  • 接着重複以上操作,直至棧內的表達式出棧。

預測生成的token的公式
etd=(hparent;esibling;eprev)htd=LSTM(ht1d,etd)yt=arg max(MLP(htd))e_t^d = (h^{parent}; e^{sibling}; e^{prev}) \\ h_t^d = LSTM(h_{t-1}^d, e_t^d) \\ y_t = \argmax(MLP(h_t^d))

其中etde_t^d中包含的三個元素分別是當前要預測的token的父節點的hidden表示,同級節點的embedding,前綴表達式中該token前一個token的embedding。然後利用LSTM去生成該時刻的hidden表示,再利用MLP對該hiddden表示操作,最終選擇一個能使MLP輸出值最大的token作爲yty_t

系統架構圖

在這裏插入圖片描述

  • Encoder部分就是一個Bi-LSTM,用於獲取每個token的上下文信息。輸出是整個問題文本的向量表示,也將作爲decoder的輸入。
  • Decoder是抽象語法樹的形式,具體的操作過程下面給出。
    在這裏插入圖片描述

上圖給出了一個例子,展示了decoder中生成token的過程。

  • 首先,第一次生成的token是一個"-“號,接下來將”-"號入棧,然後去預測它的左孩子節點。
  • 這裏左孩子節點預測出來是一個"+“號,那麼還是要預測它的左孩子節點,並且將”+"入棧。
  • 接下來預測"+“的左孩子節點,這裏預測出來是n1n_1,此時棧頂元素是”+",所以將n1n_1入棧,然後去預測n1n_1的同級右節點。
  • 這裏預測出來n1n_1的同級右節點是n2n_2,此時棧頂元素是n1n_1,所以將棧頂的兩個token出棧,和n2n_2操作,得到+n1n2+n_1n_2,將其入棧。
  • 這時root節點"-"的左孩子已經完全生成好了,需要去預測右孩子節點,這裏預測出來是n3n_3,棧頂元素是+n1n2+n_1n_2,所以將棧頂的兩個token出棧,和n3n_3操作,得到KaTeX parse error: Double subscript at position 9: -+n_1n_2_̲n3,將其入棧。
  • 此時,表達式樹已經滿了,所以進行出棧操作,得到的就是我們要求的前綴表達式的形式。

Strong Points

  • 在Math23k數據集上達到了69.0%的準確率,比目前很多的方法要好。
  • 對實驗結果進行了誤差分析,包括表達式長短、題目類型(關於題目類型,利用關鍵詞將題目進行分類,附錄也給出了相關關鍵詞)對結果的影響分析。
  • 在生成一個token的時候,抽象語法樹提供了該token父節點、同級左節點的表示,對生成該token有幫助。

Weak Points

  • 不能很好的處理表達式比較長的題目
  • 雖然對題目的類型有了劃分,但是是基於最簡單的關鍵詞匹配。題目類型的劃分還可以進一步改進。
  • 立體幾何類型題目不能很好的解決,因爲該類題目大多需要外部知識,比如求面積公式等等。
  • 該工作沒有開源的代碼。

補充

這篇文章跟之前看過的一篇《Semantically-Aligned Equation Generation for Solving and Reasoning MathWord Problems》,有一些相似的地方,它裏面也是在decoder部分用到了棧,只是需要兩個選擇器,一個用來選擇棧操作,另一個用來選擇操作數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章