從經典結構到改進方法,神經網路語言模型綜述

機器之心發表於2019-07-23

從經典結構到改進方法,神經網路語言模型綜述


什麼是語言模型

語言模型(LM)是很多自然語言處理(NLP)任務的基礎。早期的 NLP 系統主要是基於手動編寫的規則構建的,既費時又費力,而且並不能涵蓋多種語言學現象。直到 20 世紀 80 年代,人們提出了統計語言模型,從而為由 N 個單詞構成的序列 s 分配機率,即: 

從經典結構到改進方法,神經網路語言模型綜述

其中 w_i 代表序列 s 中的第 i 個單詞。一個單詞序列的機率可以被分解為在給定下一個單詞的前項(通常被稱為上下文歷史或上下文)的條件下,與下一個單詞的條件機率的乘積。

考慮到很難對上述模型中超多的引數進行學習,有必要採取一種近似方法。N 元(N-gram)模型是一種最為廣泛使用的近似方法,並且在 NNLM 出現之前是最先進的模型。一個(k+1)元模型是由 k 階馬爾科夫假設推匯出的。該假設說明當前的狀態僅僅依賴於前面的 k 個狀態,即:

從經典結構到改進方法,神經網路語言模型綜述

我們用極大似然估計來估計引數

困惑度(PPL)[Jelinek et al., 1977] 是一種用來衡量一個機率模型質量的資訊理論度量標準,是評價語言模型的一種方法。PPL 越低說明模型越好。給定一個包含 N 個單詞的語料庫和一個語言模型,該語言模型的 PPL 為:

從經典結構到改進方法,神經網路語言模型綜述

值得注意的是,PPL 與語料庫相關。可以用 PPL 在同一個語料庫上對兩個或多個語言模型進行對比。

為什麼要給 LM 加上神經網路

然而,N 元語言模型有一個明顯的缺點。為了解決這個問題,我們在將神經網路(NN)引入到了連續空間的語言建模中。NN 包括前饋神經網路(FFNN)、迴圈神經網路(RNN),可以自動學習特徵和連續的表徵。因此,人們希望將 NN 應用於 LM,甚至其他的 NLP 任務,從而考慮自然語言的離散性、組合性和稀疏性。

第一個前饋神經網路語言模型(FFNNLM)由 Bengio 等人於 2003 年提出,它透過學習一個單詞的分散式表徵(將單詞表徵為一個被稱為「嵌入」的低維向量)來克服維數詛咒。FFNNLM 的效能要優於 N 元語言模型。隨後,Mikolov 等人於 2010 年提出了 RNN 語言模型(RNNLM)。從那時起,NNLM 逐漸成為了主流的語言模型,並得到了迅速發展。

2012 年,Sundermeyer 等人提出了長短期記憶迴圈神經網路語言模型(LSTM-RNNLM)用於解決學習長期依賴的問題。為了降低訓練、評估以及 PPL 的開銷,人們提出了各種各樣的改進方案,例如分層的 Softmax、快取(caching)模型等。最近,為了改進 NNLM,人們引入了注意力機制,取得了顯著的效能提升。

經典的神經網路語言模型

FFNN 語言模型

Xu 和 Rudnicky 等人於 2000 年試圖將神經網路(NN)引入到語言模型(LM)中。儘管他們的模型效能比基線 N 元模型語言模型要好,但是由於沒有隱藏層,他們模型的泛化能力較差,無法捕獲上下文相關特徵。

根據公式 1,LM 的目標等價於對條件機率 P(w_k|w_1 · · · w_(k−1)) 進行估計。但是前饋神經網路(FFNN)不能直接處理變長資料(variable-length data),也不能夠有效地表徵歷史上下文。因此,對於像 LM 這樣的序列建模任務,FFNN 必須使用定長的輸入。受到 N 元語言模型的啟發(見公式 2),FFNNLM 將前 n-1 個單詞作為了預測下一個單詞的上下文。

如圖 1 所示,Bengio 等人於 2003 年提出了原始 FFNNLM 的架構。這個 FFNNLM 可以寫作:

從經典結構到改進方法,神經網路語言模型綜述

其中,H、U 和 W 是層與層之間連線的權重矩陣;d 和 b 是隱藏層和輸出層的偏置。

從經典結構到改進方法,神經網路語言模型綜述

圖 1:Bengio 等人於 2003 年提出的 FFNNLM。

FFNNLM 透過為每個單詞學習一個分散式表徵來實現在連續空間上的建模。單詞表徵是語言模型的副產品,它往往被用於改進其它的 NLP 任務。基於 FFNNLM,Mikolov 等人於 2013 提出了兩種詞表徵模型:「CBOW」和「Skip-gram」。FFNNLM 透過將單詞轉換為低維向量克服了維數詛咒。FFNNLM 引領了 NNLM 研究的潮流。

然而,FFNNLM 仍然具有一些缺點。在訓練前指定的上下文大小是有限的,這與人類可以使用大量的上下文資訊進行預測的事實是嚴重不符的。序列中的單詞是時序相關的。而 FFNNLM 沒有使用時序資訊進行建模。此外,全連線 NN 需要學習許多可訓練的引數,即使這些引數的數量比 N 元 少,但是仍然具有很大的計算開銷,十分低效。

RNN 語言模型

第一個 RNN 語言模型由 [Mikolov et al., 2010; Mikolov et al., 2011a] 提出,如圖 2 所示,在第 t 個時間步,RNNLM 可以寫作:

從經典結構到改進方法,神經網路語言模型綜述

其中 U、W、V 是權值矩陣;b、d 分別是狀態層和輸出層的偏置。在 Mikolov 2010 年和 2011 年發表的論文中,f 代表 sigmoid 函式,g 代表 Softmax 函式。RNNLM 可以透過基於時間的反向傳播演算法(BPTT)或截斷式 BPTT 演算法來訓練。根據他們的實驗結果,RNNLM 在困惑度(PPL)方面要顯著優於 FFNNLM 和 N 元語言模型

從經典結構到改進方法,神經網路語言模型綜述

圖 2:Mikolov 等人於 2010 年和 2011 年提出的 RNNLM。

儘管 RNNLM 可以利用素有的上下文進行預測,但是訓練模型學習長期依賴仍然是一大挑戰。這是因為,在 RNN 的訓練過程中,引數的梯度可能會發生梯度消失或者梯度爆炸,導致訓練速度變慢或使得引數值無窮大。

LSTM-RNN 語言模型

長短期記憶(LSTM)RNN 解決了這個問題。Sundermeyer 等人於 2012 年將 LSTM 引入到了 LM 中,並且提出了 LSTM-RNNLM。除了記憶單元和 NN 的部分,LSTM-RNNLM 的架構幾乎與 RNNLM 是一樣的。為了控制資訊的流動,他們將三種門結構(包括輸入門、輸出門和遺忘門)加入到了 LSTM 的記憶單元中。LSTM-RNNLM 的常規架構可以寫作:

從經典結構到改進方法,神經網路語言模型綜述

其中,i_t,f_t,o_t 分別代表輸入門、遺忘門和輸出門。c_t 是單元的內部記憶狀態。s_t 是隱藏狀態單元。U_i、U_f、U_o、U、W_i、W_f、W_o、W、V_i、V_f、V_o 以及 V 都是權值矩陣。b_i、b_f、b_o、b 以及 d 是偏置。f 是啟用函式,σ 是各個門的啟用函式(通常為 sigmoid 函式)。

對比上述三種經典的 LM,RNNLM(包括 LSTM-RNNLM)的效能要優於 FFNNLM,而且 LSTM-RNNLM 一直是最先進的 LM。當下的 NNLM 主要都是以 RNN 或 LSTM 為基礎的。

改進的技術

降低困惑度的方法

為了降低困惑度,人們將一些新的結構和更有效的資訊引入到了經典的 NNLM 模型中(尤其是 LSTM-RNNLM)。受到語言學和人類處理自然語言的方式的啟發,研究者們提出了一些新的、有效的方法,包括基於字元的(character-aware)模型、因式分解模型、雙向模型、快取模型、注意力機制,等等。

基於字元的(Character-Aware)模型

在自然語言中,一些形式相似的詞往往具有相同或相似的意思。例如,「superman」中的「man」和「policeman」中的「man」有著相同的含義。Mikolov 等人於 2012 年在字元級別上對 RNNLM 和 FFNNLM 進行了探究。字元級 NNLM 可以被用來解決集外詞(OOV)問題,由於字元特徵揭示了單詞之間的結構相似性,因此對不常見和未知單詞的建模有所改進。由於使用了帶有字元級輸出的小型 Softmax 層,字元級 NNLM 也減少了訓練引數。然而,實驗結果表明,訓練準確率高的字元級 NNLM 是一項具有挑戰性的工作,其效能往往不如單次級的 NNLM。這是因為字元級 NNLM 必須考慮更長的歷史資料才能正確地預測下一個單詞。

人們已經提出了許多將字元級和單詞級資訊相結合的解決方案,它們通常被稱為基於字元(character-aware)的語言模型。一種方法是逐個單片語織字元級特徵,然後將它們用於單詞級語言模型。Kim 等人於 2015 年提出了用於提取單詞字元級特徵的卷積神經網路以及用於在一個時間步內接收這些字元級特徵的 LSTM。Hwang 和 Sung 於 2016 年使用一個分層 RNN 架構解決了字元級 NNLM 的問題,該架構包含具有不同時間規模的多個模組。

另一種解決方案是同時將字元級別和單詞級別的特徵輸入給 NNLM。Miyamoto 和 Cho 等人於 2016 年提出使用 BiLSTM 從單詞中提取出的字元特徵向量對單詞的特徵向量進行插值,並且將插值向量輸入給 LSTM。Verwimp 等人於 2017 年提出了一種「字元-單詞」LSTM-RNNLM,它直接將字元和單詞級別的特徵向量連線起來,然後將連線結果輸入給網路。基於字元的 LM 直接使用字元級 LM 作為字元特徵提取器,應用於單詞級 LM。這樣一來,LM 就具有豐富的用於預測的「字元-單詞」資訊。

因式分解模型

NNLM 基於 token 定義了單詞的相似度。然而,相似度還可以根據單詞的形式特徵(詞綴、大寫字母、連字元,等等)或者其它的註釋(如詞性標註(POS))匯出。受到因式分解 LM 的啟發,Alexandrescu 和 Kirchhoff 等人於 2016 年提出了一種因式分解 NNLM,這是一種新型的神經機率 LM,它可以學習從單詞和特定的單詞特徵到連續空間的對映

因式分解模型使得模型可以總結出具有相同特徵的單詞類別。在神經網路訓練時應用因子代替單詞 token 可以更好地學習單詞的連續表徵,可以表徵集外詞,也可以降低 LM 的困惑度。然而,對不同的因子的選擇和不同的上游 NLP 任務、語言模型的應用是相關的。除了對各個因子分別進行實驗外,沒有其他方法可以用於因子的選擇。因此,對於特定的任務,需要有一種高效的因子選擇方法。同時,必須建立帶有因子標籤的語料庫

雙向模型

傳統的單向 NN 只能根據過去的輸入預測輸出。我們可以以未來的資料為條件,建立一個雙向的 NN。Graves 等於 2013 年、Bahdanau 等人於 2014 年將雙向 RNN 和 LSTM 神經網路(BiRNN 和 BiLSTM)引入了語音識別或其它的 NLP 任務。BiRNN 透過在兩個方向處理輸入資料來使用過去和未來的上下文。目前雙向模型最火的工作當屬 Peter 等人於 2018 年提出的 ELMo 模型,這是一種基於 BiLSTM-RNNLM 的新型深度上下文單詞表示。預訓練的 ELMo 模型的嵌入層的向量是透過詞彙表中的單詞學習到的表徵向量。這些表徵被新增到了現有的模型的嵌入層中,並且在 6 個具有挑戰性的 NLP 任務中顯著提升了目前最先進的模型的效能。

儘管使用過去和未來的上下文的雙向語言模型(BiLM)已經取得了進展,但仍然需要注意的是,BiLM 不能夠被直接用於 LM,這是因為 LM 是定義在當前單詞之前的上下文中的。由於單詞序列可以被視為一種同時輸入的序列,因此 BiLM 可以被用於其它的 NLP 任務(如機器翻譯語音識別)。

快取模型

「最新出現的單詞可能會再次出現」。基於這個假設,快取機制最初被用於最佳化 N 元語言模型,克服了對依賴的長度限制。該機制會在快取中匹配新的輸入和歷史資料。快取機制最初是為了降低 NNLM 的困惑度而提出的。Soutner 等人於 2012 年試圖將 FFNNLM 與快取機制相結合,提出了基於快取的 NNLM 結構,導致了離散機率變化問題。為了解決這個問題,Grave 等人於 2016 年提出了連續的快取模型,其中變化依賴於隱藏表徵的內積。

另一種快取機制是將快取用作 NNLM 的加速技術。該方法主要的思路是將 LM 的輸出和狀態儲存在一個雜湊表中,用來在給定相同上下文歷史的條件下進行未來的預測。例如,Huang 等人於 2014 年提出使用 4 個快取來加速模型推理。使用到的快取分別為:「查詢語言模型機率的快取(Query to Language Model Probability Cache)」、「歷史到隱藏狀態向量的快取(History to Hidden State Vector Cache)」、「歷史到分類歸一化因子的快取(History to Class Normalization Factor Cache)」以及「歷史和分類 Id 到子詞彙表歸一化因子的快取(History and Class Id to Sub-vocabulary Normalization Factor Cache)」。

注意力機制

RNNLM 利用上下文預測下一個單詞。然而,並非上下文中所有的單詞都與下一個相關、對於預測有效。和人類一樣,帶有注意力機制的 LM 透過從單詞中選擇出有用的單詞表徵,高效地使用長期的歷史。Bahdanau 等人於 2014 年首次提出將注意力機制用於 NLP 任務(在他們的論文中是機器翻譯任務)。Tran 等人和 Mei 等人分別於 2016 年證明了注意力機制可以提升 RNNLM 的效能。

注意力機制可以透過一系列針對每個輸入的注意力係數捕獲需要被重點關注的目標區域。注意力向量 z_t 是透過 token 的表徵 {r_0,r_1,· · ·,r_(t−1)} 來計算的。

從經典結構到改進方法,神經網路語言模型綜述

這裡的注意力係數α_ti 是透過得分 e_ti 的 Softmax 函式值歸一化計算得來的,其中

從經典結構到改進方法,神經網路語言模型綜述

這是一個對齊模型,用於評估某個 token 的表徵 r_i 和隱藏狀態 h_(t-1) 的匹配程度。該注意力向量是用於預測的上下文歷史的一種很好的表徵。

針對大型語料庫的加速技術

在一個擁有大規模單詞表的語料庫上訓練模型是非常費時的。這主要是由於用於大型詞彙表的 Softmax 層。為了解決訓練深度神經網路時輸出空間大的問題,人們提出了許多方法。一般來說,這些方法可以分為四類,即:分層的 Softmax、基於取樣的近似、自歸一化以及在有限損失函式上的精確梯度。其中前兩種方法被廣泛用於 NNLM。

語料庫

一般來說,為了減少訓練和測試的開銷,需要在小型語料庫上對模型的可行性進行驗證。常用的小型語料庫包括 Brown、Penn Treebank 以及 WikiText-2(見表 1)。

在模型結構被確定後,需要在大型語料庫上對其進行訓練和評估,從而證明模型具有可靠的泛化能力。常用的大型語料庫會隨著時間根據網站、報紙等媒體(包括華爾街日報、維基百科、新聞評論、 News Crawl、Common Crawl 、美聯社(AP)新聞等)被更新。

然而,我們通常會利用不同的大型語料庫訓練 LM。即使在同一個語料庫上,各種不同的預處理方法和不同的訓練/測試集的劃分也會影響實驗結果。與此同時,展示訓練時間的方式也不一樣,或者在一些論文中並沒有給出訓練時間。不同論文中的實驗結果並沒有得到充分的比較。

工具包

傳統的 LM 工具包主要包括「CMU-Cambridge SLM」、「SRILM」、「IRSTLM」、「MITLM」以及「BerkeleyLM」,它們只支援帶有各種平滑技術的 N 元語言模型的訓練和評估。隨著深度學習的發展,人們提出了許多基於 NNLM 的工具包。

Mikolov 等人於 2011 年構建了 RNNLM 工具包。該工具包支援訓練 RNNLM 來最佳化語音識別機器翻譯,但是它並不支援並行訓練演算法和 GPU 運算。Schwenk 於 2013 年構建了神經網路開源工具 CSLM(連續空間語言建模),用於支援 FFNN 的訓練和評估。Enarvi 和 Kurimo 於 2016 年提出了可伸縮的神經網路模型工具包「TheanoLM」,它訓練 LM 對句子進行打分並生成文字。

根據調查,我們發現並沒有同時支援傳統 N 元語言模型和 NNLM 的工具包。而且它們通常並不包含載入常用的 LM 的功能。

未來的研究方向

首先,降低計算開銷、減少引數數量的方法仍然會被繼續探索,從而在不增加困惑度的條件下提升訓練和評估的速度。其次,我們期待能夠產生一種新的架構,它能夠模擬人的工作方式,從而提升 LM 的效能。例如,為 LM 構建一種生成模型(例如 GAN),可能會成為一個新的研究方向。最後,同樣重要的是,目前的 LM 的評估體系並不規範。因此,有必要構建一個評價對比基準來統一預處理以及論文中應該展示的實驗結果。

相關文章