定義
什么是語言模型,通俗的講就是從語法上判斷一句話是否通順。即判斷如下的概率成立:
鏈式法則(chain rule)
Markov assumption
Markov assumption(first order)
Markov assumption(second order)
N-gram語言模型
我們基於上述的Markov assumption將n=1、n=2、n=3等模型進行說明
Unigram
n=1的情況下,是相對於first order markov assumption情況更簡單的語言模型,其假設各個詞之間時相互獨立的,如下示:
Bigram
n=2的情況下,即是Bigram語言模型,其來源於first order markov assumption,其考慮了詞與詞之間的先后順序,如下所示:
trigram
n=3的情況下,即是Trigram語言模型,其來源於second order markov assumption,其考慮了當前詞與其前面兩個詞的先后順序關系,如下所示:
基於上述情況,常用的也就是Bigram,Trigram相對計算復雜結果更准確,n>3的情況下目前相對較少。
如何訓練語言模型
上述我們說明了n=1、2、3等情況下的語言模型,那如何訓練計算中的各個單詞的概率值呢?
一般情況下,我們是通過給定的訓練語料經過分詞后,統計各個詞出現的頻率(或者條件頻率)進行計算的,即在Unigram語言模型中,我們計算單個詞的概率,是拿該詞出現的次數除以整個訓練語料中詞的個數;在Bigram語言模型中,計算 \(p(w_i|w_{i-1})\) 的值,則需要先計算 \(w_{i-1}\) 這個詞出現的次數 \(C(w_{i-1})\) ,而后計算 \(w_{i-1}\) 詞后出現 \(w_i\) 這個詞的數目 \(C(w_i|w_{i-1})\) ,則
Trigram的計算過程和上述基本一致,這里不再進行說明。
如何評估語言模型
perplexity
基本思想是,給測試集的句子賦予較高概率值的語言模型較好,當語言模型訓練完之后,測試集中的句子都是正常的句子,那么訓練好的模型就是在測試集上的概率越高越好。表達式為:
上式中 \(logp(w_i)\) 是我們在測試集中計算各個單詞的概率,比如Unigram即是單個詞的概率,Bigram即是 \(p(w_i|w_{i-1})\) 的概率,依次類推。
smoothing
在計算各個概率的過程中,受限於語料集的問題,並不能涵蓋所有的詞,如果不做smoothing平滑的話,會導致某些詞的概率為0,這種情況下不管其他詞概率為多少,計算的結果均為0,這種情況違背了我們的初衷。解決此問題的方式是增加平滑項。
- Add-one smoothing
- Add-k smoothing
- Interpolation
- Good-turning smoothing
Add-one smoothing
計算公式如下所示:
其中V是詞庫大小
Add-k smoothing
計算公式如下所示:
Interpolation
Interpolation綜合Unigram、Bigram、Thrigram等方法進行平滑
其中 \(\lambda_1 + \lambda_2 + \lambda_3 = 1\)
Good-turning smoothing
其主要思想是從概率的總量中分配少量的比例給零概率項。
假定給定的語料庫中出現\(r\) 次數的詞有 \(N_r\) 個,則有
當\(r\) 較小時,我們使用 \(d_r\) 代替 \(r\) ,這里 \(d_r < r\) , \(d_r\) 的值可有下式表示
其期望可以表示為
其中\(N\) 為現有語料庫中所有單詞頻數的總和,這樣可以保證
一般情況下,發生次數為\(r\) 的詞個數大於發生次數為 \(r\) +1的詞個數, \(r\) 越大,詞的數量 \(N_r\) 越小。通過Good-turning smooth可以讓數據稀疏度有效的降低,所有詞的概率估計會看起來很平滑。