論文筆記:Recurrent Neural Network Grammars

1.簡介

“Recurrent Neural Network Grammars” 發表與NAACL 2016,這篇論文中提出了 RNNG 模型,在之後也有很多工作基於此,像URNNG(Unsupervised RNNG)和融合RNNG的NMT等。論文中首先介紹了RNNG的判別模型,然後進行了改動,定義了生成模型,然後又介紹了RNNG作爲語言模型的效果。

2.定義基礎

RNNG來源於統計自然語言處理中的CFG(Context-Free Grammar)文法以及它的衍生PCFG等,這一點從它的定義中就可以看出來。在論文的第二節,RNNG定義爲一個三元組 (N,Σ,Θ)(N, \Sigma, \Theta),這很像CFG的定義,只不過CFG中定義了規則集合,例如NPMP NPNP\rightarrow MP\space NP之類的,在RNNG中,把這些都包含在RNN網絡中,使用的時候會動態生成。

3.Top-Down句法生成方法

首先,論文中所使用的句法分析方法是基於轉移的。(transition-based),除此之外,還有基於動態規劃的(chart-based)以及自頂向下貪心的(greedy top-down)以及使用序列的(sequence to sequence)的。
對於 transition-based 的模型,句法生成的方式有三種:

  • Top-Down 自頂向下
  • Bottom-Up 自底向上
  • In-Order 中序遍歷的

在這篇論文中,使用的 Top-Down的方式,其實自頂向下和自底向上的方式區別還是很明顯的,在選擇上有一個很明顯的區別就是 自頂向下方式很適合不確定分支數的樹結構數據,因爲在合併的時候只需要合併父節點就可以了,但是自底向上的方式一般都會選擇二叉化的數據,因爲合併父節點的時候如果不確定當前節點有幾個子節點,那麼棧裏的數據就不知道取出幾個。

4.Top-Down的句法分析和生成

4.1 判別式模型

論文中判別式的模型跟之前的很多工作一致描述的已經很清楚了。這裏注意 transition-based 的句法分析方式一般都會維護幾個數據結構:

  • 句法樹棧(Stack):用來保存局部或者整體的句法樹
  • 字符序列(Buffer):用來保存終結符單詞序列
  • 還有一些動作,例如這裏就定義了NT(X),Shift 和 Reduce,不同的系統可能會有不同的定義,這個地方注意雖然像是一個集合,但是本文中或者後來的很多論文中都是也是使用一個棧來保存動作序列的(在本文中就是使用Stack-LSTM的方式保存動作歷史的)。

這一部分在 Figure 1-2 中做了介紹。

4.2 生成式模型

在論文中3.2一節中對判別式模型進行了改進使之成爲生成式模型,其實無非就是將原來保存輸入序列的buffer換成了生成的buffer,shift操作換成了gen。

5 生成模型

這部分詳細描述上面的生成式模型中生成步驟是如何進行的,也就是如何通過神經網絡的方式來得到下一個動作和單詞。最重要的部分就是 4.1 小節(Syntactic Composition Fuction),這一部分從前面的過程可以看出應該會有兩部分,首先生成下一時刻的動作,然後再選擇生成的單詞,Figure 5描述了動作如何生成,在這裏,使用了三個 Stack-LSTM來保存三部分(保存句法樹的棧,輸出序列和動作歷史)信息,那麼下一時刻的動作也就是取決於這三個LSTM的狀態的結合,然後經過一個神經網絡計算得到,也就是第4節一開始的公式部分。
(另外,關於Stack-LSTM可以參考“Transition-Based Dependency Parsing with Stack Long Short-Term Memory”,也是本文作者寫的)
有了下一個時刻的動作,接下來要解決的就是單詞的生成了,這樣的工作一般都會使用一個softmax網絡來處理,論文中針對這部分進行了一些優化,使用的是分層softmax的方式,也就是使用了兩步softmax,首先得到種類,然後在從種類中得到最大概率的單詞,用這種方式降低複雜度。

6.實驗

實驗部分對 RNNG 作爲句法分析器和語言模型都做了實驗,最後的結果是生成模型的結果要優於判別模型。

參考

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