當前位置:
首頁 > 最新 > 讓機器可以像人一樣學習

讓機器可以像人一樣學習

在講機器學習(Machine Learning)之前,我們先要理解3個概念:訓練樣本、特徵和模型。它們就是機器學習的核心,模型就是第2章講解過的最優化問題。


1.1 何謂機器學習

我們首先看看人類大致是如何學習的。

小明(萬能主角出場)在校園裡看到兩排東西(一排如圖1.1所示,一排如圖1.2所示),但他不認識它們是什麼,於是他就去問老師。老師瞥了一眼就說:左邊的是汽車;右邊的是摩托車。

圖1.1

圖1.2

小明仔細觀察了下,左邊這個叫汽車的比較大,而且有4個輪子;右邊叫摩托車的比較小,而且只有兩個輪子。於是小明的大腦中就形成了這麼一個概念(模型一)。

if(大,而且有四個輪子)then它是汽車

if(小,而且有兩個輪子)then它是摩托車

太好了!小明學會了如何區分汽車和摩托車,然後高高興興地回家了,但是在路上,他見到了如圖1.3所示的東西,根據他之前學到的知識,它應該就是摩托車,於是他就說:「這是個摩托車。」路人甲聽到了,說:「小朋友,這不是摩托車,這是自行車。」

圖1.3

小明很沮喪,但是他沒有放棄。他回家仔細想了想:如果我有更多可參考的汽車和摩托車的樣例,然後提取出它們更多的特點,那麼我一定能區分得很好。沒錯!於是小明總結了更多的不同點,最後他大腦中就形成了另一個概念(模型二)。

小明想通了以後,覺得這下他會區分汽車和摩托車了吧!結果有一天他見到了如圖1.4所示的東西。這貨前後輪胎大小不一樣?前面還有個豹子頭?不滿足摩托車條件啊?小明迷茫了!

圖1.4

於是小明跑去問他爸爸,他爸爸說,你上面那些條件限制得太死板了,有些條件是可有可無的(說白了這些條件需要懲罰),我告訴你一個較好的區分方法吧(模型三)。

小明想了想,這個方法比他前兩個方法都好(當然還不是最好的),以後就這樣區分汽車和摩托車了。小明學會了如何區分汽車和摩托車。

前面說過一句話「科學抽象於生活,科學服務於生活」,所以,機器學習的過程其實就是模擬人學習的過程(當然,人比機器更智能,機器智能還遠達不到人的程度)。從這個例子中可以看出,「小」「有兩個輪子」「使用汽油」等就叫特徵,那個if、then就叫模型。小明的模型很簡單,各個特徵都滿足才可以。圖1.1和圖1.2就是訓練樣本(或叫訓練數據,圖1.2下方的自行車可以理解為一個雜訊數據。一般來說,難免會有雜訊數據),小明的模型一很簡單,既沒有把訓練樣本分得很好,也沒有把新的測試樣本分得很好,這就是欠擬合現象;模型二很複雜,雖然把訓練樣本區分得很好,但是對新的測試樣本(圖1.4)不能很好地區分,這就是過擬合現象;模型三是較理想的一個模型。

這就是機器學習,它的核心就是特徵、模型和訓練樣本(標註數據或未標註數據)。線下訓練模型的時候,首先要對訓練樣本抽取特徵,然後訓練出一個機器學習模型(模型的結構和參數)來,線上預測的時候也是提取特徵,然後用訓練好的模型預測輸出值,如圖1.5所示。前面說了,訓練樣本趨於無窮多時,模型訓練得雖好,但是現實中拿到更多的訓練樣本代價太大,再加上特徵表示和模型本身都不會是最優的,所以機器學習一般得到的都是近似解,就像小明利用模型三也會有區分不出來摩托車一樣,也就是說,機器學習只能解決大部分情況,而總會有些個例解決不了。

圖1.5

可以看出,不同的機器學習任務需要不同的特徵和模型,有的問題模型是可以通用的(比如分類問題),但是特徵卻不能通用,需要根據不同的問題來選取。如果特徵也是由機器學習出來的那該有多好,所以深度學習的一個目標就是能自動學習出特徵來(針對某些單一任務),而不用再專門提取特徵。我們後面會講到深度學習。

那麼怎麼設計特徵呢,在這兒就不得不簡單介紹下特徵工程,剛才說了機器學習中特徵是核心之一,所以特徵工程就很重要了。可惜的是,這並沒有一個統一的標準或者規範,而是與完成的任務有很大關係。特徵工程大致有這麼幾個步驟:

(1)特徵選取。選取哪些信息作為特徵?一般都是選取最有用、最能區分樣本的特徵,並不是特徵越多越好,特徵過多會導致稀疏性更嚴重。

(2)特徵離散化。離散化的目的是為了特徵在區間上有更好的區分性,比如,年齡如果表示成一個維度的話,20歲的人和30歲的人就會相差很大(公式中w?x),事實並不是這樣,20歲男人和30歲男人的興趣差異不應該這麼大,所以就要對年齡這個特徵離散化,比如把年齡段按1歲為單位映射成一個One-hot向量。

(3)特徵交叉。一維特徵有時候會很奇怪,比如性別,它會使得同一性別的人其他屬性都一樣,但事實上男性對化妝品關注度並沒有女性大,所以性別和商品組合起來更有意義。

(4)特徵修正。這個更多是為了平滑,比如一個廣告展示了 100 次而點擊了2次和展示了10000次而點擊了200次,CTR都是2%,但是背後的意義卻不同,不做平滑就無法區分出來。當然,這些都是人工提取出來的特徵,還可以引入機器特徵(比如後面要講的GBDT和深度學習向量)。

當訓練出模型後,對一個輸入,提取同樣的特徵,然後使用模型來進行預測,而這個模型y=f(x)一般就是條件概率分布p(y | x)。

監督學習通常分為兩個模型:生成式模型和判別式模型。

判別式模型(它的概率圖是無向圖)是求解條件概率的p(y | x),然後直接進行預測,例如,邏輯回歸、SVM、神經網路、CRF都是判別式模型,所以判別式模型求解的是條件概率。

生成式模型(它的概率圖是有向圖)首先求解兩個概率p(x | y)和p(y),然後根據貝葉斯法則求出後驗概率p(y | x),再進行預測。例如,樸素貝葉斯、HMM、貝葉斯網路、LDA都是生成模型,又因為,所以生成式模型求解的是聯合概率。

舉例來說,假如觀察到一隻獅子,要判斷是美洲獅還是非洲獅?按照判別式模型的思路,我們首先需要有一定的資料,機器學習上稱為訓練集。然後,通過過去觀察到的獅子的特徵可以得到一個預測函數,之後把我們當前觀察的獅子的一些特徵提取出來,輸入到預測函數中,得到一個值,就知道它是什麼獅子了。而對於生成式模型,我們先從所有美洲獅的特徵中學習得到美洲獅的模型,同樣得到非洲獅的模型,然後提取當前觀察的獅子的特徵,放到兩個模型中,看哪個概率更大,就是什麼獅子,這就是生成式模型。可以看出,判別式模型只需要關注類的邊界就可以了,並不需要知道每一類到底是什麼分布,這樣它只需要有限樣本就可以確定;而生成式模型要得到每類的具體分布,然後根據每個分布去判斷類別,它的訓練集自然需要無限樣本,學習複雜度也高。造成兩個模型樣本空間不同的原因在於計算條件概率的時候我們已經「知道」了一部分信息,這部分已經知道的信息縮小了可能取值的範圍,即縮小了它的樣本空間。

由生成式模型可以得到判式別模型,但由判別式模型得不到生成式模型。

接下來就講解具體的機器學習演算法。在這兒要提醒一下,幾乎每個機器學習模型都有假設,所以具體的應用場景或者數據應該儘可能接近所使用機器學習模型的假設。


現在我有個分類任務要做:判斷一封郵件是否為垃圾郵件。什麼是垃圾郵件呢?總得有個定義吧,那我們姑且先把這類郵件歸為垃圾郵件:包含有廣告推廣、有詐騙、有非法活動等的郵件。

我們先選用線性回歸模型來完成這個任務,即,x為特徵向量(例如,x1表示出現廣告詞的次數,x2表示是否含有電話號碼,x3表示是否含有網址鏈接,等等);y為分類結果,y=1表示為垃圾郵件,y=0表示為非垃圾郵件。那麼對於這個二分類問題就可以設置個閾值來判斷:

但是,隨著特徵向量x的變化,線性回歸的輸出y的取值範圍可以是任何數值,如果要使我們上面設定閾值的分類方法有效,必須將線性回歸的輸出值映射到一個固定的範圍,這就需要請出邏輯回歸(Logistic Regression)。

邏輯回歸在線性回歸的輸出y上引入了一個函數g(z):

該函數(稱為sigmoid函數)的作用就是可以把某個值映射到(0,1)區間,它的曲線圖大致如圖1.6所示。

圖1.6

這樣,整個邏輯回歸公式就為

好了,現在特徵向量x有了,模型(x)也有了,訓練數據也很容易得到,請人標註一批數據即可,那剩下的問題就是如何求解模型的參數θ。

如果我們選用和線性回歸模型一樣的平方損失作為目標函數(沒有正則化),即

那麼就會有個問題,由於hθ(x)是sigmoid函數,導致目標函數不是凸函數(如圖1.7所示),那麼就沒有最優解,所以我們就需要做些工作使得目標函數是凸函數。

圖1.7

對於二分類問題,假設

那麼

根據這兩個概率,可以寫出概率分布(二項分布)為

這時就可以寫出似然函數了

然後就可以使用最大似然估計來求解了(也可以取負數求最小)。

(1)似然函數取log(為和前面統一,乘了一個1/M)

(2)對L(θ)求導

這裡用了一個推導公式:。

(3)最後的迭代公式是(最大化,梯度上升法)

看到了嗎,它的迭代公式形式是不和前麵線性回歸模型的梯度下降法的迭代公式一樣呢(除了hθ(x)不同)?所以邏輯回歸的求解速度也是很快的。這樣就完成了這個垃圾郵件判斷的任務了。

上面的求解假設是二類問題,如果是多類問題怎麼辦呢?假設有k個類別,即,也就是我們希望輸出每個類別下的概率,一般多分類使用的函數是softmax函數,即

寫出似然函數

對該似然函數取log

其中[*]表示*滿足則為1,否則為0。

然後對L(θ)求導

這樣就可以使用梯度上升法迭代訓練了,其實邏輯回歸是Softmax回歸的特例,即k= 2的情況。

邏輯回歸的特徵之間是獨立的,但是在很多任務中,特徵之間是有關聯的,比如廣告中,「女性」用戶和「化妝品」商品有關聯,所以需要模型能表徵這種特性

這個模型的組合特徵參數有n(n+1)/2個,任意兩個參數都是獨立的,然而這個模型比較難訓練,因為樣本比較稀疏的情況下,同時滿足xi和xj非零的情況很少,導致wij訓練得不準確。因子分解機(Factorization Machines)根據矩陣分解的思路提出了一種解決方案,所有參數wij可以組成一個對稱矩陣WW=VTVV的第j列便是第j維特徵的隱向量,也就是說wij= vi,vj>,因此,FM的模型為:

vi是第i維特徵的隱向量,向量長度為k(kn),也就是說vi是特徵xi的一個向量表示。該模型的組合特徵參數減少為kn個,而且之間的參數不再相互獨立,所有包含xi的非零組合特徵都可以用來學習隱向量vi,很大程度避免了稀疏問題。模型的梯度如下(推導過程可以參考論文《Factorization Machines》)。

其中,vj,f是隱向量vj的第f個元素。可以看出,FM也是可以在線性時間訓練和預測的高效模型。

那麼邏輯回歸和FM還有什麼用呢?目前谷歌、百度等各大公司都使用這些模型來對廣告點擊率(Click-through Rate)進行預估。

搜索廣告相比傳統廣告效果更好,就是因為它利用了用戶主動的搜索意圖。任何一種廣告的目的一是為了賺錢,二是為了儘可能多地賺錢。簡單來說,就是將流量×每千次展示收益(CPM)最大化,而每千次展示收益=展示之後被點擊的概率CTR×一次點擊的收下,那麼提高CTR就自然會提高收入,也就是把最可能被用戶點擊的廣告展示出來。所以要事先預估,把更可能被點擊的廣告儘可能地展示出來,預估點擊率(pCTR)就可以使用這些模型來計算,在介紹搜索廣告的時候,我們還會提到這一點。

線上系統還有一個問題就是在線學習(online learning),也就是實時對新來的樣本進行模型參數的更新。前面講的SGD就是一種方法,但是它最大的問題是很難產生真正稀疏的解,然而在大規模數據集大規模特徵的情況下,稀疏性能有效地降低內存和複雜度,所以就提出了一些優化的方法,比如Google公司提出來的FTRL(Follow-The- Regularized-Leader)演算法,在這兒就先不展開了,讀者可以細讀論文《Adaptive Bound Optimization for Online Convex Optimization》《Follow-the-Regularized-Leader and Mirror Descent:Equivalence Theorems and L1 Regularization》《Ad Click Prediction:a View from The Trenches》。

最大熵模型(Maximum Entropy Model)是我個人比較喜歡的模型之一,它背後的原理其實非常簡單:當我們對一個隨機變數的分布預測時,對已知條件一定要滿足、對未知數據一無所知時,不要做任何主觀假設,要同等對待。這時,它們的概率分布最均勻,風險就越小。概率分布最均勻就意味著信息熵最大,所以就叫最大熵模型。

如果不好理解的話,我們就舉個例子來說。現在有一場很激烈的籃球比賽,比分是81:82,而且比賽時間只剩最後3秒了,球權在落後的一方,慶幸的是,你就是領先這一隊的教練,現在你的任務就是暫停之後防守住對方的最後一次進攻,不讓他投進,否則就輸球了。已知對方球隊的 5個球員(A、B、C、D、E)中,A是超級球星,所以他進行最後一投的概率非常大;E是個防守悍將,進攻能力很差,所以他最後一投的概率非常小,他的主要目的應該是掩護使得A能順利投球;其他3個都是能力相當的普通球員。那麼你就有很多戰術來完成這次防守,其中包括下面兩種方案:(1)讓你們隊中防守最好的球員去防守A,然後讓本來防守E的球員主要去協防A(這樣E幾乎沒人防守了),其他3個人一對一防守對方;(2)同樣,讓防守最好的球員去防守A,防守E的球員去協防A,剩下3個人(B、C、D)的防守同上面方案不同——讓一個球員防守B,然後讓防守C的球員花很大精力也去協防B,對D則是一對一防守。那麼你覺得上面兩個方案哪個好呢?很顯然是方案(1),因為方案(2)中要對球員C減輕防守,而球員C和球員B、D的能力相當啊。如果不是A最後一投的話,C在輕防守下命中率就會增加,那麼你輸球的概率就自然增加了。所以對完全未知的情況不要做任何主觀假設,而要平等對待,風險才能最小。

好,那我們開始看看最大熵模型是怎麼回事?首先我們需要介紹幾個概念,假設樣本集為D={X,Y},X為輸入,Y為輸出,比如對於文本分類問題,X就為輸入文本,Y就是類別號;對於詞性標註問題,X就為詞,Y就是詞性。可以看出,在不同的問題中,輸入X和輸出Y比較多樣化,為了模型表示方便,我們需要將輸入X和輸出Y表示為一些特徵。對於某個(x,y),定義特徵函數

那麼特徵函數的樣本期望就可以表示為

而特徵函數的模型期望表示為

樣本期望和模型期望到底是什麼東西呢?還記得之前提到的經驗風險和期望風險的區別嗎?樣本期望和模型期望的區別也一樣,樣本期望是從樣本數據中計算的,模型期望是從我們希望要求解的最優模型中計算的,而且,模型期望最終簡化為條件概率p(y | x),它就是我們要求解的模型,因為也是數一數(x,y)同時出現的次數除以總次數就可以得到了。

機器學習就是從樣本中學習到真實模型,也就是說模型期望應該儘可能地等於從數據中觀察到的樣本期望,這樣就出現了一個約束條件:。那麼目標函數是什麼呢?前面說了,要使熵(條件熵)最大。

那麼目標函數就是:

所以最大熵模型就是(p(y | x)是變數)

可以把最大化轉換為最小化問題,即

這樣模型構建好了,那剩下的就是如何求解模型了。這是個等式約束優化,就可以用拉格朗日乘子法來求解,寫出拉格朗日函數

遺憾的是,直接對參數求導使它們等於零,沒法求解出各個參數,因為參數互相耦合到一起了,所以就要嘗試其他方法求解了。

還記得前面講的對偶原理嗎?原問題是

對偶問題是

由於L(p,α)是凸函數,所以原始問題和對偶問題是等價的。這樣我們只需要求解對偶問題,首先求解minpL(p,α)。

對p求導,求解,即

解得

又,那麼

得到總結一下,最大熵模型的條件概率分布為

這樣minpL(p,α)的最優解p*(y | x)就求解出來了,剩下就是求

它是α的函數,只要α求解出來了,最大熵模型p(y | x)也就求解出來了,但是很顯然,α的解析解無法直接求出(有指數函數),那麼就需要數值方法來求解了,例如GIS、IIS、LBFGS等方法。

在這簡單介紹一下IIS求解的流程(裡面有很多證明,請參考論文《The Improved Iterative Scaling Algorithm: A Gentle Introduction》),我們現在已經知道了條件概率p(y | x)的表達式了,那麼就可以用最大似然估計(最大熵和最大似然估計訓練結果一致,只是考慮的方式不同:最大熵是以樣本數據的熵值最大化為目標;最大似然估計是以樣本數據的概率值最大化作為目標,既然訓練結果一致,那就找個簡單的求解),寫出它的log似然函數

p(y | x)我們已經求解出來了,是α的函數,那麼對α求導的話,也是無法解出α的,那也就需要迭代法:。滿足,也就是每步迭代都要向最優解移動,要想移動得快,也就是要使儘可能大,也就是最大化即可(它是δi的函數)。如果無法表示出來,那就找個下限,然後就是每次迭代求解的最大值了。

IIS的演算法流程如下。

(1)設

(2)for i=1 to k:

2.1

2.2 令2.3

至此,最大熵模型介紹完了,然後簡單介紹一下條件隨機場(CRF)是什麼東西。大家已經知道最大熵模型的條件概率分布為

而且,它的概率圖如圖1.8所示。

圖1.8

而CRF的條件概率分布是

而且,它的概率圖如圖1.9所示。

圖1.9

從概率圖大致可以看出區別了,CRF利用了上下文信息,而且最後的條件概率也是全局最優(無標記偏置問題),所以它對標註問題(分詞、詞性標註、實體識別等)效果更好一點。至於CRF的細節大家可以參考一下論文《Conditional Random Fields: An Introduction》,它的參數求解過程和最大熵——最大似然估計很類似,然後使用IIS、LBFGS等演算法求解參數。《Discriminative Training Methods For Hidden Markov Models: Theory And Experiments With Perceptron Algorithms》這篇文章提出了一種更簡單的訓練方法。


主題模型(Topic Model)是自然語言處理(NLP)中非常有影響力的模型之一,因為它的初衷就是解決NLP中的語義問題,儘管這距離真正意義上的語義有很大距離。那麼什麼是「主題」呢?一段話的主題就是我們小學語文課上學過的中心思想,但是這個中心思想太寬泛了,計算機要怎麼表示呢?那就是用一些最能反映中心思想的詞來表示(這就產生了一個假設:bag of words。這個假設是指一個文檔被表示為一堆單詞的無序組合,不考慮語法、詞序等,現在bag of words假設其實也是NLP任務的一個基本假設),比如下面一段新聞內容:「站在互聯網整個行業的角度,我認為微信是一個極具生命力和想像空間的移動產品,它的布局和設計都有可能顛覆移動互聯網的明天。」我們可以看出,它的主題應該就是「微信」「移動互聯網」等。對於一篇文檔,我們希望能得到它的主題(一些詞),以及這些詞屬於哪些主題的概率,這樣我們就可以進一步分析文檔了。

主題模型有不少演算法,最經典的兩個是:PLSA(Probabilistic Latent Semantic Analysis)和LDA(Latent Dirichlet Allocation)。

首先來看一下PLSA模型。d∈D表示文檔,w∈V表示詞語,z表示隱含的主題。P(di)表示單詞在文檔di中出現的概率,P(zk| di)表示主題zk在給定文檔di下出現的概率,P(wj| zk)表示單詞wj在給定主題zk下出現的概率。PLSA是個典型的生成模型。根據圖1.10模型可以寫出文檔中每個詞的生成概率

圖1.10

由於詞和詞之間是互相獨立的,文檔和文檔間也是相互獨立的,那麼整個樣本集的分布為

首先,我們看看,PLSA 模型待估計的參數是什麼?就是,那麼樣本集的log似然函數就為

其中,n(w,d)表示單詞w在文檔d中出現的次數,n(d)表示文檔d中詞的個數。

好,現在有了log似然函數,那麼就可以對其求導解出參數了,我們知道參數θ共有(N×K+M×K)個,而且自變數是包含在對數和中,這就意味著這個方程組的求解很困難,那就要考慮其他方法求解了,而且這個問題還包含隱藏變數,就要使用EM演算法

EM演算法就是根據已經觀察到的變數對隱藏變數進行學習的方法。既然沒辦法最大化L(θ),那麼L(θ)總該有個下限吧。我們優化這個下限,不斷迭代提高這個下限,就可以得到近似最優解了。這個下限其實就是似然函數的期望。通常,EM演算法得到的是局部近似解。

首先對參數P(wj| zk)和P(zk| di)賦值隨機值。

EM演算法第一步E-step:求隱藏變數的後驗概率

EM演算法第二步M-step:最大化似然函數的下限,解出新的參數。

那麼,現在的問題就是找到L(θ)的下限,可以推導出

Q(θ)就是下限,那麼最大化它就可以了,但是還有約束條件

這時寫出拉格朗日函數

然後分別對P(wj| zk)和P(zk| di)求導(注意,P(zk| di,wj)是已知的,在E-step已經計算好了),然後聯合約束條件,解得

然後把P(wj| zk)和P(zk| di)代入到E-step接著迭代。

在這兒總結一下經典的EM演算法。假設log似然函數為,那麼EM演算法步驟為:

(1)隨機初始化θi;

(2)EM步驟:

  while (|θi+1?θi| δ):

E-step:計算後驗概率;

M-step:。

至此,PLSA演算法就求解完了,它和其他演算法的求解過程其實沒多大區別,唯一的不同是多了隱藏變數,然後使用EM演算法求解。

PLSA求出了所有P(zk| di)和P(wj| zk),也就是文檔di屬於主題zk的概率和主題zk下各個單詞wj的概率,但是PLSA並沒有考慮參數的先驗知識,這時候出現了另一個改進的演算法:LDA。LDA對參數增加了先驗分布(所以理論上LDA比PLSA不容易過擬合),也就是說參數也是一個分布,這個分布的參數(參數的參數)叫作超參數。

LDA是個挺複雜的模型,我們來看一下它的大致思路,圖1.11就是從論文中截取的LDA的圖模型。

圖3.11

其中,wm,n是觀察到的變數(文檔m中第n個詞),其他都是參數或者隱藏變數,表示主題和詞之間的分布,是一個M×K的矩陣,LDA有個假設:服從Multinomial分布,假設某個分布(觀察變數為X),要估計其中的參數θ。參數θ有個先驗分布p(θ),貝葉斯法則告訴我們,可以知道,若p(θ)與p(X | θ)有相同的函數形式,那麼後驗概率p(q | X)和它們(p(q)與p(X | θ))也有相同的函數形式。這樣就使得θ的後驗概率與先驗概率具有相同的表達式,只是參數不同而已。所以選擇與似然函數共軛的先驗,得到的後驗函數只是參數調整後的先驗函數。

同樣,可以寫出LDA的似然函數,然後使用最大似然估計求解參數,但是似然函數參數耦合太大,無法求解出來,而且包括隱藏變數,所以就像PLSA一樣,想到了EM演算法,但是LDA相比PLSA還有一個困難:後驗概率無法求解出來(EM演算法中E-step要求解後驗概率),那麼這時就又要近似計算了,即使用變分-EM演算法。

變分推理是一種近似計算後驗概率的方法,首先尋找一個和原來不能直接求解的後驗概率等價或者近似的函數Q,然後就通過求解最優近似函數Q的參數來近似得到原後驗概率的參數。

變分-EM演算法迭代的流程如下:

(1)設定參數的初始值;

(2)E-step:計算近似函數Q;

(3)M-step:最大化近似函數Q,解出參數。

求解LDA的參數還有一種方法:Gibbs Sampling。

Gibbs Sampling演算法是MCMC的一個特例,如果某個概率P(X)不易求得,那麼可以交替地固定某一維度xi,然後通過其他維度(去除xi的其他所有值)的值來抽樣近似求解,也就是說,Gibbs採樣就是用條件分布的採樣來替代全概率分布的採樣。

回到LDA,使用Gibbs Sampling,就是要迭代求解:

這個公式要利用聯合概率,而聯合概率的計算其實就是利用Dirichlet分布和Multinomial分布推導出來的,這兩個分布是已知的,所以自然可以求解出來了。

當Gibbs Sampling收斂後,根據圖模型就可以求解後驗分布了:和(共軛分布的性質是它們就和先驗分布一樣,只是參數不同,所以可以求解出來),然後使用它們的期望就可以解出所有和了。

所以整個基於Gibbs Sampling的LDA演算法流程為:

(1)初始化參數;

(2)對所有文檔m= 1,…,M

對文檔m中所有的單詞n= 1,…,Nm

採樣每個單詞wm,n對應的主題zm,n=k;

對單詞wm,n的主題k增加計數(「文檔-主題」計數,「文檔-主題」總數,「主題-單詞」計數,「主題-單詞」總數);

(3)迭代步驟:

對所有文檔m= 1,…,M

對文檔m中所有的單詞n= 1,…,Nm

對單詞wm,n的主題k減少計數;

根據採樣新主題;

對單詞wm,n的新主題增加計數;

收斂後,利用公式計算所有和。

訓練完模型後就可以得到P(w | t)和P(t | d),示例如下:

P(w | t)P(t | d)

Word1  Word2  …      Topic1  Topic2 …

Topic1:  0.002   0.032     Doc1:   0.001  0.068

Topic2:  0.072   0.001     Doc2:   0.002  0.019

…                 …

同樣可以得到屬於每個Topic的詞的概率,示例如下:

Topic1:       Topic2:       Topic3:

大學  0.100702    幸福  0.166863    房  0.072123

學院  0.040089    快樂  0.138882    成交  0.030422

畢業  0.036775    心情  0.036375    樓市  0.029435

高考  0.025012    家庭  0.034673    房產  0.029342

專業  0.023487    生活  0.030413    買房  0.020698

本文摘自《文本上的演算法——深入淺出自然語言處理》

《文本上的演算法——深入淺出自然語言處理》

路彥熊 著

點擊封面購買紙書

本書結合作者多年學習和從事自然語言處理相關工作的經驗,力圖用生動形象的方式深入淺出地介紹自然語言處理的理論、方法和技術。本書拋棄掉繁瑣的證明,提取出演算法的核心,幫助讀者儘快地掌握自然語言處理所必備的知識和技能。本書主要分兩大部分。第一部分是理論篇,包含前3章內容,主要介紹一些基礎的數學知識、最優化理論知識和一些機器學習的相關知識。第二部分是應用篇,包含第4章到第8章,分別針對計算性能、文本處理的術語、相似度計算、搜索引擎、推薦系統、自然語言處理和對話系統等主題展開介紹和討論。本書適合從事自然語言處理相關研究和工作的讀者參考,尤其適合想要了解和掌握機器學習或者自然語言處理技術的讀者閱讀。

延伸推薦


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 非同步社區 的精彩文章:

教科書不應該再過多介紹的C語言語法
你所不了解的VR

TAG:非同步社區 |