語言模型 【入門乾貨】

前言

在機器學習領域,語音識別和圖像識別都不太需要預處理就能直接"喂"給計算機,這是因為,語音識別的輸入數據可以是音頻頻譜序列向量所構成的矩陣,圖像識別的輸入是像素點向量構成的矩陣,即它們本身就是計算機可以識別的"二進制"數據。

但是文本是一種非常抽象的東西,顯然計算機是不能直接識別出來的,也就是說不能直接把文本數據餵給計算機當做輸入,而是需要對文本數據進行一定的處理,使得處理後的文本可以直接作為計算機的輸入,也就是我們說的詞嵌入或者詞向量技術

要介紹詞向量是怎麼訓練得到的,就不得不提到語言模型。到目前為止我瞭解到的所有訓練方法都是在訓練語言模型的同時,順便得到詞向量的。

語言模型

語言模型是對一段文本的概率進行估計,即針對文本X,計算P(X)的概率,對信息檢索,機器翻譯,語音識別,文本分類等任務都有著重要的作用。在歷史的發展中,語言模型經歷了專家語法規則模型(至80年代),統計語言模型(至00年),神經網絡語言模型(到目前)。

專家語法規則模型

在計算機初始階段,隨著計算機編程語言的發展,歸納出的針對自然語言的語法規則。但是自然語言本身的多樣性、口語化,在時間、空間上的演化,及人本身強大的糾錯能力,導致語法規則急劇膨脹,不可持續。

統計語言模型

簡單的統計語言模型基本定義

要判斷一段文字是不是一句自然話(或者自然語言),可以通過確定這段文字的概率分佈來表示其存在的可能性。語言模型中的詞是有順序的,給定m個詞,看這句話是不是一句合理的自然語言,關鍵是看這些詞的排列順序是不是正確的。所以統計語言模型的基本思想是計算條件概率

語言模型 【入門乾貨】

簡單統計語言模型

為了計算語言模型,我們需要計算詞的概率,以及一個詞在給定前幾個詞的情況下的條件概率,即語言模型參數。設訓練數據集為一個大型文本語料庫,如維基百科的所有條目。詞的概率可以通過該詞在訓練數據集中的相對詞頻來計算。例如, P(w1) 可以計算為 w1 在訓練數據集中的詞頻(即詞出現的次數)與訓練數據集的總詞數之比。因此,根據條件概率定義,一個詞在給定前幾個詞的情況下的條件概率也可以通過訓練數據集中的相對詞頻計算。例如, P(w2∣w1)可以計算為 w1,w2 兩詞相鄰的頻率與 w1 詞頻的比值,因此該比值即為 P(w1,w2) 與 P(w1) 之比;而 P(w3∣w1,w2) 同理可以計算為 w1、w2 和 w3 三詞相鄰的頻率與 w1 、 w2 兩詞相鄰的頻率的比值。以此類推。

簡單統計語言模型的問題

  • 自由參數的數目

假設有句子(x1,x2,x3,...,xm)

那麼P(x6|x1,x2,x3,x4,x5)=count(x1,x2,x3,x4,x5,x6)/count(x1,x2,x3,x4,x5)。

假定字符串中的字符全部來自於大小為V的詞典,上述例子中我們需要計算所有的條件概率,對於所有的條件概率,這裡的x都有V中可能取值,那麼實際上這個模型的自由參數的數目量級是V^6(V的6次方),6為字符串的長度。

  • 數據稀疏性

從上面可以看到,每一個x都具有V種取值,這樣造出了非常多的詞對,但實際中訓練語料是不會出現這麼多種組合的,那麼一句最大似然估計,最終得到的概率實際很可能是0。

實際上,計算機是藉助於統計語言模型的概率參數,可以估計出自然語言中每個句子出現的可能性,而不是簡單的判斷該句子是否合法。統計語言模型用簡單的方式,加上大量的語料,產生了比較好的結果。統計語言模型通過對句子的概率分佈進行建模,概率高的語句比概率低的語句更為合理。在實現中,通過給定的上文來預測句子的下一個詞, 如果預測的詞和下一個詞是一致(該詞在上文的前提下出現的概率比其它詞概率要高),那麼上文+該詞出現的概率就會比上文+其他詞詞的概率要更大,上文+該詞更為合理。

N-gram模型

大家已經知道了統計語言模型的定義,那麼首先會遇到一個問題:當遇到長句子的時候,利用統計語言模型的計算公式,在計算最後一個詞語的概率P(xm|x1,x2,...,xm-1)會變得非常麻煩,計算和存儲多個詞共同出現的概率的複雜度會呈指數級增加。那我們是不是可以進行一定的簡化呢?

設想一下這句話:"今天天氣真不錯,感覺有點餓,我們去吃飯吧!",當我們預測P("吃飯")的概率時,感覺和最前面描述天氣的關係不是很大,而是和比較近的"有點餓"聯繫比較緊密,所以我們根據 一個詞會和它附近的詞聯繫比較緊密這樣的一個假設(本質上是馬爾可夫假設),進行簡化語言模型的概率公式,。

假設我們定義一個詞的概率和它前面的k個詞相關(即k-gram),公式改寫如下:

語言模型 【入門乾貨】

N-gram 語言模型

從模型的效果來看,理論上k的取值越大,效果越好。但是,隨著k取值的增加,效果提升的幅度是在下降的。同時還涉及到一個可靠性和可區別性的問題,參數越多,可區別性越好,但同時單個參數的實例變少從而降低了可靠性。

雖然N-gram比較好地解決了自由參數多的問題,但是數據稀疏的問題還是沒有被解決。


簡單小結:

統計語言模型就是計算一個句子的概率值大小,整句的概率就是各個詞出現概率的乘積,概率值越大表明該句子越合理。N-gram是典型的統計語言模型,它做出了一種假設,當前詞的出現只與前面N-1個詞相關,而與其他任何詞都不相關,整句的概率就是各個詞出現概率乘積。它存在很多問題:在求每一個詞出現的概率是,隨著n的提升,能夠擁有更多的前置信息,可以使得當前詞的預測更加準確,但是當N過大的時候,會出現稀疏問題,某些n-gram從未出現過,導致很多詞的概率值為0,為了避免這樣的問題,因此常用bigram或者trigram,然而這樣就又會使得N-gram模型無法獲得上文的長時依賴。另一方面,N-gram只是基於頻次進行統計,沒有足夠的泛化能力。也就是說,簡單的統計語言模型計算方法只能精確計算h的概率(因為是通過詞匹配和詞統計),而無法對相似的文本h'得到相近的概率值。



平滑處理

假設有一個詞組在訓練語料中沒有出現過,那麼它的頻次就是0,但是實際上能不能認為它出現的概率為0呢?這顯然是不可以的,因為我們無法保證訓練語料的完備性。那麼我們可以通過平滑處理來解決這樣的問題。通過默認每個詞組都出現1次,那麼無論詞組出現的頻次是多少,我們都往上加1,這就可以避免出現0頻次的問題。

語言模型 【入門乾貨】

加1平滑處理

常用的平滑技術還有:

語言模型 【入門乾貨】

常用平滑處理技術

神經網絡語言模型

傳統的語言模型具有一定的侷限性,比如:平滑技術複雜、計算量大、泛化性比較差。隨之而出的就是基於神經網絡的語言模型了。

2003年Bengio提出神經網絡語言模型(Neural Network Languge Model,NNLM)的思想是提出詞向量的概念(這時才是詞向量真正的被正式提出來),採用連續變量(具有一定維度的實數向量)來進行單詞的分佈式表示,代替了n-gram使用的高維的離散變量,解決了維度爆炸的問題,同時通過詞向量可獲取詞之間的相似性。

神經網絡語言模型的提出解決了基於統計的N-gram模型,當n取較大值的時候會發生的數據稀疏的問題。與N-gram語言模型相同,神經網絡語言模型(NNLM)也是對n元語言模型進行建模,估計P(x_{i}|x_{i-n+1},x_{i-n+2},...x_{i-1})的概率,與統計語言模型不同的是,神經網絡語言模型不通過計數的方式對n元條件概率進行估計,而是直接通過一個神經網絡對其建模求解。

Bengio 用了一個三層的神經網絡來構建語言模型,同樣也是 n-gram 模型。如下圖所示:

語言模型 【入門乾貨】

NNLM神經語言模型

結合上圖可知,它所建立的語言模型的任務是根據窗口大小內的上文來預測下一個詞,因此從另一個角度看它就是一個使用神經網絡編碼的n-gram模型。

神經網絡語言模型的結構如上圖所示,可以分為輸入層、投影層、隱藏層和輸出層。

  1. 輸入層:這裡就是詞x的上下文,如果用N-gram的方法就是詞x的前n-1個詞了。每一個詞都為長度為V的one-hot向量傳入神經網絡中。
  2. 投影層:投影層也叫embedding層,在投影層中,存在一個look-up表C,C被表示為一個V*m的自由參數矩陣,其中V表示詞典的大小,m表示每個詞投影后的維度。表C中每一行都作為一個詞向量存在,這個詞向量可以理解為每一個詞的另一種分佈式表示。每一個one-hot向量都經過表C的轉化變成一個詞向量。n-1個詞向量首尾相接的拼起來,轉化為(n-1)m的列向量輸入到下一層。
  3. 隱藏層:隱藏層的作用是進行非線性變化:z=tanh(WX+b)。
  4. 輸出層:用softmax進行概率計算,計算詞表V的每個詞的概率。P(x_{i})=softmax(z)。

優化的目標是使得待預測詞其對應的softmax值最大,值得注意的是,該神經網絡結構,輸入層的x(即詞向量)也是參數,也是需要進行不斷優化的,在優化結束之後,詞向量有了,語言模型也有了。

缺點:因為這是通過前饋神經網絡來訓練語言模型,缺點顯而易見就是其中的參數過多計算量較大,同時softmax那部分計算量也過大。另一方面NNLM直觀上看就是使用神經網絡編碼的 n-gram 模型,也無法解決長期依賴的問題。可以通過RNNLM語言模型來解決。

RNNLM

它是基於RNN及其變種網絡來訓練語言模型,任務是通過上文來預測下一個詞,它相比於NNLM的優勢在於所使用的為RNN,RNN在處理序列數據方面具有天然優勢,RNN 網絡打破了上下文窗口的限制,使用隱藏層的狀態概括歷史全部語境信息,對比 NNLM 可以捕獲更長的依賴,在實驗中取得了更好的效果。RNNLM 超參數少,通用性更強;但由於 RNN 存在梯度彌散問題,使得其很難捕獲更長距離的依賴信息。

語言模型的評判指標

具體參考:[這裡](https://blog.csdn.net/index20001/article/details/78884646)

Perplexity(困惑度)可以認為是average branch factor(平均分支系數),即預測下一個詞時可以有多少種選擇。別人在作報告時說模型的PPL下降到90,可以直觀地理解為,在模型生成一句話時下一個詞有90個合理選擇,可選詞數越少,我們大致認為模型越準確。這樣也能解釋,為什麼PPL越小,模型越好。一般用困惑度Perplexity(PPL)衡量語言模型的好壞,困惑度越小則模型生成一句話時下一個詞的可選擇性越少,句子越確定則語言模型越好。

後續

後續可能會講解一些預訓練語言模型或者比較重要的一些自然語言處理相關的知識點。大家可以一起探討,共同進步。


分享到:


相關文章: