詳解語言模型

1. 引入

語言模型是兩種系統的基礎

  • 語音識別系統
  • 機器翻譯系統

所謂語言模型,能夠告訴你,某個特定的句子(序列),出現的概率是多少。

舉個例子,假設一個人說了一句話,這句話可能是如下兩種文本中的一種

  1. The apple and pair salad.
  2. The apple and pear salad.

你覺得這個人說的是1的可能性大,還是2的可能性大?

語言模型能給你這兩句話各自的可能性,p(text1)=0.002, p(text1)=0.003。所以是2的可能性更高。

2. 語言模型的構建過程

  1. Tokenize

首先,我們得有corpus(語料),就是大量的文本數據。

然後,我們要做Tokenize:建立一個字典,將每個單詞都轉化成對應的one-hot向量。

如果你需要模型能準確識別句子結尾,那你還需要定義句子的結尾,一般用EOS(end of sentence)。

如果句子中有些詞並沒有在你的字典中出現過,那你就可以把這個單詞替換爲UNK(unique token),即代表未知詞。

  1. 構建RNN

假設輸入的文本爲:

  • Cats average 15 hours of sleep a day.

(1)在第0個時刻,輸入向量(x<1>)爲0向量,對應的輸入a<0>也爲0向量,輸出層用一個softmax來輸出概率。他只是預測第一個詞的概率,而不去管結果是什麼。這個步驟在下圖的1處表示。

(2)接下來的時刻,我們告訴模型,第一個詞是Cats(把Cats的向量作爲輸入),讓模型告訴我們Cats後面應該接一個什麼詞,也就是此時y<2>=p(average|Cats)。這個步驟在下圖的2處表示

(3)接下來的時刻,y<3> = p(?|“Cats average”)

(4)接下來每個步驟的RNN,都會考慮前面出現過的詞

爲了訓練RNN,我們要定義Cost Function,即下圖的3處的公式。有hat的符號,表示預測值。

在這裏插入圖片描述

3. 一些細節

  1. RNN模型訓練時,需要知道y<2>=p(average|Cats),就是條件概率(Cats出現時,後面出現average的概率),那這個條件概率怎麼計算呢?
  • 可以在語料中,直接統計而得到,這也是我們需要大量語料做模型訓練的原因
  1. 除了RNN,還有其他方法構建語言模型嗎?
  • wikipedia上給出了一種直接用統計方法構建語言模型的方法

在這裏插入圖片描述

這是基於NGRAM的語言模型(概率)計算方式。要注意句子開頭會被看做一個字符,句子結束也會被看做一個字符。通過對語料中的單詞進行統計,就能算出各個單詞出現的條件概率。條件概率乘在一起,就能算出一個序列(一句話)的概率。

4. 總結

A statistical language model is a probability distribution over sequences of words. Given such a sequence, say of length m, it assigns a probability p(w1,w2,…,wm) to the whole sequence.

參考

  • [1]. Andrew Ng. Sequence Model class
  • [2]. https://en.wikipedia.org/wiki/Language_model
  • [3]. 如何用python構建一個語言模型, https://nlpforhackers.io/language-models/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章