前言
?? ?最近一直在看機(jī)器學(xué)習(xí)算法模型,但是總是在各種原理以及推導(dǎo)中迷失辱士,感覺自己理解了偶房,但是放下書本卻又不知所以然,這種“差不多理解了”現(xiàn)象相信也會困擾很多初學(xué)者失暴,于是我就想坯门,能不能有一種方式,簡單逗扒,通俗古戴,易懂,印象深刻的為大家呈現(xiàn)機(jī)器學(xué)習(xí)這種看上去很“深奧”的知識矩肩。
? ? 恰巧本周組內(nèi)小伙伴分享“自然語言處理-中文分詞的一些常用方法”现恼,分享過程中兩件事情使我印象深刻,第一:很多知識點(diǎn)黍檩,總是講到結(jié)果就結(jié)束了叉袍,沒有講為什么我們需要這樣做,比如刽酱,講到基于規(guī)則或詞典的分詞方法時畦韭,正向最大匹配法開始使用5個字符進(jìn)行匹配,如果沒有匹配上肛跌,則從最后截取一位丟掉,剩下四個字符繼續(xù)匹配,依次類推衍慎。但是转唉,為什么設(shè)定5個字符,而不是6個稳捆,7個呢赠法?第二:講到基于統(tǒng)計(jì)的分詞方法時,隱馬爾可夫模型被提到了重點(diǎn)上乔夯,但是如何使用隱馬爾可夫進(jìn)行分詞砖织,以及隱馬爾可夫怎么應(yīng)用到其他場景,我覺得這是一個模型的重點(diǎn)末荐,模型的思想固然重要侧纯,但是怎么講具體場景抽象到模型上,似乎更為重要甲脏,對于一個不是專門搞算法的人來講眶熬。
? ? 恰好自己之前看了部分HMM的原理,被同事一講块请,豁然開朗娜氏,所以準(zhǔn)備用自己的理解將HMM講的更加直觀一點(diǎn)。
隱馬爾可夫(HMM)基本概念
隱馬爾可夫模型是一個概率統(tǒng)計(jì)模型墩新,主要包含五個部分:
(1)初始概率(PI):用于描述t1(初始)時刻各個隱藏狀態(tài)發(fā)生的可能性
(2)狀態(tài)序列(H):用于描述隱藏狀態(tài)的發(fā)生序列
(3)觀測序列(O):用于描述隱藏狀態(tài)產(chǎn)生的可觀測序列
(4)轉(zhuǎn)移矩陣(A):用于描述各個隱含狀態(tài)之間轉(zhuǎn)移的概率分布
(5)發(fā)射矩陣(B):用于描述隱含狀態(tài)到觀測狀態(tài)之間的概率分布
? ? 一般贸弥,一個模型的確定即M=(PI,A海渊,B)
隱馬爾可夫(HMM)模型的假設(shè)前提
? ? HMM模型成立的前提是做了兩個基本假設(shè):
(1)齊次馬爾可夫性假設(shè):即假設(shè)隱藏的馬爾可夫鏈在任一時刻t的狀態(tài)只依賴于前一個時刻的狀態(tài)绵疲,與其他狀態(tài)和觀測無關(guān),也與t時刻無關(guān)切省。
(2)觀測獨(dú)立性假設(shè):即任意時刻的觀測狀態(tài)只依賴于該時刻的馬爾可夫鏈狀態(tài)(隱藏狀態(tài))最岗,與其他觀測狀態(tài)無關(guān)。
隱馬爾可夫(HMM)能做什么
? ? 在HMM中有三類典型問題:
(1)概率計(jì)算問題:已知模型參數(shù)M=(PI朝捆,A般渡,B),計(jì)算某一個給定的觀測狀態(tài)序列(O)的概率芙盘,即P(O|M)
(2)解碼問題:已知可觀測狀態(tài)序列(O)和模型參數(shù)M=(PI驯用,A,B)儒老,找到一個最有可能的隱藏狀態(tài)序列(H)蝴乔,即P(H|O,M)
(3)學(xué)習(xí)問題:已知可觀測狀態(tài)序列集(O)驮樊,找到一個最可能的HMM模型(模型各種參數(shù)(A薇正,B)片酝,使用最大似然估計(jì)的方法)
? ? 解決以上三類問題,通常我們會有對應(yīng)的方法來解決:
(1)概率計(jì)算問題:直接計(jì)算方法(概念可行但計(jì)算不可行)挖腰,前向算法雕沿,后向算法
(2)解碼問題:近似算法與維特比算法(Viterbi)
(3)學(xué)習(xí)問題:監(jiān)督學(xué)習(xí)算法(訓(xùn)練數(shù)據(jù)包含觀測序列和對應(yīng)的狀態(tài)序列),非監(jiān)督學(xué)習(xí)算法(Baum-Welch算法即EM算法)
隱馬爾可夫應(yīng)用實(shí)例
? ? 隱馬爾可夫模型應(yīng)用的一個難點(diǎn)就是如何將問題進(jìn)行抽象猴仑,映射到模型的幾個元素上审轮,接下來我將幾個常見的博客中的問題進(jìn)行一下簡單抽象。
(1)天氣預(yù)測問題
觀測狀態(tài):去公園辽俗,在家疾渣,去購物
隱藏狀態(tài):晴天,雨天崖飘,多云
轉(zhuǎn)移概率:晴天到雨天概率榴捡,晴天到多云概率。坐漏。薄疚。。
發(fā)射概率:晴天去公園概率赊琳,晴天在家概率街夭。。躏筏。板丽。。
最終趁尼,通過去觀察一個人的事件來預(yù)測最近幾天的天氣序列埃碱。
(2)骰子作弊問題
觀測狀態(tài):骰子擲出來的觀測值(1,2酥泞,3砚殿,4.。芝囤。似炎。。)
隱藏狀態(tài):使用的骰子類型(八面骰悯姊,六面骰羡藐。。悯许。仆嗦。)
轉(zhuǎn)移概率:八面骰到六面骰概率,六面骰到四面骰概率先壕。瘩扼。谆甜。。
發(fā)射概率:八面骰擲出1的概率邢隧,八面骰擲出2的概率店印,六面骰擲出2的概率。倒慧。。包券。纫谅。
最終,通過去觀察一串?dāng)S出的骰子序列來預(yù)測使用的骰子類型序列溅固。
(3)中文分詞問題
觀測狀態(tài):中文字(我付秕,是。侍郭。询吴。。)
隱藏狀態(tài):中文狀態(tài)亮元,B(一個詞的開始)猛计,M(一個詞的中間),E(一個詞的結(jié)尾)爆捞,S(單獨(dú)一個詞)
轉(zhuǎn)移概率:開始詞到中間詞的概率奉瘤,單字到開始詞的概率。煮甥。盗温。。
發(fā)射概率:開始詞到我的概率成肘,開始詞到是的概率卖局。。双霍。砚偶。。
最終店煞,通過去觀察一個中文序列來預(yù)測每個字的狀態(tài)蟹演,最后通過狀態(tài)就可以將詞分割出來。
(4)詞性標(biāo)注問題
觀測狀態(tài):中文詞(我顷蟀,是酒请,男人。鸣个。羞反。)
隱藏狀態(tài):詞性(動詞布朦,名詞。昼窗。是趴。)
轉(zhuǎn)移概率:動詞到名詞的概率,名詞到動詞的概率澄惊。唆途。。掸驱。
發(fā)射概率:動態(tài)到我的概率肛搬,名詞詞到我的概率。毕贼。温赔。。鬼癣。
最終陶贼,通過去觀察一個中文詞序列來預(yù)測每個詞的狀態(tài),即每個詞是什么詞性待秃。
ps:以上示例的前提是模型參數(shù)已經(jīng)訓(xùn)練出來拜秧,直接進(jìn)行預(yù)測。其實(shí)隱馬爾可夫模型要解決的三個問題是有內(nèi)在關(guān)聯(lián)的锥余。即
(1)在不知道模型參數(shù)前提下腹纳,需要解決學(xué)習(xí)問題,即通過訓(xùn)練數(shù)據(jù)驱犹,確定模型參數(shù)嘲恍,訓(xùn)練出來模型
(2)在模型通過學(xué)習(xí)問題學(xué)習(xí)出來后(或者已知參數(shù),一般教程使用雄驹,實(shí)際應(yīng)用不現(xiàn)實(shí))佃牛,在進(jìn)行概率計(jì)算或者上面示例的預(yù)測(解碼)
分割線
如果只是想使用隱馬爾可夫模型解決實(shí)際應(yīng)用問題,那么上面的內(nèi)容應(yīng)該可以滿足業(yè)務(wù)需求的医舆》溃可以不用向下看了,因?yàn)槟壳昂芏嗫蚣軐τ谀P偷募梢呀?jīng)很成熟了蔬将,以上內(nèi)容足夠支撐你做一個合格的調(diào)參俠了爷速。
如果想對模型的原理進(jìn)行了解,請跟我來霞怀,接下來將分別針對HMM解決的三個問題進(jìn)行原理分析惫东。
概率計(jì)算問題
前向算法:
后向算法
學(xué)習(xí)問題
(1)訓(xùn)練樣本中包含觀測狀態(tài)和對應(yīng)的狀態(tài)序列
a.轉(zhuǎn)移概率
b.發(fā)射概率
c.初始狀態(tài)矩陣
根據(jù)訓(xùn)練樣本的初始值頻數(shù)計(jì)算概率
(2)Baum-Welch算法(EM算法)
????后面在EM算法那一篇博客進(jìn)行講解
預(yù)測(標(biāo)注)問題
(1)近似算法
? ? 但是近似算法的缺點(diǎn)是不能保證預(yù)測的狀態(tài)序列整體是最有可能出現(xiàn)的序列,因?yàn)樯鲜龇椒ǖ玫降臓顟B(tài)序列中可能存在轉(zhuǎn)移概率為0的相鄰狀態(tài)。
(2)維特比算法
? ? 維特比算法實(shí)際是使用動態(tài)規(guī)劃解決HMM預(yù)測問題廉沮。
參考文獻(xiàn)
(1)http://www.52nlp.cn/tag/隱馬爾可夫模型