1. 程式人生 > >HMM知識點整合與理解

HMM知識點整合與理解

文章目錄


基本概念

馬爾可夫性: 下一個狀態只和當前狀態有關(在現在的條件下,過去和未來彼此獨立)

隨機場: 給空間中的所有位置按某種分佈隨機賦予一個集合中的值,那麼這個被賦值了的位置的全體稱為隨機場,隨機場可以被描述成一個無向圖

馬爾科夫隨機場: 滿足馬爾可夫性的隨機場稱為馬爾可夫隨機場

用一個通俗的比喻來形容,一隻被切除了大腦的白鼠在若干個洞穴間的躥動就構成一個馬爾可夫隨機場。因為這隻白鼠已沒有了記憶,瞬間而生的念頭決定了它從一個洞穴躥到另一個洞穴;當其所在位置確定時,它下一步躥往何處與它以往經過的路徑無關。

馬爾可夫鏈: 其中,如果無向圖剪下成為了線性結構,那麼就稱其為馬爾可夫鏈

一階馬爾可夫鏈: 滿足馬爾可夫基本定義的(下一個狀態只和當前狀態有關)的馬爾可夫鏈

二階馬爾可夫鏈: 是馬爾可夫性的擴充,如果下一個狀態和之前的兩個狀態有關,那麼這個線性結構稱為二階馬爾可夫鏈(也稱之為二階馬爾可夫模型)

如果有朋友聽說了n元語義,就可以對應一下,N元語義其實就是N-1階馬爾可夫模型

數學建模: 就是根據實際問題來建立數學的模型,並對數學模型來進行求解,然後根據結果去解決實際問題。當需要從定量的角度分析和研究一個實際問題時,人們就要在深入調查研究、瞭解物件資訊、作出簡化假設、分析內在規律等工作的基礎上,用數學的符號和語言作表述來建立數學模型。

有的人可能會有些奇怪隱馬爾可夫模型的…一些地方,可能看了這個特意放在這裡的名詞解釋會明白一些

馬爾可夫模型:具有馬爾可夫性的模型

隱馬爾可夫模型: 在很多時候,馬爾可夫過程不足以描述我們發現的問題,因為我們觀察到的狀態不夠明顯,我們推測這些狀態背後有隱藏的原因(狀態),因此就需要一個觀察序列隱序列,如果我們知道觀察序列背後真正的隱序列,就能夠更好的分析問題。



隱馬爾可夫模型(HMM)

HMM 可用一個5元組 { N, M, π,A,B } 表示,其中:

N 表示隱藏狀態的數量,我們要麼知道確切的值,要麼猜測該值;
M 表示可觀測狀態的數量,可以通過訓練集獲得;
π={πi} 為初始狀態概率;代表的是剛開始的時候各個隱藏狀態的發生概率;
A={aij}為隱藏狀態的轉移概率矩陣;NN,代表的是第一個狀態到第二個狀態發生的概率;
B={bij}為發射概率矩陣,N
M,代表的是處於某個隱狀態的條件下,某個觀測發生的概率。

以比較通俗的例子,你只能往地上看花,花有{旺盛,蔫}兩種狀態,這是觀測狀態,如果假設花的狀態只和天氣有關,並且進行簡化,那麼{下雨,晴天,陰天}就是這個觀測狀態對應的隱藏狀態,其中


HMM可以解決的問題

模型評估問題(概率計算問題)

知道觀測序列,知道隱藏序列,π,A,B,求解得到該觀測序列的概率

最簡單的例子,我用一個六面骰骰一次,骰出了1,求骰出1的概率(1/6)。這時隱藏序列是<六面骰>,觀測序列是<1>

解決方案: 窮舉(不推薦),前向/後向演算法


解碼問題(預測問題)

知道觀測序列,知道隱藏狀態的集合以及π,A,B,預測最大可能的隱藏序列

最簡單的例子,我知道我骰了<1>,我想知道我用的最有可能是六面骰還是四面骰(答案是四面骰,因為四面骰的概率是1/4,而六面骰的概率是1/6)。
解決方案: Viterbi演算法


引數評估問題(屬於非監督學習演算法)

知道觀測序列,知道隱藏狀態的集合,求π,A,B,使得當前觀測序列發生的可能性最大
解決方案: EM演算法,Baum—Welch演算法

注意,所有的解決方案都不唯一,而且解決方案中的方法也並不僅僅侷限於解決這個問題,這些解決方案只是針對模型提出的問題的解決

如果這裡對這些敘述覺得抽象,可以看一下這篇部落格的舉例 https://www.cnblogs.com/skyme/p/4651331.html


HMM的缺點

缺乏靈活性,兩個以上隱藏狀態決定的觀測值不能通過HMM求解



HMM的應用


N元語義

背景

如果我們統計過很多很多的文字,把其中每個字出現的次數都統計出來,那麼每個字出現的頻率就等於概率。
現在我說一句話:我去北京大學玩,求這句話出現的概率是多少

求解辦法: 因為我們知道了每個字出現的概率,那麼:
P ( ) = P ( ) P ( ) P ( ) . . . P ( ) P(我去北京大學玩)=P(我)*P(去|我)*P(北|我去)...*P(玩|我去北京大學)

如果句子一多,那麼求解到後面的字會變得非常麻煩。這個時候就有人提出了N元語義

簡要介紹

如"我去北京大學玩"中,我們認為"玩"這個字和"我"是否出現並沒有太大的關係,因為完全可以"他去北京大學玩",因此,就可以假設一個字出現只和其上文有限個字的出現有關

換而言之,我們認為"玩"應該只和"去"或者只和"大學去"有關(假設,不一定真的有關),也就是
P ( ) P ( ) P(玩|我去北京大學) \approx P(玩|去)

其中,如果認為"玩"只和"去"有關(即前一個文字),那麼就是二元語義,即一階馬爾可夫模型;如果是N元語義(和前N-1個文字有關),那麼就是N-1階馬爾可夫模型


BMES標註預測

BMES是語義的標註,其中B=Begin,M=Medium,E=End,S=Single,分別代表一個字在詞中的地位(開始,中間,結束,S代表單字成詞),我們要句子進行BMES的標註。
在HMM中,BMES即為隱狀態的型別,而句子中的每個字,則是觀測狀態。

同時基於語料的分析,我們能夠得到轉移概率,初始概率,發射概率,因此對句子進行BMES標註的方法之一就是採用隱馬爾可夫模型。

如果有用過jieba分詞或者感興趣的話,可以看一下cut()方法中呼叫的_cut_DAG的實現,對未登入詞,jieba是採用Viterbi演算法對其進行了BMES標註後進行切分的,而概率則是jieba分詞中預先計算好並寫在庫中的文字。