1. 程式人生 > >自然語言處理 學習筆記(二)

自然語言處理 學習筆記(二)

個人學習nlp筆記:學習材料CS124、COSC572和《Speech and Language Processing》第三版

在這裡插入圖片描述

自然語言處理 學習筆記(二)

1.語言模型(language modeling)

語言模型的任務是賦予句子一個概率,比如在機器翻譯任務中,我們藉由概率,選擇一個"較好"的翻譯,同樣在拼寫糾錯和語音識別中也有很多應用。

1.1.概率語言模型(N-gram)

在這裡插入圖片描述
將句子中的每個詞當作一個變數,因此即將出現的單詞w5的概率可用一個條件概率表示。

從直覺上我們可以用鏈式法則來計算句子的聯合概率
在這裡插入圖片描述


在這裡插入圖片描述

計算量太大,且需要資料集太多,因此我們可以引入馬爾可夫假設,看作只有前幾個單詞對有影響。想想確實是這樣。顯然前幾個是最重要的,後面的單詞加入後,對應的資料集指數增加,相應得到的概率必然很小,不是決定性因素,同時資料集也不支援。
在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述
然而語言是不獨立的,就算距離很遠的單詞也是會存在關係的,比如上文的 computer和crashed

1.2.N-gram的概率估計

在這裡插入圖片描述
計算例子,其中包括了p(w|*), 在trigram中應為 P(W|*,*)
在這裡插入圖片描述
同樣,我們應該使用log,把概率相乘改為概率相加,這是為了防止程式設計時候的數值下溢(arithmetic underflow),同時相加的運算要快於相乘。

1.3.語言模型的評估

評估語言模型效能的最佳方法,在一個不在訓練集中的資料中訓,來與其他模型比較,這也叫做外在評估(Extrinsic/in-vivo evaluation)

在這裡插入圖片描述

缺點就是太浪費時間了,因此可以採用內部(intrinsic)評估的方式:perplexity

在這裡插入圖片描述
這個模型的直覺就是能給預測的單詞賦予更高的概率的模型就是好模型
在這裡插入圖片描述

在這裡插入圖片描述
顯然,trigram比bigram和unigram要好

1.4. 標準化和概率為0的問題

n-gram的概率矩陣是十分稀疏的,尤其在bigram和trigram中。
比如在WSJ資料集中,有

phrase count
denied the allegations 5
denied the speculation 2
denied the rumors 1
denied the report 1

但是在測試集中沒有出現,如

phrase count
denied the offer 0
denied the loan 0

但是顯然,下面兩個也是可能出現的。因此我們要對這些P(w)=0進行處理,原因有二
①這些雖然為0,但依舊很可能出現
②任何一個為零,整個句子的概率就成了0,就算log化,log0也沒法操作,同時計算perplexity也沒法進行(分母為0咋整)。

1.4.1 未登入詞

有些時候在trigram或bigram上,不單單隻有概率為0的問題,同樣存在著諸如,出現了在模型中沒有見過的詞,這些詞被稱為未登入詞(unknown words)或者是out of vocabulary (OOV) words,OOV詞在測試集上的的出現概率被稱為OOV rate。

一般解決這個問題有兩種方法:
1.在文字標準化過程中,將所有未登入詞標記為,再根據計數來估計概率
2.設定一個門檻,小於給定數V的單詞全都當作 <UNK>

2. 平滑方法

有些詞出現在我們的單詞表中,但是計數為0(比如一些bigram模型),此時,把一些常出現的詞的概率分一點點給這些出現零次的詞,這個方法就叫平滑或者貼現(discounting),書中介紹了4種平滑方法:
加一平滑法,加k平滑法以及簡單退避法和Kneser-Ney平滑法。

2.1 拉普拉斯平滑(加一平滑法)

非常直觀,就是所有單詞出現次數加1,然後總數加V(單詞個數),當然,這個平滑的效果在n-gram上不是很好,但是在文字分類或者是一些概率0出現的不是那麼多的領域,還是可以使用這個方法。因為我們改變了單詞出現的次數,所以這實際上也是一種non-maximum likelihood的估計法
在這裡插入圖片描述

我們也可以用adjucted count的方法,實質是令 P m l e : = P a d j u s t e d P_{mle} := P_{adjusted}
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

上兩張圖分別是直接count加1和使用adjusted count的區別,實質上,這兩種方法對高頻率的單詞概率的影響都是差不多大的。

2.2 加K平滑法

在這裡插入圖片描述

實質和加1的方法差不多,其中K的選取可以用交叉驗證選超引數的方法,雖然同樣對語言模型效果不好,但是在文字分類等問題上有一定幫助。

2.3 退避法和插值法

如果在使用trigram或更高維度語言模型時,由於單詞出現頻數過小等原因,可能導致置信度不足,可以選擇退到bigram或者unigram模型,這就是退避法(back off)的直觀理解。而插值法(Interpolation)就是將trigram, bigram和unigram用賦權的方法線性組合,獲得新的概率,一般插值法的表現更好。

在這裡插入圖片描述
兩種插值法,在條件λ種,λ的大小和 w n w_{n} 前面兩個單詞有關。
在這裡插入圖片描述

λ的估計,思路也是像選超引數一樣選λ。
在這裡插入圖片描述
也可以用EM演算法來獲得區域性最優的λ(Jelinek and Mercer, 1980)

卡茨退避法:
在這裡插入圖片描述
在這裡插入圖片描述
Good-Turing Smoothing其實就是之前 c a d j u s t e d c_{adjusted} 的方法

2.4 Kneser-Ney 平滑方法

Kneser-Ney平滑方法在機器翻譯和語音識別中都非常常見,其來源於另一種方法:absolute discounting interpolation
在AP newswire上的訓練集切分為兩份,每份都為兩千兩百萬個單詞,可以發現,在頻數2-9中,只需要減去0.75,我們就能的到和在第二份訓練集差不多的count,而在0-1中不行。因此absolute discounting interpolation的直覺理解就是高頻率的單詞的估計較為可靠,而低頻率不可靠,我們要對詞頻進去一個固定的數d,這個d要對高頻率的單詞計數影響較小。
在這裡插入圖片描述
absolute discounting interpolation:其實也可以單獨設count為1時d為0.5等
在這裡插入圖片描述

在unigram中,對一些詞可能沒用很好辦的處理,比如詞夥或者是一些諸如Hong kong的片語,雖然Kong這個詞出現的多,但是僅限於跟在Hong後面,因此需要對unigram得到的概率進行處理,用一個 P C O N T I N U A T I O N P_{CONTINUATION} 來改進單獨的 P ( w i ) P(w_{i})

我們假設如果一次詞在不同上下文中出現次數多,那麼在新的內容中,它出現的可能也會更大,因此可得 P C O N T I N U A T I O N P_{CONTINUATION} 的值基於它在不同上下文中出現次數,也就是它所完成的二元組型別的數量。 在這裡插入圖片描述

在這裡插入圖片描述
最終的bigram的KN平滑方法:
在這裡插入圖片描述
第一個max比較好理解,我們不想要一個負的概率。第二個項相當於被賦予了 C ( w i 1 w i ) d C(w_{i-1}w_{i})-d 去掉的概率。 λ ( w i 1 ) λ(w_{i-1}) 中前面的 d v C ( w i 1 v ) \frac{d}{\sum_{v} C(w_{i-1}v)} 主要的功能還是標準化,而 { w : C ( w w i 1 v ) } |{\{w:C(w_{wi-1}v)\}}| 就相當於所有可以跟著 w i 1 w_{i-1} 的詞的個數。

下面是一個推廣到其他ngram模型的KN平滑:
在這裡插入圖片描述
其中,如果我們計算被插值的最高次序的ngram(本文例子中即trigram)或者較低次序的ngram(如應bigram和unigram),用 C N K C_{NK} 來代替普通的count,在最高次序的ngram中,直接使用count,但是較低的中,使用continuation count,也就是 { w : C ( w w i 1 v ) } |{\{w:C(w_{wi-1}v)\}}| ,也就是本文中的the number of unique single word context for *。後一項,即λ…表示的就是低一次序的ngram,這也就是為什麼說他是迭代的原因。

在迭代到unigram時候,用一個空字元代替 w i n + 1 i 1 w_{i-n+1}^{i-1} ,因為unigram中和前一個字元沒關係哈。這樣的話,可知未登入詞就為一個計算為0的字元,且概率服從權重為λ的均勻分佈。

2.5 網頁文字與簡單退避法

在使用網路資料時,我們可能會建立起巨大的語言模型,比如谷歌在06年做的一個數據集中就有上億個單詞,因此顯然我們需要尋求優化的方法。我們可以用 64-bit的雜湊值來表示數字,用4-8bit的位置存放概率。我們同樣可以用修剪(prune)的方法來簡化,比如用熵的方法衡量不重要的n-gram模型(Stolcke,1998),或者只儲存大於一個閾值的單詞。或者使用Bloom filters (Talbot and Osborne 2007, Church et al. 2007)方法來獲得近似的語言模型等等。
在這裡插入圖片描述

簡單退避法,就是在n-gram中若出現為0的情況下,退回(n-1)-gram模型中獲得相關的值再乘以一個常數,如果還為0,繼續往下迭代。
在這裡插入圖片描述
一些其他的語言模型
在這裡插入圖片描述

2.6 平滑方法總結

關於平滑方法的總結:
在這裡插入圖片描述

3. 複雜度和熵

用於評估語言模型的複雜度(Perplexity)實際上是從交叉熵引變而來,交叉熵實際就是用來衡量資訊不確定性的一個指標,log的下標一般為2,這樣熵的單位就是bit了
在這裡插入圖片描述
交叉熵,用來度量分佈的差異。
在這裡插入圖片描述
熵的概念還是理解不好,以後再遇到要搞定。

4. 拼寫識別和糾正

錯誤一般分為兩種,一是直接的typo,錯誤的拼寫導致得到一個不存在的詞;二是得到一個存在的詞,但是原因一可能是typo第二可能是發音相似而導致的錯誤。
在這裡插入圖片描述

這幾種問題的解決方法:
在這裡插入圖片描述
在這裡插入圖片描述

4.1 噪聲通道模型

噪聲通道模型也就是, noisy channel model,其的直觀理解是
在這裡插入圖片描述
給定這個模型,我們能通過其,找到最可能是原本正確的單詞 w w 。其實就是一個貝葉斯推斷的模型。
在這裡插入圖片描述
似然概率 P ( x w ) P(x|w) 又稱作 c h a n n e l   m o d e l channel\ model e r r o r   m o d e l error \ model

noisy channel algorithm:
在這裡插入圖片描述

在這裡插入圖片描述
一般其中的編輯距離可以是拼寫相關的或是發音相關的距離,本文用的第一種。其次,在拼寫錯誤中,80%的錯誤都在編輯距離1,幾乎所有都在編輯距離1到2中。當然,同樣像詞之間少了空格或者破折號的這類錯誤也需要我們的關注。
以一個拼寫錯誤 a c r e s s acress 為例子:
在這裡插入圖片描述

其中先驗概率 p ( w ) p(w) 可通過語言模型獲得,unigram或者trigram都行(trigram中應該是 p ( w i w i k + 1 i 1 ) p(w_{i}|w_{i-k+1}^{i-1}) )。本文以unigram為例子。
在這裡插入圖片描述

而對於 p ( x w ) p(x|w) ,也就是 e r r o r   m o d e