語言模型 Language Model (LM)


定義

什么是語言模型,通俗的講就是從語法上判斷一句話是否通順。即判斷如下的概率成立:

\[p(\text{今天是周末})>p(\text{周末是今天}) \]

鏈式法則(chain rule)

\[p(w_1,w_2,...,w_n)=p(w_1)p(w_2|w_1)p(w_3|w_1,w_2)...p(w_n|w_1,w_2,...,w_{n-1}) \]

Markov assumption

Markov assumption(first order)

\[p(w_1,w_2,...,w_n)=p(w_1)p(w_2|w_1)...p(w_n|w_{n-1})=p(w_1)\prod_{i=2}^{n}p(w_i|w_{i-1}) \]

Markov assumption(second order)

\[p(w_1,w_2,...,w_n)=p(w_1)p(w_2|w_1)p(w_3|w_1,w_2)...p(w_n|w_{n-2},w_{n-1})=p(w_1)p(w_2|w_1)\prod_{i=3}^{n}p(w_i|w_{i-2},w_{i-1}) \]

N-gram語言模型

我們基於上述的Markov assumption將n=1、n=2、n=3等模型進行說明

Unigram

n=1的情況下,是相對於first order markov assumption情況更簡單的語言模型,其假設各個詞之間時相互獨立的,如下示:

\[p(w_1,w_2,...,w_n)=p(w_1)=p(w_1)p(w_2)...p(w_n) \]

Bigram

n=2的情況下,即是Bigram語言模型,其來源於first order markov assumption,其考慮了詞與詞之間的先后順序,如下所示:

\[p(w_1,w_2,...,w_n)=p(w_1)p(w_2|w_1)...p(w_n|w_{n-1})=p(w_1)\prod_{i=2}^{n}p(w_i|w_{i-1}) \]

trigram

n=3的情況下,即是Trigram語言模型,其來源於second order markov assumption,其考慮了當前詞與其前面兩個詞的先后順序關系,如下所示:

\[p(w_1,w_2,...,w_n)=p(w_1)p(w_2|w_1)p(w_3|w_1,w_2)...p(w_n|w_{n-2},w_{n-1})=p(w_1)p(w_2|w_1)\prod_{i=3}^{n}p(w_i|w_{i-2},w_{i-1}) \]

基於上述情況,常用的也就是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})\) ,則

\[p(w_i|w_{i-1})=C(w_i|w_{i-1}) / C(w_{i-1}) \]

Trigram的計算過程和上述基本一致,這里不再進行說明。

如何評估語言模型

perplexity

基本思想是,給測試集的句子賦予較高概率值的語言模型較好,當語言模型訓練完之后,測試集中的句子都是正常的句子,那么訓練好的模型就是在測試集上的概率越高越好。表達式為:

\[pp(s)=2^{-\frac{1}{N}\sum logp(w_i)} \]

上式中 \(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

計算公式如下所示:

\[P_{Add-1}(w_i|w_{i-1})=\frac{C(w_i|w_{i-1})+1}{C(w_{i-1})+V} \]

其中V是詞庫大小

Add-k smoothing

計算公式如下所示:

\[P_{Add-k}(w_i|w_{i-1})=\frac{C(w_i|w_{i-1})+k}{C(w_{i-1})+k*V} \]

Interpolation

Interpolation綜合Unigram、Bigram、Thrigram等方法進行平滑

\[p(w_n|w_{n-1},w_{n-2})=\lambda_1 p(w_n|w_{n-1},w_{n-2})+\lambda_2 p(w_n|w_{n-1})+\lambda_3 p(w_n) \]

其中 \(\lambda_1 + \lambda_2 + \lambda_3 = 1\)

Good-turning smoothing

其主要思想是從概率的總量中分配少量的比例給零概率項。
假定給定的語料庫中出現\(r\) 次數的詞有 \(N_r\) 個,則有

\[N = \sum_{i=1}^{\infty }rN_r \]

\(r\) 較小時,我們使用 \(d_r\) 代替 \(r\) ,這里 \(d_r < r\)\(d_r\) 的值可有下式表示

\[d_r = ( r+1 )N_{r+1}/N_r \]

其期望可以表示為

\[\hat{\theta }\left ( r \right )=\frac{1}{N}\left (r+1 \right )\frac{N_{r+1}}{N_r} \]

其中\(N\) 為現有語料庫中所有單詞頻數的總和,這樣可以保證

\[N = \sum_{r}^{ }d_rN_r \]

一般情況下,發生次數為\(r\) 的詞個數大於發生次數為 \(r\) +1的詞個數, \(r\) 越大,詞的數量 \(N_r\) 越小。通過Good-turning smooth可以讓數據稀疏度有效的降低,所有詞的概率估計會看起來很平滑。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM