nlp基礎之語言模型

nlp入門基礎之語言模型



https://zhuanlan.zhihu.com/p/28080127
https://zhuanlan.zhihu.com/p/52061158
https://blog.csdn.net/weixin_40056628/article/details/89364456

1. 簡介

語言模型(language model)是用來計算一個句子的概率的模型,或者預測下一個詞出現的概率。通俗地講,就是用來評估一個句子有多大的可能性是有意義的(是人話而不是一堆雜亂無章的詞語組合)。
一段自然語言文本可以看做是一個離散時間序列s=ω1,ω2,,ωTs=\omega_1,\omega_2,\cdots,\omega_T,而一個語言模型的作用是構建這個時間序列的概率分佈P(s)P(s)。概率計算公式可以表示爲:
P(s)=P(ω1,ω2,,ωT)=P(ω1)P(ω2ω1)P(ω3ω1,ω2)P(ωTω1,ω2,,ωT1)=t=1TP(ωtω1,ω2,,ωt1)(1-1) \begin{aligned} P(s)&=P(\omega_1,\omega_2,\cdots,\omega_T)\\ &=P(\omega_1)P(\omega_2|\omega_1)P(\omega_3|\omega_1,\omega_2)\cdots P(\omega_T|\omega_1,\omega_2,\cdots,\omega_{T-1})\\ &=\prod_{t=1}^{T}P(\omega_t|\omega_1,\omega_2,\cdots,\omega_{t-1})\\ \tag{1-1} \end{aligned}
對於P(ωtω1,ω2,,ωt1)P(\omega_t|\omega_1,\omega_2,\cdots,\omega_{t-1}),可以在大量娛樂庫中採用頻率統計的方式來近似估計:
P(ωtω1,ω2,,ωt1)=C(ω1,ω2,,ωt)ωC(ω1,ω2,,ωt1,ω)=C(ω1,ω2,,ωt)C(ω1,ω2,,ωt1)(1-2) \begin{aligned} P(\omega_t|\omega_1,\omega_2,\cdots,\omega_{t-1})&=\frac{C(\omega_1,\omega_2,\cdots,\omega_t)}{\sum_{\omega}C(\omega_1,\omega_2,\cdots,\omega_{t-1},\omega)}\\ &=\frac{C(\omega_1,\omega_2,\cdots,\omega_t)}{C(\omega_1,\omega_2,\cdots,\omega_{t-1})}\\ \tag{1-2} \end{aligned}
直接計算上式是不現實的。假設詞彙表大小爲VV,由上式可以看到,產生第ii個詞ωi\omega_i的概率是由已經產生的i1i-1個詞ω1,ω2,,ωi1\omega_1,\omega_2,\cdots,\omega_{i-1}決定的,那麼我們必須考慮所有Vi1V^{i-1}種不同歷史情況下,產生第ii個詞的概率。這樣模型中就會有ViV^i個自由參數(每個條件概率看成一個參數)。這在實際中幾乎是無法從訓練數據中估計出這些參數的。並且,很多詞的組合可能在語料庫中根本不存在,這樣會導致最後估計出的概率爲零(數據稀疏問題)。
因此需要引入語言模型來降低參數個數。語言模型有基於統計模型的,比如n元語法(n-gram),也有基於神經網絡的。

2. n元語法

n元語法(n-grams)是基於n-1階馬爾科夫鏈的概率語言模型,也即在n-gram模型中,一個詞的出現概率只與前面n-1個詞有關:
P(ω1,ω2,,ωT)=t=1TP(ωtωt(n1),ω2,,ωt1)(2-1) P(\omega_1,\omega_2,\cdots,\omega_T)=\prod_{t=1}^{T}P(\omega_t|\omega_{t-(n-1)},\omega_2,\cdots,\omega_{t-1})\\\tag{2-1}
每個條件概率需要實現在大量語料庫中根據頻率近似求得。

  • n=1: unigram,每個詞獨立於歷史
  • n=2: bigram,每個詞只與它前面的一個詞有關。實際中常用
  • n=3: trigram,每個詞只與它前面的兩個詞有關

n元語法模型可能的缺陷:

  1. 參數空間過大
  2. 數據稀疏

2.1. 一元模型(unigram)

一元模型假設每句子中的每個每個詞都是獨立的,也即:
p(s)=p(ω1)p(ω2)p(ωT)(2-2) p(s)=p(\omega_1)p(\omega_2)\cdots p(\omega_T)\\\tag{2-2}
需要實現在語料庫中統計每個字的頻率。

2.2. 二元模型(bigram)

p(s)=p(ω1start)p(ω2ω1)p(ωTend)(2-3) p(s)=p(\omega_1|start)p(\omega_2|\omega_1)\cdots p(\omega_T|end)\\\tag{2-3}

注意需要有句子開頭和結尾標識符。實踐中,需要先統計語料庫中詞語的兩兩組合情況的各自頻率,再統計每個詞的頻率,以便得到條件概率。

3. n-gram模型實踐

3.1. 文本分類

假設類別有兩類:Y1,Y2Y_1,Y_2,原始文本爲XX。由貝葉斯公司可知:
P(YiX)P(XYi)P(Yi),i=1,2(2-4) P(Y_i|X)\propto P(X|Y_i)P(Y_i),i=1,2\tag{2-4}

P(Yi)P(Y_i)就是類別YiY_i的文本比例;P(XYi)P(X|Y_i)就是在類別YiY_i下句子XX的概率,可以由n-gram算得

在上述貝葉斯假設條件下,可以簡化過程,直接將訓練樣本的n-gram特徵作爲輸入去訓練一個分類器,得到分類模型。

4. 神經網絡語言模型

4.1. 基於前饋神經網絡的語言模型

Bengio在2003的論文A Neural Probabilistic Language Model。
在這裏插入圖片描述

圖4.1 前饋神經網絡語言模型

先給每個詞在連續空間中賦予一個向量(詞向量),再通過神經網絡去學習這種分佈式表徵。利用神經網絡去建模當前詞出現的概率與其前 n-1 個詞之間的約束關係。很顯然這種方式相比 n-gram 具有更好的泛化能力只要詞表徵足夠好。從而很大程度地降低了數據稀疏帶來的問題。但是這個結構的明顯缺點是僅包含了有限的前文信息
該模型利用前n-1個詞去預測下一個詞,輸入層是n-1個詞的one-hot向量(每個向量是1×V1\times V),再乘以一個1×D1\times D的權重矩陣,得到1×D1\times D的中間向量,將n-1箇中間向量拼接成隱藏層(長度爲D(n1)D(n-1))。隱藏層的激活函數爲tanh,輸出層爲一個全連接層再接一個softmax函數生成概率分佈。該模型的副產物就是詞向量(輸入層到隱藏層的權重矩陣)
這篇論文是詞向量的鼻祖,後面的cbow和skip-gram都是由這裏啓發而來。

4.2. 基於循環神經網絡的語言模型

爲了解決定長信息(只能利用前面n-1個詞的信息)的問題,Mikolov在2010的論文 Recurrent neural network based language model。
在這裏插入圖片描述

圖4.2 RNN語言模型(圖片來源見水印)

網絡的輸入層是"s我想你",輸出層可以看作是分別計算條件概率 P(w|s)、P(w|s我)、P(w|s我想)、P(w|s我想你) 在整個詞表V中的值。而我們的目標就是使期望詞對應的條件概率儘可能大。

相比單純的前饋神經網絡,隱狀態的傳遞性使得RNN語言模型原則上可以捕捉前向序列的所有信息(雖然可能比較弱)。通過在整個訓練集上優化交叉熵來訓練模型,使得網絡能夠儘可能建模出自然語言序列與後續詞之間的內在聯繫。

爲了解決依賴的信息過長的問題,後續又有LSTM、attention等改進方法

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