1. 程式人生 > >NLP --- 產生式模型VS判別式模型

NLP --- 產生式模型VS判別式模型

上一節我們介紹了概率圖模型,這將在隱馬爾可夫和條件隨機場使用到,還會使用到的另外一個概念就是產生式模型和判別式模型,那麼什麼是產生式模型,什麼是判別式模型呢?下面我們詳細介紹這兩種模型的區別。

他們的來源還是機器學習,在機器學習中,我們知道是分類問題,器分類就是等價於輸入\large X,求輸出\large Y的概率即\large P(Y/X),由此可知分類問題其實就是一個求條件概率的問題,因此這裡就牽扯到如何求解條件概率的問題,根據求解這個條件概率的不同方式進行分為生成式模型和判別式模型,下面我們分別看看生成式模型和判別式模型是如何求解這個條件概率的。

這裡先簡單的用書面語解釋什麼是生成式模型,什麼是判別式模型,其實很簡單的,生成式模型就是根據條件概率公式進行求解,如下:

                                  \large P(A/B) = \frac{P(AB)}{P(B)}                                                                        \large \left ( 0 \right )

即如果要求條件概率我就需要求AB的聯合概率分佈,而求出\large P(AB)後對其求邊緣密度即可求出\large P(B),因此只要求出聯合概率密度\large P(AB)就可以求出條件概率\large P(A/B)了,而判別式模型不是通過求解聯合概率密度,而是通過其他方法直接估算出條件概率\large P(A/B)的模型稱為判別式模型。其實他們的區別就是這樣,很簡單,這裡大家感覺那個好用呢?其實沒什麼對比的,看場合使用,有時候我們很難求聯合概率密度,因為一旦變數變大,計算量指數級增長,因此就出現了判別式模型,這裡分別對其舉一個例子,供大家理解,至於為什麼要介紹這個知識點,稍後解釋。

生成式模型:         

樸素貝葉斯

樸素貝葉斯是典型的生成式模型,這裡不懂樸素貝葉斯的建議看

我的這篇文章,下面使用樸素貝葉斯對垃圾郵件分類的例子進行說明生成式模型的求解過程。 

這裡簡要介紹一下,使用x代表郵件的文字,主要由多個特徵組成,特徵可能包含風險連線、敏感字句如“代考”,‘偉哥’等、還包括廣告等等這樣的特徵,y是判斷是否為垃圾郵件,如果是垃圾郵件用T表示,反之用F表示,郵件分類可表示如下:

                                                 \large P(y=T/x) = \frac{P(x,y=T)}{P(x)}                                           \large \left ( 1 \right )

                                                \large P(y=F/x) = \frac{P(x,y=F)}{P(x)}                                            \large \left ( 2 \right )

上面兩式分別表示郵件為垃圾郵件和非垃圾郵件的概率,大家會不會疑惑分母\large P(x)是文字檔案的概率,怎麼求的呢?其實在這裡不用求,把\large \left ( 1 \right )\large \left ( 2 \right )相除即可抵消,即:

                                               \large \frac{P(y=T/x)}{P(y=F/x)}=\frac{P(x,y=T)}{P(x,y=F)}                                            \large \left ( 3 \right )

這樣就就巧妙的消去了難求的\large P(x),此時只要比較比值的大小就可以確定分類了,如果比值大於1就把郵件分為垃圾郵件反之為正常郵件,但是這裡需要注意的是即使沒有了\large P(x)\large \left ( 3 \right )式還是很難求,因為聯合概率密度\large P(x,y=*)很難求(\large *不是沒顯示是代表T或者F的意思),他表示什麼意思呢?在不同特徵的垃圾或者非垃圾郵件的概率,這個很難求,如果一個文字有1000個特徵計算量還是很大的,因此計算聯合概率密度還是很困難的,那麼通過什麼解決呢?還是通過條件概率,按照下式把\large \left ( 3 \right )右端的分子分母展開如下:

                                             \large P(AB) = P(B/A)P(A)

將 \large \left ( 3 \right )式按照上式展開的到:

                           \large \frac{P(y=T/x)}{P(y=F/x)}=\frac{P(x/y=T)P(y=T)}{P(x/y=F)P(y=F)}                                                                       

                                                      \large = \frac{P(x_1/y=T)P(x_2/y=T)P(x_3/y=T)...P(x_n/y=T)P(y=T)}{P(x_1/y=F)P(x_2/y=F)P(x_3/y=F)...P(x_n/y=F)P(y=F)}

上式的展開是根據樸素貝葉斯展開的,不懂的請檢視我上面的連結,這個轉換就很容易了求了,首先\large P(x_i/y=*)表示是垃圾郵件或者不是垃圾郵件的情況下,出現某個特徵的概率,而\large P(y=*)表示是垃圾郵件或者不是垃圾郵件的概率。這還是很容易求的。上面的根據樸素貝葉斯把特徵展開後怎麼計算呢?即如何求\large P(x_i/y=*)?很簡單,如下:

                                              \large P(x_i/y=*) = \frac{P(x_i,y=*)}{P(y=*)}

這不是又繞回來了嗎?這裡大家需要看清楚\large \left ( 1 \right )\large \left ( 2 \right )是求所有特徵的聯合概率密度,這裡是求一個特徵的聯合概率密度,這樣還是很簡單的,這裡大家需要深入理解,別暈了。但是呢如果某個特徵不存在那他的聯合概率密度不就等於0了嗎,相乘結果就是0啊,怎麼辦呢?這裡採用拉普拉斯平滑化,這裡引用吳恩達的論文裡的公式,這篇論文是《On Discriminative VS.Generative
classifiers: Acomparison Of logistic regression and naive Bayes》如下:

 上面的符號和我們不同,原理都是一樣的,這裡的s是計數的意思就是通過出現這個特徵的次數比上出現總特徵的次數去逼近所求的條件概率,上式加\large l就是防止特徵不存在時為0的情況,這裡大家需要知道,好,到這裡一般就可以分類了,這了我們是按照\large \left ( 3 \right )進行比較的,即是否大於1,但是在我們的分類中更習慣和0比較,因此就出了吳恩達下面的式子:

取log就變成和0比較了,很聰明的做法,好通過上面的推倒我們知道了,最後我們是通求聯合概率密度\large P(x_i/y=*)求得最後的分類。因此這樣的分類模型為生成式模型,下面我們看看判別式模型。

判別式模型 

上面說了判別式模型求條件概率,他不是按照聯合概率密度進行求解而是通過概率統計求解或者其他的方法進行求解,這裡使用logistics迴歸進行說明判別式模型是如何求解的。

logistics迴歸

logistics迴歸的原理這裡不再細講了,不懂的建議參考我的這篇文章,這裡直接使用了:

我們上面的分類問題可以寫成如下:

                                            \large P(y=T/x) = \frac{1}{1+e^{-(w_1x_1+w_2x_2+w_3x_3+...w_nx_n)}}

這裡我利用最小二乘法或者利用最大釋然法求出權值\large w_1,w_2,,,w_n,求出後就可以直接使用了,期間沒有求聯合概率密度,因此這樣的求解方式為判別式模型。

總結             

上面就是產生式模型和判別式模型了,這裡大家會不會有疑問,這兩個哪個好呢?吳恩達的論文給出了詳細的解釋了,這裡直接拿過來總結一下:

一般認為判別式模型更受喜愛,“人們應該更直接去解決問題,永進不要把求解更復雜的問題作為中間階段”(Vapnik),吳恩達的論文作了較全面的分析,產生式模型(樸素貝葉斯)在少量樣本的情況下,可以取得更好的精確率,判別式模型(logistics
迴歸)在樣本增加的情況下,逐漸逼近前者的精確率 。下面我把那篇的論文的資料拿過來大家看看:

 這裡就拿過來一部分,更多的請檢視原始論文,上圖實線是生成式模型,虛線為判別式模型。                                               

下面我們簡單的介紹一下為什麼要講這些內容,以後會用到哪裡?

我們後面講的隱馬爾可夫(HMM)其實就是序列化的樸素貝葉斯,什麼是序列化呢?在我們語音識別和詞性標註中,我們是一個一個識別的,我們可以通過樸素貝葉斯去判斷該語音或者詞屬於什麼符號或者說屬於什麼分類,而且是源源不斷的進行判斷,這就是序列化的樸素貝葉斯了,而樸素貝葉斯分類就是生成式模型的分類器,即HMMs是生成式分類器,所以計算量很複雜,因此為了改進一下,我們在條件上進行一些假設或者條件放寬,使他變成判別式模型即條件隨機場,這樣處理會更好一點,這就是他們的關係,大家可能會暈,不用擔心等我們到了那一步後還會詳細對比一下,這裡給大家提一下,就是希望大家心裡有點邏輯,這樣學起來會更好即從總體把握他們的關係,好了,本節就到這裡,下一節就是隱馬爾可夫,這裡需要強調的是,不懂什麼是馬爾科夫的建議先學學什麼是馬爾科夫過程,什麼是馬爾科夫鏈,可以參考我的這篇文章,好,本節結束,下一節隱馬爾可夫HMMs。