天天看點

【2019斯坦福CS224N筆記】(6)RNN和與語言模型

csdn:https://blog.csdn.net/abcgkj

github:https://github.com/aimi-cn/AILearners

一、傳統的語言模型

1.什麼是語言模型

語言模組化是一項基準測試任務,它幫助我們衡量我們在了解語言方面的進展。語言模組化是許多NLP任務的子元件,特别是那些涉及生成文本或估計文本機率的任務:預測輸入、語音識别、手寫識别、拼寫/文法修正、身份識别、機器翻譯、摘要、對話等。

在實際應用中,我們經常需要解決這樣一類問題:如何計算一個句子的機率?而語言模型就是用來解決該問題的。比如我們每天用手機發資訊,輸入法會自動“聯想”你可能輸入的下一個字或者詞,這就用到了語言模型。

【2019斯坦福CS224N筆記】(6)RNN和與語言模型

其實,語言模型就是計算一個單詞序列(句子)的機率的模型。那麼我們如何計算一個句子的機率呢?給定一個句子(詞語序列):S = w1,w2,…,wk,它的機率可以表示為:P(S) = P(w1,w2,…,wk) = p(w1)p(w2|w1)…p(wk|w1,w2,…,wk-1)。但是這樣的方法有着嚴重的缺陷:

  • 參數空間過大:條件機率p(wn|w1,w2,…,wn-1)的可能性太多,無法估算,不可能有用;
  • 資料稀疏嚴重:對于非常多詞對的組合,在語料庫中都沒有出現,依據最大似然估計得到的機率将會是0。

是以,為了解決上述問題。引入了馬爾科夫假設(Markov Assumption):随意一個詞出現的機率隻與它前面出現的有限的一個或者幾個詞有關。由此也就有了n-gram語言模型。

2.n-gram語言模型

首先我們看一進制語言模型,我們的句子機率定義為:此時整個句子的機率可表示為最大似然估計:

【2019斯坦福CS224N筆記】(6)RNN和與語言模型

觀察可知,在一進制語模型中,整個句子的機率等于各個詞語概的乘積。言下之意就是:各個詞之間都是互相獨立的,這無疑是完全損失了句中的詞序資訊,是以一進制模型的效果并不理想。

接下來是二進制語言模型和三元語言模型,此時整個句子的機率可表示為:

【2019斯坦福CS224N筆記】(6)RNN和與語言模型

觀察可知,在二進制模型和三元模型中,整個句子的機率等于n個條件機率相乘,以此類推,就有了n-gram語言模型。那麼如何計算上述機率呢?我們可以用統計學的方法近似計算出上述機率。計算方法如下圖所示:

【2019斯坦福CS224N筆記】(6)RNN和與語言模型

下面我們舉一個例子(例子來源于https://class.coursera.org/nlp/):

這個例子來自大一點的語料庫,為了計算對應的二進制模型的參數,即P(wi | wi-1),我們要先計數即c(wi-1,wi),然後計數c(wi-1),再用除法可得到這些條件機率。可以看到對于c(wi-1,wi)來說,wi-1有語料庫詞典大小(記作|V|)的可能取值,wi也是,是以c(wi-1,wi)要計算的個數有|V|^2。

c(wi-1,wi)計數結果如下:

【2019斯坦福CS224N筆記】(6)RNN和與語言模型

c(wi-1)的計數結果如下:

【2019斯坦福CS224N筆記】(6)RNN和與語言模型

那麼二進制模型的參數計算結果如下:

【2019斯坦福CS224N筆記】(6)RNN和與語言模型

比如計算其中的P(want | i) = 0.33如下:

【2019斯坦福CS224N筆記】(6)RNN和與語言模型

那麼針對這個語料庫的二進制模型建立好了後,我們可以計算我們的目标,即一個句子的機率了。顯然當n>=2時,該模型是可以保留一定的詞序資訊的,而且n越大,保留的詞序資訊越豐富,但是計算成本也呈指數級增長,并且這也就有了n-gram模型的兩個問題:稀疏性和存儲問題。

首先,對于稀疏性問題主要來源于兩個方面:

  • 分子為0,即count(w1,w2,w3)等于0,則進而導緻P(w3|w1,w2)等于0,模型試圖說明這個句子不太可能出現,而事實上隻是它以前沒有見過而已,是以我們需要采取“平滑”方法來解決這個問題,它的解決問題的基本思想就是把在訓練集中看到的機率分一點給未看到的,并保持機率和為1。
  • 分目為0,即count(w1,w2)等于0,我們可以采取“回退”的方法。比如說:要計算p(wn | wn-2,wn-1),但沒有相關的三元統計,就可以使用二進制文法P(wn | wn-2)來估計,如果沒有相關的二進制統計,那麼我們就用一進制模型P(wn)來估計。是以,n的增加使稀疏性問題變得更糟,是以一般情況下n不能大于5。

如果大家想了解更多關于解決稀疏性問題的方法,可以參考Statistical language model 統計語言模型

其次,是存儲問題。需要存儲在語料庫中看到的所有n-gram的計數。随着n的增加(或者語料庫大小的增加),模型的大小也随之增加。

二、基于視窗的神經語言模型

Bengio et al提出了第一個大規模深度學習自然語言處理模型,隻不過是用前n個單詞的詞向量來做同樣的事情(上文模組化)而已,其網絡結構如下:

【2019斯坦福CS224N筆記】(6)RNN和與語言模型

公式如下:

【2019斯坦福CS224N筆記】(6)RNN和與語言模型

這裡W(3)x+b(3)就是前n個單詞詞向量的線性運算,雖然這種模型名字裡有“Neural”,但依然屬于傳統模型。

三、Recurrent Neural Networks

1.初識RNN語言模型

利用RNN對序列模組化,複用不同時刻的線性非線性單元及權值,理論上之前所有的單詞都會影響到預測單詞。

【2019斯坦福CS224N筆記】(6)RNN和與語言模型

上圖為RNN的結構,其中垂直矩形框是時間步長t處的隐藏層,每個隐藏層包含多個神經元,每個神經元對其輸入進行線性矩陣運算,然後進行非線性運算(如tanh())。在每個時間步長中,隐藏層有兩個輸入:前一層的輸出h_{t-1}和該時刻的輸入x_t。最後通過輸出層獲得預測下一個單詞。

舉個例子來說,假設我們輸入一個單詞序列: the students opened their,來預測下一個單詞,如下圖所示:

【2019斯坦福CS224N筆記】(6)RNN和與語言模型
  • 輸入層x^(t)是每個單詞的one-hot向量編碼,再乘上word embedding矩陣E得到e^t
  • 隐藏層的狀态計算如下圖所示:
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型
    如上圖可以看到,每個時間步的隐藏層狀态都由之前隐藏層狀态和目前的輸入決定。
  • 輸出層可以通過一個softmax函數進行預測下一個單詞
  • 這裡需要注意的是,在整個過程中學習的權重W_h和W_e是一樣的,是以減少了需要學習的參數數量,并且參數的數量與輸入序列的長度無關,是以不會出現n-gram存在的問題。

我們來小結一下RNN語言模型的優點:

  • 可以處理任意長度的輸入
  • 步驟t的計算(理論上)可以使用來自之前所有步驟的資訊,而不僅是一個視窗
  • 模型大小不會随着輸入時間的增加而增加。在每個時間步上應用相同的權重。

當然,這樣做也有一些缺點:

  • RNN計算是十分緩慢的。因為每個時間步的計算都需要先計算之前的序列,是以不能并行計算多個時間步
  • 在實踐中,存在梯度消失和爆炸問題,是以很難從許多步驟中擷取資訊

2.如何訓練RNN語言模型

  • 首先我們需要一個大的文本語料庫
  • 把其放到RNN語言模型中,計算每個時間步t的輸出
  • 定義損失函數,一般采用分類問題中常見的交叉熵損失函數:
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型
  • 取平均值,得到整個訓練集的總損失
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型
    然而,在整個語料庫上計算需要花費大量的時間。是以,在實際中我們可以采用随機梯度下降法批量計算損失和梯度然後進行更新。
  • 反向傳播用于RNN,計算loss的導數
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型

    (如果對反向傳播不是很了解的童鞋可以點選四、評估語言模型

    語言模型的标準評價名額是“perplexity”

    【2019斯坦福CS224N筆記】(6)RNN和與語言模型
    這等于交叉熵損失的指數:
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型
    幾種語言模型perplexity的比較:
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型

    五、使用RNN語言模型生成文本

    你可以在任何類型的文本上訓練RNN-LM,然後生成這種樣式的文本。讓我們來看一些RNN語言模型一些有趣的例子。

    1.RNN-LM訓練奧巴馬演講

    連結
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型

    2.RNN-LM訓練哈利波特

    連結
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型

    3.RNN-LM訓練食譜

    連結
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型

    4.RNN-LM訓練顔色名稱

    連結
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型

    除此之外,RNN還有許多的作用。比如:詞性标注、命名實體識别、情感分類、句子分類、回答問題,機器翻譯,許多其他任務!更為重要的是,RNN可以用作編碼器子產品。

    在接下來的課程中,我們将會介紹RNN的梯度消失問題,以及RNN的其他版本:GRU、LSTM等結構。

    喜歡的童鞋記得分享給别的小夥伴哈。AIMI-CN AI學習交流群【1015286623】 擷取更多AI資料掃碼加群:

    【2019斯坦福CS224N筆記】(6)RNN和與語言模型
    分享技術,樂享生活:我們的公衆号每周推送“AI”系列資訊類文章,歡迎您的關注!
    【2019斯坦福CS224N筆記】(6)RNN和與語言模型

繼續閱讀