語音識別學習日誌 2018-7-17 語音識別基礎知識準備(3)

2018-7-17

Kmeans算法的缺陷

k均值算法主要的兩個缺陷: 
1. K值需要預先給定,很多情況下K值的估計是非常困難的,對於像計算全部微信用戶的交往圈這樣的場景就完全的沒辦法用K-Means進行。對於可以確定K值不會太大但不明確精確的K值的場景,可以進行迭代運算。
2. K-Means算法對初始選取的聚類中心點是敏感的,不同的起始K點所得到的聚類結果完全不同 。
3. K均值算法並不適合所有的數據類型。它不能處理非球形簇、不同尺寸和不同密度的簇,銀冠指定足夠大的簇的個數是他通常可以發現純子簇。 
4. 對離羣點的數據進行聚類時,K均值也有問題,這種情況下,離羣點檢測和刪除有很大的幫助。

HMM模型

隱馬爾可夫模型(Hidden Markov Model,以下簡稱HMM)。

1、什麼樣的問題需要HMM模型

使用HMM模型的問題一般有一下兩個特徵:

      1)問題是基於序列的,比如時間序列或者狀態序列。

      2)問題中有兩類數據,一列序列數據是可以觀測的,即觀測序列;而另一類數據是不能觀測到的,即隱藏狀態序列,簡稱狀態序列。

有這兩個特徵,那麼問題一般可以用HMM模型解決。這樣的問題在實際生活中是很多的。比如:打字的過程,在鍵盤上敲出來的一系列字符就是觀測序列,而實際想輸入的句子就是隱藏序列,輸入法的任務就是根據敲入的一系列字符儘可能的猜測我要輸入的詞語,並把最可能的詞語放在最前面,這就可以看做一個HMM模型。

2、HMM模型的定義

對於HMM模型,假設Q是所有可能的隱藏狀態的集合,V是所有可能的觀測狀態的集合,即:

                                                                Q={q_1,q_2,...,q_N}, V={v_1,v_2,...v_M}

其中,N是可能的隱藏狀態數,M是所有的可能的觀察狀態數。

對於一個長度爲T的序列,I對應的狀態序列, O是對應的觀察序列,即:

                                                              I={i_1,i_2,...,i_T}, O={o_1,o_2,...o_T}

其中,任意一個隱藏狀態i_t∈Q, 任意一個觀察狀態o_t∈V。

HMM模型做了兩個很重要的假設如下:

1)齊次馬爾科夫鏈假設。即任意時刻的隱藏狀態只依賴於它前一個隱藏狀態。當然這樣假設有點極端,因爲很多時候我們的某一個隱藏狀態不僅僅只依賴於前一個隱藏狀態,可能是前兩個或者是前三個。但是這樣假設的好處就是模型簡單,便於求解。如果在時刻t的隱藏狀態是i_t=q_i,在時刻t+1的隱藏狀態是i_t_+_1=q_j , 則從時刻t到時刻t+1的HMM狀態轉移概率a_i_j可以表示爲:

                                                  a_i_j=P(i_t+1=q_j|i_t=q_i)

這樣a_i_j可以組成馬爾科夫鏈的狀態轉移矩陣A:

                                                A=[a_i_j]_N_*_N

 

2)觀測獨立性假設。即任意時刻的觀察狀態只僅僅依賴於當前時刻的隱藏狀態,這也是一個爲了簡化模型的假設。如果在時刻t的隱藏狀態是i_t=q_j, 而對應的觀察狀態爲o_t=v_k, 則該時刻觀察狀態v_k在隱藏狀態q_j下生成的概率爲b_j(k),滿足:

                                               b_j(k)=P(o_t=v_k|i_t=q_j)

這樣b_j(k)可以組成觀測狀態生成的概率矩陣B:

                                               B=[b_j(k)]_N_*_M

除此之外,我們需要一組在時刻t=1的隱藏狀態概率分佈Π:

                                              \Pi =[\pi(i)]_N, 其中 \pi(i)=P(i_1=q_i)

一個HMM模型,可以由隱藏狀態初始概率分佈Π, 狀態轉移概率矩陣A和觀測狀態概率矩陣B決定。Π, A決定狀態序列,B決定觀測序列。因此,HMM模型可以由一個三元組λ表示如下:

                                             \lambda =(A,B,\Pi )

3、一個HMM模型實例

一個簡單的實例來描述上面抽象出的HMM模型。這是一個盒子與球的模型,例子來源於李航的《統計學習方法》。

假設我們有3個盒子,每個盒子裏都有紅色和白色兩種球,這三個盒子裏球的數量分別是:

                                                

按照下面的方法從盒子裏抽球,開始的時候,從第一個盒子抽球的概率是0.2,從第二個盒子抽球的概率是0.4,從第三個盒子抽球的概率是0.4。以這個概率抽一次球后,將球放回。然後從當前盒子轉移到下一個盒子進行抽球。規則是:如果當前抽球的盒子是第一個盒子,則以0.5的概率仍然留在第一個盒子繼續抽球,以0.2的概率去第二個盒子抽球,以0.3的概率去第三個盒子抽球。如果當前抽球的盒子是第二個盒子,則以0.5的概率仍然留在第二個盒子繼續抽球,以0.3的概率去第一個盒子抽球,以0.2的概率去第三個盒子抽球。如果當前抽球的盒子是第三個盒子,則以0.5的概率仍然留在第三個盒子繼續抽球,以0.2的概率去第一個盒子抽球,以0.3的概率去第二個盒子抽球。如此下去,直到重複三次,得到一個球的顏色的觀測序列: 

                                                        O={紅,白,紅}.

注意在這個過程中,觀察者只能看到球的顏色序列,卻不能看到球是從哪個盒子裏取出的。

那麼按照我們上一節HMM模型的定義,我們的觀察集合是: 

                                                       V={紅,白},M=2

我們的狀態集合是:

                                                      Q={盒子1,盒子2,盒子3},N=3

而觀察序列和狀態序列的長度爲3.

初始狀態分佈爲:

                                                     \Pi=(0.2,0.4,0.4)^T

狀態轉移概率分佈矩陣爲:

                                                  A=\begin{pmatrix} 0.5&0.2 &0.3 \\ 0.3& 0.5 &0.2 \\ 0.2&0.3 &0.5 \end{pmatrix}

觀測狀態概率矩陣爲:

                                                B=\begin{pmatrix} 0.5 &0.5 \\ 0.4&0.6 \\ 0.7&0.3 \end{pmatrix}

從上一節的例子,可以抽象出HMM觀測序列生成的過程。

輸入的是HMM的模型\lambda =(A,B,\Pi ),觀測序列的長度T

輸出是觀測序列O={o_1,o_2,...o_T}

生成的過程如下:

 1)根據初始狀態概率分佈Π生成隱藏狀態i_1

 2) for t from 1 to T

   a. 按照隱藏狀態it的觀測狀態分佈b_i___t(k)生成觀察狀態o_t.   
           b. 按照隱藏狀態it的狀態轉移概率分佈a_i___t _i___t___+___1產生隱藏狀態i_t_+_1.

所有的o_t一起形成觀測序列O={o_1,o_2,...o_T}

HMM模型一共有三個經典的問題需要解決:

 1) 評估觀察序列概率。即給定模型λ=(A,B,Π)和觀測序列O={}{o_1,o_2,...o_T},計算在模型λ下觀測序列O出現的概率P(O|λ)。這個問題的求解需要用到前向後向算法。

 2)模型參數學習問題。即給定觀測序列O={o_1,o_2,...o_T},估計模型λ=(A,B,Π)的參數,使該模型下觀測序列的條件概率P(O|λ)最大。這個問題的求解需要用到基於EM算法的Baun-Welch算法。這個問題是HMM模型三個問題中最複雜的。

 3)預測問題,也稱爲解碼問題。即給定模型λ=(A,B,Π)和觀測序列O={o_1,o_2,...o_T},求給定觀測序列條件下,最可能出現的對應的狀態序列,這個問題的求解需要用到基於動態規劃的維特比(Viterbi)算法。這個問題是HMM模型三個問題中複雜度居中的算法。

Baun-Welch算法,Viterbi解碼算法將在下一篇學習日誌中介紹。

 

 

 

 

 

發佈了118 篇原創文章 · 獲贊 35 · 訪問量 40萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章