CS224N 2019 Lecture 6: RNN:Language Models and Recurrent Neural Network

本次課主要介紹了兩個模型n-gram和RNN

語言模型

語言模型是一個預測一句話中的下一個單詞的任務

也就是說,給定單詞[x1,x2,x3,x4...xt],預測下一個單詞x(t+1)是什麼單詞.x(t+1)是給定詞彙表V={w1,w2,...,Wv}中的單詞。

也可以把語言模型理解爲給一段文本分配概率的模型。

比如說,有一段文本x1,x2,x3,xt,這個文本的概率是:

n-gram語言模型

給定一句話:

the student open their ______

預測空白處可能是什麼單詞。

如何預測?使用n-gram語言模型。

一個n-gram是指一系列單詞,如果說

  • unigram(n=1):“the”, “students”, “opened”, ”their”
  • bigrams(n=2): “the students”, “students opened”, “opened their”
  • trigrams(n=3): “the students opened”, “students opened their”
  • 4-grams(n=4): “the students opened their”

使用頻率來計算n-gram的概率。

n-gram模型是假設預測單詞出現的概率與前n-1個單詞有關。

上面的計算用到了貝葉斯公式。

分母是(n-1)-gram,分子是n-gram。

如何計算分子和分母呢?

通過頻率計算。

上式約等於:

比如說有一個4-gram的模型:

students opened their出現了1000次,student opened their books 出現了400次,那麼

P(books | students opened their) = 0.4

如果student opened their exams 出現了100次,

那麼

P(exams | students opened their) = 0.1

但是n-gram模型拋棄了除了n個單詞之外的前文。

存在一個巨大的問題:稀疏性

1、如果student open their w從來沒有出現呢?那麼w的可能性就是0!

解決方案:給分子一個很小的數?,成爲平滑性。

2、如果student open their從來沒有出現呢?那麼不能計算出w的任何概率!

解決方案:n變成n-1,也就是用open their的概率代替。

注意:增加n會讓稀疏性問題更嚴重,一般n不超過5

還有一個問題:存儲問題

需要存儲所有的n-gram的頻率,增加n或者增加語料庫的大小都會增加模型的大小。

如何構建一個神經語言模型呢?

 

固定窗口的窗口的語言模型:第三課中講到的命名體識別模型

  1. 把輸入的單詞xi表示爲one-hot向量,
  2. 把它們轉化爲word embeddings的形式,表示爲e
  3. 從embeddings層到隱藏層通過權重W計算We+b1
  4. 在隱層層計算h=f(We+b1)
  5. 從隱藏層到輸出層計算Uh+b2
  6. 在輸出層計算y=softmax(Uh+b2)

固定窗口的神經語言模型與n-gram語言模型比較:

  1. 沒有稀疏問題
  2. 不需要存儲大量的n-gram

存在問題:

  1. 固定的窗口太小了。
  2. 增大窗口會增加W
  3. 窗口永遠都不會足夠大
  4. 計算Wx時,x1 和x2 計算時至於W中的某一列相關,比如x1計算時只用到了W的第一列,x2計算時只用到了W的第2列。

我們需要神經結構來處理任意長度的輸入。

RNN:循環神經網絡

以下圖片爲循環神經網絡的公式圖片:

優勢:

  1. 可以處理任意長度的輸入
  2. 計算步驟t時使用之前許多步的信息。
  3. 模型的規模不會隨着輸入的增加而增加
  4. 每一步都有相同的權重,所以處理輸入時有對稱性。

缺點:

  1. 計算比較慢
  2. 實際上,很難處理很多步驟之前的信息

 

RNN的訓練

給定一個包含很多單詞序列的大的語料庫餵給RNN

每一步都計算出一個y

步驟t上的損失函數是正確值y和預測值y'的交叉熵損失函數。其中正確值y是一個one-hot向量,只有一個是1,其他是0。

最後一步計算把沒有了是因爲它是一個ont-hot向量,只有一個位置是1,其他是0,帶入即可得上式。

均一化訓練過程中的損失:

下圖爲RNN計算損失的過程,每一步都會產生一個交叉熵損失,求出所有步驟的交叉熵損失,並求和。

但是計算整個語料庫中的x1...xt代價太大,因此採用隨機梯度下降的方法,在一個小數據集上求損失。

如何計算梯度呢?

求每一步中所有的梯度的和:

就像n-gram模型,可以使用RNN預測下一個輸出的單詞。

語言模型的評估:使用perplexity。

等價於交叉熵損失:(最下面的兩個是怎麼相等的沒搞懂)

perplexity越小越好。

注意:循環神經網絡RNN!=語言模型

RNN的用途很廣泛:

詞性標註

情感分類

作爲編碼器使用

與其他神經網絡結合使用

 

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