隱馬爾可夫,隱,說明模型裏面含有隱含節點,是咱們所沒法直接觀測到的,這些隱含節點上的狀態能夠稱爲隱含狀態;馬爾科夫,說明模型具備馬爾科夫性,一個節點的狀態只跟它的鄰居有關,與其餘節點無關,與時間也無關。html
咱們把節點分爲兩類,狀態節點(隱)和可觀察節點(顯)。而且假設狀態節點爲鏈式結構,每一個輸出(可觀察節點)僅與當前狀態有關。算法
所以咱們有兩個矩陣$A$和$B$,前者是狀態轉移機率矩陣$A_{i,j}$表示狀態從$i$轉移到$j$的機率,後者是生成機率矩陣$B_{i,j}$表示從狀態$i$生成到觀測值$j$的機率,加上初始狀態機率向量$\pi$構成整個HMM模型參數集。shell
用法:函數
1)當整個模型的參數已知,給定觀察序列$O$,咱們能夠求出其生成機率:優化
$$P(O|\lambda)=\sum_Q P(Q|\lambda)P(O|Q)~~~~~~~~~~~~(1)$$url
其中$Q$是狀態序列,即在全部狀態序列下生成該觀察序列機率之和。根據馬爾科夫假設與兩個機率矩陣咱們能夠計算出$P(Q|\lambda)$和$P(O|Q)$.net
具體計算方法能夠用前向算法(一種動態規劃)來計算。若咱們有不少HMM模型,能夠選擇機率最大的那個做爲最可能的模型。指針
2)當整個模型的參數已知,給定觀察序列$O$,咱們能夠求出其對應最大機率的隱含狀態序列:htm
$$Q=\max_Q P(Q|\lambda)P(O|Q)~~~~~~~~~~~~(2)$$blog
具體可用Viterbi算法(也是一種動態規劃算法)計算,內部用了後向指針指明瞭隱含狀態序列的路徑,與最短路徑算法Dijkstra相似。
普遍用在詞性標註以及各類標註,詞性序列看作隱含狀態序列,找出最可能的標註序列。
3)估計HMM參數。當之給定觀察序列,咱們要訓練出一個HMM模型,評估其參數$A$和$B$。因爲HMM是一個生成模型,根據隱含狀態生成觀察序列,即$P(O|Q)$,這裏咱們要根據觀察序列反推隱含狀態,所以用到了貝葉斯公式。
咱們的優化目標是使得$P(O|\lambda)$最大,也即最大似然估計。
訓練過程爲,在初始狀態給參數賦隨機值,而後在每次迭代,計算在觀察序列條件下全部參數的指望值,做爲下次迭代的估計值,一直到收斂。這是一個EM算法,具體計算過程能夠採用動態規劃前向後向算法,最終達到的是一個局部最優解。
條件隨機場,是在條件給出的狀況下,導出的一個場。條件能夠看作是系統的外部環境,全局信息,當系統所處環境給定時,系統狀態的分佈服從能量函數。好比當溫度和體積給定時,系統粒子狀態分佈是玻爾茲曼分佈。
在此,條件便是咱們的訓練樣本集,一系列的觀察序列,場由隱含狀態節點構成,隱含狀態節點的結構爲一無向馬爾科夫鏈,每一個狀態節點只與它相鄰的兩個節點有聯繫,並受全局信息觀察序列$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算法。
使用場景爲詞性標註,實體識別。
奇異值分解。把原始矩陣$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)。
潛在機率語義分析。潛在,說明主題是隱含狀態,不可直接觀察到,語義分析是用主題來表示語義。是一個生成模型,生成模型是,根據該模型能夠計算出可觀察樣本的生成機率,而後利用最大似然估計反推模型的參數,因此生成模型有一個生成流程。
樣本集有多個文檔構成,文檔由多個字構成。而後再文檔和詞語之間,咱們假設出一層主題層來,咱們假設文檔是由主題構成的,咱們固定主題個數爲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檢索。便可以依據主題計算文檔類似性和詞語類似性。
那麼,當來了一個新的文檔時,咱們怎麼計算它的主題分佈呢,個人想法是,把它裏面全部詞語的主題向量加和求平均便可。
潛在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