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,⋯,ωT,而一個語言模型的作用是構建這個時間序列的概率分佈P(s)。概率計算公式可以表示爲:
P(s)=P(ω1,ω2,⋯,ωT)=P(ω1)P(ω2∣ω1)P(ω3∣ω1,ω2)⋯P(ωT∣ω1,ω2,⋯,ωT−1)=t=1∏TP(ωt∣ω1,ω2,⋯,ωt−1)(1-1)
對於P(ωt∣ω1,ω2,⋯,ωt−1),可以在大量娛樂庫中採用頻率統計的方式來近似估計:
P(ωt∣ω1,ω2,⋯,ωt−1)=∑ωC(ω1,ω2,⋯,ωt−1,ω)C(ω1,ω2,⋯,ωt)=C(ω1,ω2,⋯,ωt−1)C(ω1,ω2,⋯,ωt)(1-2)
直接計算上式是不現實的。假設詞彙表大小爲V,由上式可以看到,產生第i個詞ωi的概率是由已經產生的i−1個詞ω1,ω2,⋯,ωi−1決定的,那麼我們必須考慮所有Vi−1種不同歷史情況下,產生第i個詞的概率。這樣模型中就會有Vi個自由參數(每個條件概率看成一個參數)。這在實際中幾乎是無法從訓練數據中估計出這些參數的。並且,很多詞的組合可能在語料庫中根本不存在,這樣會導致最後估計出的概率爲零(數據稀疏問題)。
因此需要引入語言模型來降低參數個數。語言模型有基於統計模型的,比如n元語法(n-gram),也有基於神經網絡的。
2. n元語法
n元語法(n-grams)是基於n-1階馬爾科夫鏈的概率語言模型,也即在n-gram模型中,一個詞的出現概率只與前面n-1個詞有關:
P(ω1,ω2,⋯,ωT)=t=1∏TP(ωt∣ωt−(n−1),ω2,⋯,ωt−1)(2-1)
每個條件概率需要實現在大量語料庫中根據頻率近似求得。
- n=1: unigram,每個詞獨立於歷史
- n=2: bigram,每個詞只與它前面的一個詞有關。實際中常用
- n=3: trigram,每個詞只與它前面的兩個詞有關
n元語法模型可能的缺陷:
- 參數空間過大
- 數據稀疏
2.1. 一元模型(unigram)
一元模型假設每句子中的每個每個詞都是獨立的,也即:
p(s)=p(ω1)p(ω2)⋯p(ωT)(2-2)
需要實現在語料庫中統計每個字的頻率。
2.2. 二元模型(bigram)
p(s)=p(ω1∣start)p(ω2∣ω1)⋯p(ωT∣end)(2-3)
注意需要有句子開頭和結尾標識符。實踐中,需要先統計語料庫中詞語的兩兩組合情況的各自頻率,再統計每個詞的頻率,以便得到條件概率。
3. n-gram模型實踐
3.1. 文本分類
假設類別有兩類:Y1,Y2,原始文本爲X。由貝葉斯公司可知:
P(Yi∣X)∝P(X∣Yi)P(Yi),i=1,2(2-4)
P(Yi)就是類別Yi的文本比例;P(X∣Yi)就是在類別Yi下句子X的概率,可以由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×V),再乘以一個1×D的權重矩陣,得到1×D的中間向量,將n-1箇中間向量拼接成隱藏層(長度爲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等改進方法