NLP —— 圖模型(一)隱馬爾可夫模型(Hidden Markov model,HMM)


       本文簡單整理了以下內容:

      (一)貝葉斯網(Bayesian networks,有向圖模型)簡單回顧

      (二)隱馬爾可夫模型(Hidden Markov model,HMM)

      寫着寫着還是寫成了很規整的樣子。以后可能會修改。

 

(一)貝葉斯網簡單回顧

      圖模型(PGM)根據邊是否有向,可以分為有向圖模型和無向圖模型。

      待補充……

(二)隱馬爾可夫模型

      隱馬爾可夫模型(Hidden Markov model,HMM)屬於生成式模型,被廣泛用於序列標注問題,在語音語言領域里比較出名的應用包括語音識別、中文分詞(CWS)、詞性標注(POS)等等等等。盡管CTC可能是當前更主流的語音識別方案,但這不是本文所關注的,這里只關注這個經典模型本身。

      一、概述

      HMM的概率圖模型如下圖所示。本文簡述的是離散情況下的隱馬爾可夫模型(連續情況下的在 [2] 中有討論,我沒細看……):一條隱藏的馬爾可夫鏈生成的狀態隨機序列(state sequence,圖示的白色節點)$Q=(q_1,q_1,...,q_T)$ 是不可觀測的,並記所有可能狀態的集合為 $S=\{S_1,S_2,...,S_N\}$ ;由它們產生一個可觀測的觀測隨機序列(observation sequence,圖示的深色節點)$O=(o_1,o_2,...,o_T)$ ,並記所有可能觀測的集合為 $V=\{v_1,v_2,...,v_M\}$ 。

      序列的值可以看作是隨時刻產生的,每個時刻對應着序列的一個值。所以HMM是個雙重隨機過程(doubly embedded stochastic process),一個是狀態轉移,另一個是由狀態釋放出觀測值。在序列標注(Sequence labelling)任務中,模型就是需要對狀態序列進行標注。

      根據貝葉斯公式,

$$P(Q|O)=\frac{P(O,Q)}{P(O)}=\frac{P(O|Q)P(Q)}{P(O)}$$

對於給定的序列O來說,$P(O)$ 是確定的,所以HMM的任務就是要建模 $P(O,Q)$

      那么問題來了:HMM作為生成式模型,建模聯合概率分布,那么關於O、Q的所有可能組合都應該被枚舉出來。但實際上,如果序列的元素之間存在長距離依賴,這個任務非常困難。所以才有了下面將會介紹的嚴格獨立性假設

      觀測序列在一個給定時刻下的觀測值 $o_t$ 可以看作是特征(特征矢量),而狀態序列在那個時刻所對應的狀態值 $q_t$ 可以看作是這個特征表示下所對應的類別標號。

圖片來源:[1]

      1. 首先看狀態序列(不可觀)

      狀態序列的值不可觀,需要通過觀測序列來推斷。它由一階馬爾可夫鏈產生,也就是說每一時刻的狀態 $q_t$ 只依賴於前一時刻的狀態 $q_{t-1}$ :

$$P(q_t|q_1,o_1,...,q_{t-1},o_{t-1})=P(q_t|q_{t-1})$$

$$\begin{aligned}P(q_1,q_2,...,q_t)&=P(q_1)P(q_2|q_1)P(q_3|q_1,q_2)\cdots P(q_t|q_1,...,q_{t-1})\\&=P(q_1)P(q_2|q_1)P(q_3|q_2)\cdots P(q_t|q_{t-1})\end{aligned}$$

熟悉貝葉斯網的朋友們都知道,條件獨立性可以說是非常核心的一個性質。一階馬爾可夫鏈的參數是狀態轉移概率矩陣 $A=[a_{ij}]_{N\times N}$ 和初始狀態概率向量 $\pi=(\pi_1,...,\pi_N)$:

$$a_{ij}=P(q_t=S_j|q_{t-1}=S_i),\quad \sum_{j=1}^Na_{ij}=1,\quad 1\leq i\leq N$$

$$\pi_i=P(q_1=S_i),\quad \sum_{i=1}^N\pi_i=1$$

狀態轉移。圖片來源:[2] 

      2. 接下來看觀測序列

      觀測序列服從觀測獨立性假設,也就是說每一時刻的觀測值 $o_t$ 只依賴於該時刻的狀態值 $q_t$ :

$$P(o_t|q_1,o_1,...,q_{T},o_{T})=P(o_t|q_t)$$

由此可以引出釋放概率矩陣 $B=[b_j(k)]_{N\times M}$ :

$$b_j(k)=P(o_t=v_k|q_t=S_j),\quad \sum_{k=1}^Mb_j(k)=1,\quad 1\leq j\leq N$$

表示的是在當前時刻狀態為 $S_j$ 的條件下觀測到到符號為 $v_k$ 的概率。(如果不知道狀態 $q_t$ 的具體值 $S_j$ ,那 $b_j(k)$ 的下標 $j$ 就用 $q_t$ 代替;如果不知道觀測 $o_t$ 的具體值 $v_k$ ,那 $b_j(k)$ 的 $k$ 就用 $o_t$ 代替。)

      由此,這個模型的參數有三組:初始概率向量 $\pi$ 、狀態轉移概率矩陣 $A$ 以及釋放概率矩陣 $B$ 。所以可以用 $\lambda=(\pi,A,B)$ 來表示一個HMM。

      3. HMM 的數學模型

      HMM 就是要建模 $P(O,Q)$ 。對於給定的一個HMM $\lambda$ ,下式就是 HMM 模型:

$$\begin{aligned}P(O,Q|\lambda)&=\pi_{q_1}b_{q_1}(o_1)a_{q_1q_2}b_{q_2}(o_2)\cdots a_{q_{T-1}q_T}b_{q_T}(o_T)\\&=\pi_{q_1}b_{q_1}(o_1)\prod_{t=2}^Ta_{q_{t-1}q_t}b_{q_t}(o_t)\end{aligned}$$

這其中,由於不同時刻的釋放概率相互獨立,所以

$$P(O|Q,\lambda)=b_{q_1}(o_1)b_{q_2}(o_2)\cdots b_{q_T}(o_T)$$

根據一階馬爾可夫鏈,所以

$$P(Q|\lambda)=\pi_{q_1}a_{q_1q_2}a_{q_2q_3}\cdots a_{q_{T-1}q_T}$$

二者結合就得到了上面的式子。

      以詞性標注為例

      如果將 $O$ 視作待標注的句子,將 $Q$ 視作標注的詞性序列,那么 HMM 各個參數的含義為:轉移概率 $a_{ij}$ 表示詞性 j 緊跟在詞性 i 后的概率,釋放概率 $b_j(k)$ 表示詞性 j 的條件下會出現詞語 k 的概率。

      4. HMM的三個基本問題

      前兩個屬於inference,第三個屬於learning,inference和learning都是概率圖模型的基本問題。

      (1). 計算問題(evaluation):給定一個HMM $\lambda$ 和一個觀測序列 $O$ ,如何高效計算一個觀測序列 $O$ 的概率 $P(O|\lambda)$ ?——前向算法、后向算法

      (2). 解碼問題(decoding):給定一個HMM $\lambda$ 和一個觀測序列 $O$ ,如何最大化 $P(Q|O)$,求出“最有可能”的狀態序列 $Q$ ?——維特比算法

      (3). 學習問題(training):給定若干觀測序列 $O$(對應的狀態序列 $Q$ 可能已知也可能未知),如何訓練出模型參數 $\lambda$ ,使得 $P(O|\lambda)$ 最大化?——EM算法

      二、計算問題

      給定一個HMM $\lambda$ 和一個觀測序列 $O$ ,計算一個觀測序列 $O$ 的概率 $P(O|\lambda)$ 可以用直接計算的方式:

$$\begin{aligned}P(O|\lambda)&=\sum_{\text{all } Q} P(O,Q|\lambda)\\&=\sum_{\text{all } Q} P(O|Q,\lambda)P(Q|\lambda)\\&=\sum_{\text{all }q_1,q_2,...,q_T}\pi_{q_1}b_{q_1}(o_1)a_{q_1q_2}b_{q_2}(o_2)\cdots a_{q_{T-1}q_T}b_{q_T}(o_T)\end{aligned}$$

這個式子就是從聯合分布求邊緣分布,對所有可能的狀態序列求和。

      求和號里的每一項都是 $O(2T)$ ,長度為 $T$ 的全部可能的狀態序列有 $N^T$ 種,所以這種方式的時間復雜度是 $O(TN^T)$ ,是不可忍受的。

      顯然,在這個計算方式下,有大量的重復計算。所以引出了如下兩種簡化計算方法。

      I、前向算法(forward procedure)

      設到當前時刻 $t$ 的局部觀測序列 $o_1,o_2,...,o_t$ ,且當前狀態 $q_t$ 是狀態集合里的第 $i$ 個狀態 $S_i$ ,定義這個概率為前向變量 $\alpha_t(i)$ 

$$\alpha_t(i)=P(o_1,o_2,...,o_t,q_t=S_i|\lambda)$$

      首先,在初始情況下,顯然有

$$\alpha_1(i)=\pi_ib_i(o_1),\quad 1\leq i\leq N$$

即需要初始化N個前向變量。

      然后,可以得到下面的歸納方程:

$$\alpha_{t+1}(j)=\biggl(\sum_{i=1}^N\alpha_t(i)a_{ij}\biggr)b_j(o_{t+1}),\quad 1\leq t\leq T-1,\quad 1\leq j\leq N$$

這個式子可以用下圖來解釋

圖片來源:[2] 

      情況相當於:想得到在時刻 $t+1$ 時的局部觀測序列為 $o_1,o_2,...,o_t,o_{t+1}$ 且狀態 $q_{t+1}=S_j$ 的概率 $\alpha_{t+1}(j)$ ,如何利用此前時刻已經計算過的值

      仔細想一下,可以從狀態轉移來入手:現在的情況是,已經給定了狀態 $q_{t+1}=S_j$ ,但是轉移到它的狀態 $q_t$ 可以是任意的。所以,我們可以先求:在時刻 $t$ 時的局部觀測序列為 $o_1,o_2,...,o_t$ 且狀態 $q_{t+1}=S_j$ 是由狀態 $q_t=S_i$ 轉移而來的概率,即 $\alpha_t(i)a_{ij}$ ;由於 $q_t$ 可以是任意的,那么對所有可能( $S_1,S_2,...,S_N$ )求和,就得到了在時刻 $t$ 時的局部觀測序列為 $o_1,o_2,...,o_t$ 且狀態 $q_{t+1}=S_j$ 的概率 $\sum_{i=1}^N\alpha_t(i)a_{ij}$ 。那么再乘以 $b_j(o_{t+1})$ ,就得到在時刻 $t+1$ 時的局部觀測序列為 $o_1,o_2,...,o_t,o_{t+1}$ 且 狀態 $q_{t+1}=S_j$ 的概率 $\alpha_{t+1}(j)$ 。

      因此,在計算 $\alpha_{t+1}(j)$ 時,利用了前一時刻 $t$ 的計算結果,這就是計算復雜度得以降低的原因。

      當求得所有前向變量后,就可以按照如下方式計算一個觀測序列 $O$ 的概率 $P(O|\lambda)$ :

$$\begin{aligned}P(O|\lambda)&=P(o_1,o_2,...,o_T|\lambda)\\&=\sum_{j=1}^NP(o_1,o_2,...,o_T,q_T=S_j|\lambda)\\&=\sum_{j=1}^N\alpha_{T}(j)\end{aligned}$$

      在一個給定的時刻 $t+1$ ,如果給定 $j$ ,那么求取 $\alpha_{t+1}(j)$ 的時間復雜度為 $O(N)$ ;由於 $j$ 存在N種可能,所以求取在時刻 $t+1$ 的全部 $\alpha_{t+1}(j)$ 的時間復雜度為 $O(N^2)$ 。又因為有T個時刻,所以時間復雜度為 $O(TN^2)$ ,相比於 $O(TN^T)$ 降低了很多。

      II. 后向算法(backward procedure)

      后向算法需要定義后向變量 $\beta_t(i)$ :當前狀態 $q_t$ 是狀態集合里的第 $i$ 個狀態 $S_i$ 的條件下,從時刻 $t+1$ 到 $T$ 的局部觀測序列 $o_{t+1},o_{t+2},...,o_T$ 的概率:

$$\beta_t(i)=P(o_{t+1},o_{t+2},...,o_T|q_t=S_i,\lambda)$$

      初始情況:$\beta_T(i)=1,\quad 1\leq i\leq N$

      歸納方程:$\beta_t(i)=\sum_{j=1}^Na_{ij}b_j(o_{t+1})\beta_{t+1}(j),\quad T-1\geq t\geq 1,\quad 1\leq i\leq N$

      終止:$P(O|\lambda)=\sum_{i=1}^N\pi_ib_i(o_1)\beta_1(i)$

      時間復雜度與前向算法相同。

      前向算法和后向算法有個統一寫法:

$$P(O|\lambda)=\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j),\quad 1\leq t\leq T-1$$

當 $t=1$ 時為前向算法,$t=T-1 $ 時為后向算法。

      III. 一些概率的計算

      利用前向變量和后向變量,可以求解一些情況下某個時刻處在某種狀態下的概率。

      1. 給定模型 $\lambda$ 和一個觀測序列 $O$ ,求在時刻 $t$ 時狀態 $q_t$ 為 $S_i$ 的概率 $\gamma_t(i)$ :根據貝葉斯公式,有

$$\begin{aligned}\gamma_t(i)&=P(q_t=S_i|O,\lambda)\\&=\frac{P(q_t=S_i,O|\lambda)}{P(O|\lambda)}\\&=\frac{P(q_t=S_i,O|\lambda)}{\sum_{j=1}^NP(q_t=S_j,O|\lambda)}\\&=\frac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^N\alpha_t(j)\beta_t(j)}\end{aligned}$$

      顯然有 $\sum_{i=1}^N\gamma_t(i)=1$ 。

      我們來看一下前向變量和后向變量相乘為什么是 $P(q_t=S_i,O|\lambda)$ :為了簡單起見,記前向變量等於 P(A, B) ,后向變量等於 P(C|B) ,二者相乘就是 P(B)P(A|B)P(C|B) ,因為 A 和 C 獨立所以等於 P(B)P(A, C|B)=P(A, B, C) 。

      2. 給定模型 $\lambda$ 和一個觀測序列 $O$ ,求在時刻 $t$ 時狀態 $q_t$ 為 $S_i$ 且在下一時刻 $t+1$ 的狀態 $q_{t+1}$ 為 $S_j$ 的概率:

$$\begin{aligned}\xi_t(i,j)&=P(q_t=S_i,q_{t+1}=S_j|O,\lambda)\\&=\frac{P(q_t=S_i,q_{t+1}=S_j,O|\lambda)}{P(O|\lambda)}\\&=\frac{P(q_t=S_i,q_{t+1}=S_j,O|\lambda)}{\sum_{i=1}^N\sum_{j=1}^NP(q_t=S_j,q_{t+1}=S_j,O|\lambda)}\\&=\frac{\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)}{\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)}\end{aligned}$$

圖片來源:[2]

      3. 這兩個值的關系

$$\gamma_t(i)=\sum_{j=1}^N\xi_t(i,j)$$

      三、解碼問題

      給定一個HMM $\lambda$ 和一個觀測序列 $O$ ,如何最大化 $P(Q|O)$,求出“最有可能”的狀態序列 $Q$ ?

      換句話說,怎樣可以快速地從 $N^T$ 個序列里找到概率最大的那一個:

$$\begin{aligned}\max_{q_1,q_2,...,q_T}P(q_1,q_2,...,q_T|O,\lambda)&=\max_{q_1,q_2,...,q_T}\frac{P(q_1,q_2,...,q_T,O|\lambda)}{P(O|\lambda)}\\&=\max_{q_1,q_2,...,q_T}{P(q_1,q_2,...,q_T,O|\lambda)} \end{aligned}$$

      I. 近似算法

      很直觀的思路是:在每個時刻 $t$ 都選擇當前時刻下概率最大的狀態 $q_t^*$ ,進而組成狀態序列,盡管這個狀態序列並不能保證整體上是概率最大的。

      在時刻 $t$ 時最可能的狀態在狀態集合 $S$ 中的序號是 $i=\arg\max_{1\leq i\leq N}\gamma_t(i)$ ,進而 $q_t^*=S_i$ 。

      此外,這種方法還有個問題就是,不能保證兩個相鄰時刻的狀態間存在轉移概率。也就是說,這種方法所得到的狀態序列可能根本就不是個合法序列。

      II. 維特比算法(Viterbi algorithm)

      維特比算法是一種動態規划方法。動態規划的基礎是貝爾曼最優性原理(Bellman's Principle of Optimality)多級決策過程的最優策略有如下性質——不論初始狀態和初始決策如何,其余的決策對於初始決策所形成的狀態來說,必定也是一個最優策略。

      在解碼問題里就是說:如果最優狀態序列 $q_1^*,q_2^*,...,q_{T}^*$ 在時刻 $t$ 的狀態 $q_t^*$ 已知為 $S_i$ ,那么從 $q_t^*$ 到 $q_T^*$ 的局部狀態序列一定是所有可能的狀態序列里最優的。通俗一點說,已知最優路徑 P ,那么我們在路徑上選擇一個節點,從起點到該節點的這段局部路徑P1一定是所有可能的局部路徑里最優的;同樣地,從這個節點到終點的局部路徑P2一定是所有可能的局部路徑里最優的。既然有了這個性質,且看維特比算法是如何求解出最優狀態序列的:

      維特比算法就是利用以下的方法求解最優序列:從起始時刻 $t=1$開始,遞推地找出在時刻 $t$ 的狀態為 $S_i$ 的各個可能的狀態序列中的最大概率,一直求解到時刻 $t=T$ 的狀態為 $S_i$ 的最大概率,並得到時刻 $T$ 的狀態 $S_j$ ;然后向前回溯求得其他時刻的狀態。

      定義如下維特比變量 $\delta_t(i)$ :能夠輸出已知的觀測序列 $o_1,...,o_t$ 、且在時刻 $t$ 的狀態 $q_t$ 為 $S_i$ 的所有局部狀態序列 $q_1,q_2,...,q_{t-1},S_i$ 中,概率最大的序列 $q_1^*,q_2^*,...,q_{t-1}^*,S_i$ 所對應的概率值為

$$\delta_t(i)=\max_{q_1,q_2,...,q_{t-1}}P(q_1,q_2,...,q_{t-1},q_t=S_i,o_1,...,o_t|\lambda)$$

      首先,初始情況下,有

$$\delta_1(i)=\pi_ib_i(o_1),\quad 1\leq i\leq N$$

$$\psi_1(i)=S_0$$

第二個式子在下面馬上介紹。

      然后,可以得到遞歸關系

$$\delta_{t}(i)=\biggl(\max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}]\biggl)b_i(o_{t}),\quad 2\leq t\leq T,\quad 1\leq i\leq N$$

$$\psi_t(i)=\arg\max_{S_j,1\leq j\leq N}[\delta_{t-1}(j)a_{ji}], \quad 2\leq t\leq T,\quad 1\leq i\leq N$$

這個遞歸關系和前向算法很類似:現在已知時刻 $t$ 的狀態 $q_t$ 為 $S_i$ ,需要求解 $\delta_{t}(i)$ ,如何利用已經求解過的(即時刻 $t$ 之前的)值。同前向算法一樣,依然是從狀態轉移入手:時刻 $t-1$ 的狀態 $S_j$ 並不是任取的( $1\leq j\leq N$ ),對於 $\delta_{t}(i)$ 所對應的最優局部狀態序列 $q_1^*,q_2^*,...,q_{t-1}^*,S_i$ 來說,它是唯一的。那么,為了得到 $\delta_{t}(i)$ ,就需要確定出 $S_j$ ,也就是 $S_i$ 由誰轉移而來。也就是說,需要全部的 $\delta_{t-1}(j)$( $1\leq j\leq N$ ),然后找出 $\delta_{t-1}(j)a_{ji}b_i(o_{t})$ 最大的一個。由 $S_i$ 釋放出 $o_t$(觀測序列的每個值都是已知的)的概率 $b_i(o_{t})$ 為固定值,所以無需考慮,就得到了上面的遞推式。$\psi_t(i)$ 是記錄前一時刻狀態的數組:對於在時刻 $t$ 的狀態 $q_t$ 為 $S_i$ 的概率最大的局部狀態序列 $q_1^*,q_2^*,...,q_{t-1}^*,S_i$ ,記錄其在時刻 $t-1$ 的狀態 $q_{t-1}^*$ 的狀態值 $S_j$ 。有了這個信息,就可以不斷向前回溯。

      那么可以得到最終時刻的狀態:只有計算到最終時刻 $T$ 的 $\delta_T(i)$ ,才知道最優序列 $q_1^*,...,q_T^*$ 的概率(此前的概率不管多大,因為沒有轉移到最后一個狀態,所以都是局部的)以及其在最終時刻的狀態 $q_T^*$ ,才能進一步回溯求解此前每個時刻的狀態

$$i=\arg\max_{1\leq i\leq N}\delta_T(i)$$

$$q_T^*=S_i$$

      最后需要回溯,得到每個時刻的狀態

$$q_{t}^*=\psi_{t+1}(q_{t+1}^*),\quad T-1\geq t \geq 1$$

      維特比算法的時間復雜度和前向算法、后向算法相同,為 $O(TN^2)$ 。

      如果我上面說的還是抽象、不夠清楚,可以看看 [3] 的例題10.3,把整個過程跟着走一遍,很快就懂了。

      在具體實現過程中,為避免多個很小的數相乘導致浮點數下溢,所以可以取對數使相乘變為相加。

      四、學習問題

      此前兩個問題,計算問題和解碼問題,都是在已知模型參數 $\lambda$ 和觀測序列 $O$ 的情況下,去推斷狀態序列 $Q$ 。

      現在的問題是,已知若干個長度相同的觀測序列和對應的狀態序列 $\{(Q_1,O_1),(Q_2,O_2),...\}$(對應的狀態序列也可能未知),如何訓練模型參數。

      I. 監督學習

      在有標注數據(對應的狀態序列已知)的情況下,可以使用極大似然估計。此時,給定一個觀測序列 $O$ 和對應的狀態序列 $Q$ ,模型參數有以下的頻數估計的形式:

$$\begin{aligned}\overline\pi_i&=frequency\text{ in state }S_i\text{ at time }1\\&=\delta(q_1,S_i)\end{aligned}$$

$$\begin{aligned}\overline a_{ij}&=\frac{\text{#}transitions\text{ from state }S_i\text{ to state }S_j}{\text{#}transitions\text{ from state }S_i}\\&=\frac{\sum_{t=1}^{T-1}\delta(q_t,S_i)\delta(q_{t+1},S_j)}{\sum_{t=1}^{T-1}\delta(q_t,S_i)}\end{aligned}$$

$$\begin{aligned}\overline b_{j}(k)&=\frac{frequency\text{ in state }S_j\text{ and observing symbol }v_k}{frequency\text{ in state }S_j}\\&=\frac{\sum_{t=1}^{T}\delta(q_t,S_j)\delta(o_{t},v_k)}{\sum_{t=1}^{T}\delta(q_t,S_j)}\end{aligned}$$

式中的 $\delta(\cdot,\cdot)$ 是克羅內克函數(Kronecker),$\delta(x,y)=1\text{ if }x=y\text{ else }0$ 。跟示性函數 $I(\cdot)$ 有點像,示性函數是括號內的條件為真則1,為假則0。

      II. 無監督學習

      無監督學習HMM模型參數的motivation是狀態序列的獲取是有很大代價的,所以在這種情況下需要根據觀測序列直接訓練模型。

      狀態序列 $Q$ 作為隱變量的情況下,可以用EM算法來訓練HMM。基本思路是,首先將模型參數隨機初始化為 $\lambda^{(0)}=(\pi^{(0)},A^{(0)},B^{(0)})$(需要滿足各自的限制條件,就是三個求和式),然后在模型 $\lambda_0$ 下得到該模型下的隱變量的期望值,將上面有監督學習的全部頻數都替換為期望頻數。

      用於HMM訓練的EM算法被稱為Baum-Welch算法(前向-后向算法),模型參數有以下的更新式:

$$\overline\pi_i^{(n+1)}=P(q_1=S_i|O,\lambda)=\gamma_1(i)$$

$$\overline a_{ij}^{(n+1)}=\frac{\sum_{t=1}^{T-1}\xi_t(i,j)}{\sum_{t=1}^{T-1}\gamma_t(i)}$$

$$\overline b_{j}^{(n+1)}=\frac{\sum_{t=1}^{T}\gamma_t(j)\delta(o_t,v_k)}{\sum_{t=1}^{T}\gamma_t(j)}$$

這個式子是迭代更新的:因為等式右端的式子是在模型 $\lambda^{(n)}=(\pi^{(n)},A^{(n)},B^{(n)})$ 下計算出的,進而得到新一次迭代的參數值,如此不斷迭代更新。

      推導並不復雜,[3] 寫的很詳細。需要注意的是, [3] 的式(10.33)寫成 $Q(\lambda,\overline\lambda)=\sum_QP(O,Q|\overline\lambda)\log P(O,Q|\lambda)$ 比較合適,原來的寫法有歧義。之前寫過博客簡單梳理了一下EM算法

      關於何時停機:用下面的對數運算的方式來判斷某個參數是否已經收斂

$$|\log P(O|\lambda^{(n+1)})-\log P(O|\lambda^{(n)})|<\epsilon$$

由於EM算法中存在求和操作(Viterbi算法只有乘積操作),所以不能簡單地使用取對數來避免浮點數下溢,采用的方式是設置一個比例系數,將概率值乘以它來放大;當每次迭代結束后,再把比例系數取消掉,繼續下一次迭代。

 

 

 

 

參考:

[1] An Introduction to Conditional Random Fields for Relational Learning

[2] A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition

[3] 《統計學習方法》

[4] 《統計自然語言處理》

[5] 漫談Hidden Markov Model 

[6] 52NLP的關於HMM的系列文章

[7] 知乎:基於CTC等端到端語音識別方法的出現是否標志着統治數年的HMM方法終結?

 

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM