自然語言處理——語言模型

1.語言模型

語言模型是自然語言處理的重要技術。自然語言處理中最常見的數據是文本數據。我們可以把一段自然語言文本看做一段離散的時間序列。假設一段長度爲T的文本中的詞依次爲w1,w2,...,wTw_1,w_2,...,w_T,那麼在離散的時間序列中,wt(1tT)w_t(1\leq t\leq T)可看做在時間步t的輸出或者標籤。給定一個長度爲T的詞的序列w1,w2,...,wTw_1,w_2,...,w_T,語言模型將計算該序列的概率:P(w1,w2,...,wT)P(w_1,w_2,...,w_T)語言模型可用於提升語言識別和機器翻譯的性能。例如,在語言識別中,給定一段“廚房食油用完了”的語言,有可能會輸出“廚房裏食油用完了”和“廚房裏石油用完了”這兩個讀音完全一樣的文本序列。如果語言模型判斷出前者的概率大於後者的概率,我們就可以根據相同讀音的語言輸出“廚房裏食油用完了”的文本序列。

在機器翻譯中,如果對英文“you go first”逐詞翻譯成中文的話,可能得到“你先走”“你走先”等排列方式的文本序列。如果語言模型判斷出“你先走”的概率大於其他排列方式的文本序列的概率,我們就可以把“you go first”翻譯成“你先走”。

1.1.語言模型計算

既然語言模型很有用,那該如何計算它呢?假設序列w1,w2,...,wTw_1,w_2,...,w_T中的每個詞是依次大生成的,我們有P(w1,w2,...,wT)=t=1TP(wtw1,...,wt1)P(w_1,w_2,...,w_T)=\prod_{t=1}^TP(w_t|w_1,...,w_{t-1})例如,一段含有4個詞的文本序列的概率P(w1,w2,w3,w4)=P(w1)P(w2w1)P(w3w1,w2)P(w4w1,w2,w3)P(w_1,w_2,w_3,w_4)=P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)P(w_4|w_1,w_2,w_3)爲了計算語言模型,我們需要計算詞的概率,以及一個詞在給定前幾個詞的情況下的條件概率,即語言模型參數。設訓練數據集爲一個大型文本語料庫,如維基百科的所有條目。詞的概率可以通過該詞在訓練數據集中的相對詞頻來計算。例如,P(w1)P(w_1)可以計算爲w1w_1在訓練數據集中的詞頻(詞出現的次數)與訓練數據集的總詞數之比。因此,根據條件概率定義,一個詞在給定前幾個詞的情況下的條件概率也可以通過訓練數據集中的相對詞頻計算。例如,P(w2w1)P(w_2|w_1)可以計算爲w1w_1w2w_2兩詞相鄰的頻率與w1w_1詞頻的比值,因爲該比值即P(w1,w2)P(w_1,w_2)p(w1)p(w_1)之比;而P(w3w1,w2)P(w_3|w_1,w_2)同理可以計算爲w1,w2,w3w_1,w_2,w_3這三個詞相鄰的頻率與w1,w2w_1,w_2這兩個詞相鄰的頻率的比值,以此類推。

1.2. n元語法

當序列長度增加時,計算和存儲多個詞共同出現的概率的複雜度會呈指數級增加。n元語法通過馬爾科夫假設(雖然不一定成立)簡化了語言模型的計算。這裏的馬爾科夫假設是指一個詞出現的只與前面n個詞相關,即n階馬爾科夫鏈。如果n=1,那麼有P(w3w1,w2)=P(w3w2)P(w_3|w_1,w_2)=P(w_3|w_2)。如果基於n-1階馬爾科夫鏈,我們可以將語言模型改寫爲:P(w1,w2,...,wT)t=1TP(wtwt(n1),...,wt1)P(w_1,w_2,...,w_T)\approx \prod_{t=1}^T P(w_t|w_{t-(n-1)},...,w_{t-1})$$以上也叫n元語法(n-grams)。它是基於n-1階馬爾科夫鏈的概率語言模型。當n分別爲1、2和3時,我們將其分別稱作一元語法(unigram)、二元語法(bigram)、三元語法(trigram)。

當n較小時,n元語法往往並不準確。例如,在一元語法中,由3個詞組成的句子“你走先”和“你先走”的概率是一樣的。然而,當n較大時,n元語法需要計算並存儲大量的詞頻和多詞相鄰頻率。

在n元語法中,時間步t的詞wtw_t基於前面所有詞的條件概率只考慮了最近時間步的n-1和詞。如果要考慮比t-(n-1)更早時間步的詞對wtw_t的可能影響。我們需要增大n,但這樣模型參數的數量將隨之呈指數級增長。

與n元語法不同,循環神經網絡並非剛性地記憶所有固定長度的序列,而是通過隱藏狀態來存儲之間時間步的信息。

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