本節課程主要介紹了encoder-decoder模型的相關知識內容,最後還講了模型融合的知識,這部分不算是NLP裡面的知識內容,機器學習工程實踐中都會使用到,因此不會詳細描述,後續會單獨開坑。

Conditioned Language Model

傳統的Language Model可以看成是一種生成式模型,它處理的對象是文本。它的目標是計算一個文本句子的概率,也可以轉化為一個條件概率問題,即給定前文的情況下,預測下一個詞的概率問題: P(X) = prod_{i=1}^{n}P(x_i|x_{1},...,x_{i-1})\

而本次介紹的Conditioned language model則是在該模型基礎上,增加了給定條件,即我要求next word的條件概率,除了前面的詞的信息外,還有其他的上下文信息,可以用如下公式表示:

P(Y|X) = prod_{j=1}^{n}P(y_j|X,y_{1},...,y_{j-1})\

其中,X表示新增的上下文。這個X可以是其他語素信息,也可以是通過其他序列模型編碼的信息。

根據X和Y的不同,處理的NLP任務也不同。

舉例:X和Y分別為兩門不同的語種,則此時該Conditioned language model可以用於做machine translation;若X為一篇文檔,而Y表示短語或者短句,則此時相當於是做文本摘要任務;若X為結構化數據,而Y是一個自然語言的描述,則該任務為文本生成。

Encoder-decoder模型

下面介紹一個經典的Conditioned language model:encoder-decoder模型。該模型的基本思想很簡單,即假設當前我們的目標是計算句子Y的概率,此時使用一個RNN的language model對一個另一個相關句子X進行訓練得到一個編碼結果H,然後使用另外一個RNN的language model接受Y和H進行訓練,即將H的信息解碼用於訓練得到我的目標結果。具體的模型結構如圖:

Sutskever et al.2014

上圖為一個用於machine translation的encoder-decoder模型。這裡直接將encoder模型接收源語料進行LSTM的模型訓練,得到的中間狀態H作為decoder的初始隱層狀態,然後decoder接受目標語料,進行訓練。

上面展示了一種encoder的輸出如何應用到decoder的場景,當然除了上述用法,還有其他利用encoder輸出的用法。主要有兩種:

1、將encoder輸出的中間狀態H通過一些線性或者非線性的轉換,如加個全連接層等,變換維度後,作為decoder的初始化狀態,如圖:

2、將encoder輸出的中間狀態H作用於decoder每個時刻的輸入,如圖:

通過上述encoder-decoder模型,我們能夠得到文本的條件概率分佈:P(Y|X)。但是對於機器翻譯或者文本生成來說,任務還沒結束,我們需要根據這個概率分佈去生成我們需要的目標文本。一般主要有兩種方法來生成目標文本,一個是通過採樣方法,另一個是根據概率最大準則來生成文本句。下面主要對不同的採樣方法進行詳細描述。

Generating Output by Sampling

Ancestral Sampling

該採樣方法其實本質上是一種隨機採樣。這種採樣方法適合在對話系統中,我們通常希望系統對於一個特定的用戶輸入會產生不一樣的回應,以免產生單調的反應。

該採樣演算法的流程很簡單,即在每個時刻t,都根據當前時刻詞或字的歷史時刻文本的條件概率來隨機採樣:

Greedy Search

貪心搜索,即採用了貪心演算法的思想,每次只選擇條件概率最高的那個字或詞作為輸出。

該演算法有一定的缺陷,由於每次都會選擇概率最高的詞,往往會忽視那些少見詞,使得生成的文本缺乏多樣性,容易陷入局部最優。

Beam Search

Beam Search這個方法應用相對於上面的方法更加廣泛,這個方法在斯坦福的cs224n課程中也被重點提及。它能夠解決Greedy Search中的局部最優缺陷。它本身的思想與貪心演算法類似,但是不同於只考慮生成最好的結果,在每個時刻,演算法會選出k個最好的候選結果,k就是beam(柱)的寬度。假設當前的k=2,演算法過程如圖所示:(注意到圖中的概率採用了logP,與P是一個意思,但是由於需要比較不同候選句子的綜合概率,需要概率的連乘,用log之後,能夠在更高的精度上比較不同的候選輸出的綜合概率。

根據beam search,最後我們能夠得到k個候選句子。上圖中,最後能得到"a,b"和"b,b"兩個候選序列。

需要注意的一點是,使用beam search時,由於每個時刻所有候選句都會加入一個新詞,計算概率時相當於是乘以一個概率或logP,會讓整個句子序列的logp減小,所以在做某些任務時比如機器翻譯,該方法會更傾向於短句子,對長句子會有明顯的偏見。因此會有一些方法來解決這個偏見,一個方法就是在decoder解碼時,加入一個先驗知識,包含了源語言和目的語言的文本長度條件概率P(|Y|||X|)。該條件概率可以通過語料來估計。另一種方法更簡單,就是在計算P(Y|X)時,除以|Y|,即相當於做長度的歸一化,求的是每個詞的average logP。

那麼這個k該如何選擇呢,可以看出來這個k對於模型來說也是一個超參數,因此可以通過在驗證集上進行調參來獲得最佳選擇。

Model Ensembling

不太理解為什麼要將模型融合放到本課程來講,因為模型融合不止用於NLP,在所有數據挖掘、機器學習等任務中,它都有很廣泛的應用,尤其是在各種數據競賽中。不過既然它講了,我也就總結一下。

Why Ensembling?

模型融合的原因有很多,課程列出了幾條:

1、不同模型的誤差類型會不同,誤差關聯性較小。

2、模型在犯錯誤時,會更加地具有不確定性。

3、綜合上述兩個原因,多個模型融合,能夠讓一個模型幫助另一個模型對它不確定的部分做出好的決定,因為模型之間的誤差關聯性小,即每個模型的不確定的部分都不一樣,因此可以互相彌補。

下面簡單介紹幾個模型融合的方法。

Linear Interpolation

很簡單,就是對M個模型的結果做加權平均。

權重w一般都會設置為服從均勻分佈1/M

Log-linear Interpolation

很簡單,與linear Interpolation類似,但是每個模型的結果不用概率,而是使用概率的log值,同時在最外層使用softmax來進行歸一化。

那麼上述兩種Ensembling方法各自的使用場景是什麼樣的呢?

  • 對於Linear來說,相當於是一個「或」操作,即所有模型中,只要有一個模型對一個候選的分數較高,那麼會偏愛這個候選。因此當不同模型捕捉的數據的特徵信息類型盡量不同時,linear是比較適合的。尤其是當有的模型的給出的分數接近0時,如果不使用linear的方法,容易被異常模型影響,造成誤判。
  • 對於Log Linear來說,相當於是一個「與」操作,很好理解,LogP的連加,最後會變成P的連乘。這種方法會偏向於所有模型都意見一致的候選,因此適合一些需要限定某些候選選擇以及需要縮小範圍的情況。

Parameter Averaging

model ensembling有一個缺陷就是成本太高,比如我一個人用家用電腦做比賽,在時間有限以及硬體有限的條件下,很難去做大量的模型融合,它需要在測試階段同時用訓練好的M個模型。而parameter Averaging是一種更加省事的方法來達成模型融合的目的。它的基本思想就是在模型訓練快要結束的最後一兩個迭代上,記錄模型當時的所有權重參數,然後做平均,得到最後的模型參數。個人覺得這種方法與dropout的思想有異曲同工之妙。

Stacking

stacking是另一種模型融合的方法,但是通常它比上面的方法要複雜。 它的本質是一種迭代性質的模型融合,即每個迭代都會使用前一個迭代中模型融合的輸出。換而言之,它能夠將一個或多個模型的結果輸出轉化為另一個系統所需的數據特徵。在機器翻譯中,假設當前有一個詞為單位的模型和另一個以字母為單位的模型,此時可以使用stacking將兩個模型進行融合。

Evaluation

最後,課程講到了一些評估conditioned language model的方法。基本流程都是一樣的,即使用隔離的測試集,使用訓練好的模型對測試集生成目標結果,然後使用專業的結果與生成結果做對比。

BLEU

BLEU是一種用於比較兩個句子或文本n-gram重疊率的評估方法。根據n-gram的不同類型,對應不同的BLEU分支。具體計算模塊主要有兩部分組成:

1、n-gram的重疊率計算,即兩個比對句子中,重疊的n-gram個數在所有n-gram中所佔的比重。需要注意的是若n>2,需要將n以內的所有gram短語的重疊率計算出來,並做連乘得到P,最後結果為: sqrt[n]{P}

2、計算兩個比對句子之間的brevity penalty:min(1,|system output|/|Reference|)。||表示句子的長度。

最後得到BLEU的值: BLEU-n=sqrt[n]{P}*(brevity quad penalty)

需要注意的是,reference通常會有多個,因為自然語言非常複雜,不同人的評估標準也不同,比如機器翻譯,不同人可能會有不同的翻譯句子。因此對同一個測試數據,通常會有多個reference,此時可以對多個reference計算BLEU,取平均值,這樣做也是必要的,可以保證評估的公平性。

優勢:BLEU相對於人工評判來說,更加自動化,能夠用數值在一定程度上評估一個系統性能提升的程度。

缺點:但是因為它只是在統計角度上比較兩個句子的重合度,忽略了很多自然語言上的特徵,比如語義、長距離語序、同義詞等,因此在效果上肯定比不上人工評判,對不同的任務的評估效果也參差不齊。

METEOR

類似於BLEU,但是解決了上面提到的BLEU的缺陷。它會考慮更多的自然語言的特徵,比如短句,詞序的變換、同義詞等。

缺點:天下沒有免費的午餐,該方法需要更多的語料信息來做評估,評估過程也更加複雜。需要根據需要來進行取捨。

Perplexity

同樣,我們也可以使用困惑度來評估一個語言模型。這個評估方法我在之前的第二節課程中已經總結過,忘記的同學可以去那篇文章回顧一下。

優勢:不需要使用額外的reference來做評估,剔除了reference的質量問題帶來的評估問題。

缺點:困惑度當然不會考慮文本生成的問題,它只會評估language model本身的質量,因此通常用於傳統language model,很少用於文本生成任務中。

最後課程介紹了一些conditioned language model做不同文本生成任務的實例,這裡就不具體介紹了,有興趣的同學參考相應的論文。

reference:

https://arxiv.org/pdf/1703.01619.pdf?

arxiv.org

http://phontron.com/class/nn4nlp2017/assets/slides/nn4nlp-08-condlm.pdf?

phontron.com


推薦閱讀:

相關文章