HMM
隱馬爾可夫,隱,說明模型里面含有隱含節點,是我們所無法直接觀測到的,這些隱含節點上的狀態可以稱為隱含狀態;馬爾科夫,說明模型具有馬爾科夫性,一個節點的狀態只跟它的鄰居有關,與其他節點無關,與時間也無關。
我們把節點分為兩類,狀態節點(隱)和可觀察節點(顯)。並且假設狀態節點為鏈式結構,每個輸出(可觀察節點)僅與當前狀態有關。
因此我們有兩個矩陣$A$和$B$,前者是狀態轉移概率矩陣$A_{i,j}$表示狀態從$i$轉移到$j$的概率,后者是生成概率矩陣$B_{i,j}$表示從狀態$i$生成到觀測值$j$的概率,加上初始狀態概率向量$\pi$構成整個HMM模型參數集。
用法:
1)當整個模型的參數已知,給定觀察序列$O$,我們可以求出其生成概率:
$$P(O|\lambda)=\sum_Q P(Q|\lambda)P(O|Q)~~~~~~~~~~~~(1)$$
其中$Q$是狀態序列,即在所有狀態序列下生成該觀察序列概率之和。根據馬爾科夫假設與兩個概率矩陣我們可以計算出$P(Q|\lambda)$和$P(O|Q)$
具體計算方法可以用前向算法(一種動態規划)來計算。若我們有很多HMM模型,可以選擇概率最大的那個作為最可能的模型。
2)當整個模型的參數已知,給定觀察序列$O$,我們可以求出其對應最大概率的隱含狀態序列:
$$Q=\max_Q P(Q|\lambda)P(O|Q)~~~~~~~~~~~~(2)$$
具體可用Viterbi算法(也是一種動態規划算法)計算,內部用了后向指針指明了隱含狀態序列的路徑,與最短路徑算法Dijkstra類似。
廣泛用在詞性標注以及各種標注,詞性序列看做隱含狀態序列,找出最可能的標注序列。
3)估計HMM參數。當之給定觀察序列,我們要訓練出一個HMM模型,評估其參數$A$和$B$。由於HMM是一個生成模型,根據隱含狀態生成觀察序列,即$P(O|Q)$,這里我們要根據觀察序列反推隱含狀態,因此用到了貝葉斯公式。
我們的優化目標是使得$P(O|\lambda)$最大,也即最大似然估計。
訓練過程為,在初始狀態給參數賦隨機值,然后在每次迭代,計算在觀察序列條件下所有參數的期望值,作為下次迭代的估計值,一直到收斂。這是一個EM算法,具體計算過程可以采用動態規划前向后向算法,最終達到的是一個局部最優解。
CRF
條件隨機場,是在條件給出的情況下,導出的一個場。條件可以看做是系統的外部環境,全局信息,當系統所處環境給定時,系統狀態的分布服從能量函數。比如當溫度和體積給定時,系統粒子狀態分布是玻爾茲曼分布。
在此,條件即是我們的訓練樣本集,一系列的觀察序列,場由隱含狀態節點構成,隱含狀態節點的結構為一無向馬爾科夫鏈,每個狀態節點只與它相鄰的兩個節點有聯系,並受全局信息觀察序列$X$的影響。
所有能量模型都要給出能量的定義,該模型中能量定義基於的最小粒度是最大團,這個最大團的成員為$\{X,y_i,y_{i+1}\}$,其中$y_i$是第$i$個隱含節點的狀態。因此我們能量函數的定義格式便為
$$E_i=E(y_i,y_{i+1},X,i)$$
該系統處於狀態$Y$的概率為
$$P(Y|X)=\frac{e^{\sum_i E(y_i,y_{i+1},X,i)}}{Z}$$
更細化來說,我們每個最大團的總能量函數可以分為多個子能量,這多個子能量以一定的權重累加得到最終總能量。這好比一個粒子的總能量可以分為動能、勢能、內能三個子能量的累加。
$$E_i=\sum_k \lambda_k e_k(y_i,y_{i+1},X,i)$$
方便起見,更簡單的,我們可以定義子能量函數$e_k$為二值函數,滿足條件為1,否則為0。在給定子能量函數(或者稱作特征函數)前提下,模型的參數為$\{\lambda_i\}$。
模型的訓練過程。
訓練前人工定義好子能量函數,訓練的每個樣本形如$X,Y$,即觀察序列和隱含序列已經給定。初始時隨機化參數,然后對每個樣本可以計算出其概率值,整個樣本空間的概率為所有樣本概率的連乘。可以用最大似然log-likehood進行參數估計。
模型訓練好后,給定$X$,求出最可能的$Y$,可以用Viterbi算法。
使用場景為詞性標注,實體識別。
SVD
奇異值分解。把原始矩陣$R$分解為如下形式$R=U^TSV$,其中$S$是對角陣,對角線上從大到小排列的是奇異值,代表該對應特征的權重。$U$的每一列對應原始矩陣行實體的特征向量,$V$的每一列對應原始矩陣列實體的特征向量。
把對角陣保留其前$k$個特征,其它置0,重新得到一個近似矩陣$R_f$,可以做預測用。
使用場景。
1)數據壓縮,保留其主要特征的$R_f$為降維后的原始矩陣$R$的近似表示。
2)打分預測,假設原始矩陣的$R_{ij}$表示第$i$個用戶對第$j$個東西的打分,那么$R_f$重對應的值便是預測的結果。
3)聚類。分解並降維后的$U$和$V$兩個矩陣保存了對應實體的特征向量,這些特征向量具有相同的維度$k$,我們可以用來聚類,比如找到相似用戶,找到跟用戶相關度最近的幾個物品。如果有一個新用戶,我們有他的評分向量,根據一定的公式我們可以得到這個新用戶的特征向量。query檢索,對用戶的query生成k維特征向量,對所有文檔計算余弦值得到最相似的文檔。
4)主題抽取。假設原始矩陣表示文檔和詞匯,分解並降維后,每個文檔對應一個$k$維的特征向量,每個詞語同樣如此。特征向量的每一個維度可以看做一個主題(LSA)。
PLSA
潛在概率語義分析。潛在,說明主題是隱含狀態,不可直接觀察到,語義分析是用主題來表示語義。是一個生成模型,生成模型是,根據該模型可以計算出可觀察樣本的生成概率,然后利用最大似然估計反推模型的參數,所以生成模型有一個生成流程。
樣本集有多個文檔構成,文檔由多個字構成。然后再文檔和詞語之間,我們假設出一層主題層來,我們假設文檔是由主題構成的,我們固定主題個數為k,那么每個文檔對應一個主題分布,這個主題是固定的,但是未知的;然后假設一個主題裝了好多單詞,每個主題對應一個單詞的概率分布,這個分布也是固定的,但是未知的。由此我們便有了連個矩陣$A$和$B$,$A_{ij}=P(z_j|d_i)$表示第i個文檔中主題j出現的概率,$B_{ij}=P(w_j|z_i)$表示第i個主題中單詞j出現的概率。這兩個矩陣便是模型的參數。
我們的語料庫被生成的流程是這樣滴,首先,以$P(d_i)=\frac{count(d_i)}{|all~word|}$的概率選出一個文檔,這個概率是已知的可統計出來;然后根據$P(z_j|d_i)$概率選擇一個主題$z_j$,這個概率對應A矩陣,是需要估計的;最后根據$P(w_j|z_i)$概率生成一個單詞$w_j$,這個概率對應B矩陣是需要估計的。
那么,一個文檔$d_i$被生成的概率便為文檔中所有單詞生成概率的連乘:
$$P(W|d_i)=\prod_j P(w_j|d_i)$$
整個語料的生成概率為
$$P(W|D)=\prod_i P(W|d_i)P(d_i)$$
最大化這個概率即可。
根據生成流程,P(w_j|d_i)可以通過對所有路徑$d_i\rightarrow z_k \rightarrow w_j$的概率求和得到
$$P(w_j|d_i)=\sum_k P(z_k|d_i)P(w_j|z_k)$$
訓練方法采用EM法,首先隨機初始化參數,然后根據條件求出各參數的期望作為下次迭代的估值。參數的期望是一句可觀測的$d_i$和$w_j$反推得到的,所以用到了貝葉斯公式。具體的思想是該條路徑的概率$d_i\rightarrow z_k \rightarrow w_j$占所有路徑概率總和的比例。
使用場景。當模型訓練好后,預料中的所有文檔都有一個對應的主題向量,可以用來文檔聚類,另外,對於每一個單詞,我們也可以得到對應的主題向量可以用作基於語義的query檢索。即可以依據主題計算文檔相似性和詞語相似性。
那么,當來了一個新的文檔時,我們怎么計算它的主題分布呢,我的想法是,把它里面所有詞語的主題向量加和求平均即可。
LDA
潛在Dirichlet分布主題語義分析。與PLSA模型非常類似,也是通過主題生成文檔。不同的是,PLSA假設每個文檔必對應一個固定的主題分布,每個主題必對應一個固定的詞語分布,這有點類似於經典概率論,概率是先天存在好的,只是等着我們測量而已。LDA並不這樣假設,兩者的分布並不是固定的,其分布是通過更高層的分布生成機制來生成的,只有當你測量時,它才坍縮成一個具體的分布,當你不測量時,它的具體分布是不定的,有點類似於量子概率,處在一個量子狀態中,這個量子狀態在被測量時會以一定的概率生成可觀測的值,這個值在這里就是一個具體的分布。這個“一定的概率”表明了生成分布的傾向,對應Dirichlet分布中的參數$\alpha$和$\beta$,是模型的超參數,根據經驗指定。相比於PLSA每個文檔都有一個主題分布的向量參數,LDA的參數會非常少,只有$\alpha$和$\beta$兩個參數,是兩個向量,這個參數表征了訓練樣本集的"量子態"。
生成語料庫的具體流程為:1)根據參數$\beta$生成每個主題的詞語分布。2)對每個文檔,根據參數$\alpha$生成該文檔的主題分布。3)根據第二步的主題分布生成一個主題。4)根據生成的主題和在第一步生成的該主題對應的詞語分布,生成一個單詞。
訓練過程采用gibbs采樣。固定所有參數以及狀態,然后可以計算出給定詞語對應主題的概率,然后根據這概率以輪盤法采樣一個主題更新這個詞語的主題,直到算法收斂。訓練后會求得類似PLSA的兩個分布矩陣,用法參考PLSA。
【待續】
參考文獻:
http://blog.csdn.net/likelet/article/details/7056068
http://blog.csdn.net/wuyanyi/article/details/7964883
http://blog.csdn.net/sunmenggmail/article/details/8566275
http://blog.csdn.net/v_july_v/article/details/41209515
http://www.shellsec.com/tech/158684.html
http://vdisk.weibo.com/s/aR2Sk3ifABoZM
http://www.shellsec.com/tech/63868.html