在中文分詞里提到了分詞時(shí)是否使用隱馬爾克夫模型山橄,這里就講一下什么是隱馬爾克夫模型
馬爾可夫模型
事物在一段時(shí)間里的變化模式(規(guī)律)
比如知道今天的天氣情況,推測(cè)明天的天氣情況澳窑,這叫1階馬爾可夫模型,通過昨天與今天的天氣情況户盯,推測(cè)明天的天氣情況屯伞,這叫2階馬爾可夫模型,
通過前n天的天氣情況挣磨,推測(cè)明天的天氣情況雇逞,這叫n階馬爾可夫模型荤懂。
隱馬爾可夫模型
繼續(xù)舉例,比如你的異地朋友有三大愛好塘砸,散步节仿,購物,打掃衛(wèi)生掉蔬,他每天選擇做什么只根據(jù)當(dāng)天什么樣的天氣廊宪,每次打電話他都會(huì)告訴你今天做了什么。這時(shí)你來猜測(cè)朋友當(dāng)?shù)氐奶鞖狻?/p>
當(dāng)天天氣對(duì)于你來說是隱藏的女轿,“散步箭启,購物,打掃衛(wèi)生”這些都是觀察數(shù)據(jù)蛉迹,整個(gè)系統(tǒng)就是隱馬爾可夫模型
如上圖就是一個(gè)簡(jiǎn)單的 HMM册烈,我們假設(shè)第一天下雨的概率為0.6,晴天的概率為0.4婿禽,赏僧,如果今天下雨,那么明天也下雨的概率是0.7扭倾,晴天的概率是0.3淀零,如果今天是晴天,明天也是晴天天的概率是0.6膛壹,下雨的概率是0.4.
如果是雨天驾中,去散步的概率是0.1,去購物的概率是0.3模聋, 去打掃的概率是0.6
如果是晴天肩民,去散步的概率是0.5,去購物的概率是0.4链方, 去打掃的概率是0.1
根據(jù)以上的信息持痰,我們得到了 HMM的一些基本要素:
# 狀態(tài)數(shù)目,兩個(gè)狀態(tài):下雨或晴天
states = ('下雨','晴天')
# 每個(gè)狀態(tài)下可能的觀察值
observations = ('散步', '購物', '打掃')
# 初始狀態(tài)空間的概率分布 π
start_probability = {'下雨': 0.6, '晴天': 0.4}
#與時(shí)間無關(guān)的狀態(tài)轉(zhuǎn)移概率矩陣 A (如果這個(gè)模型定好之后祟蚀,數(shù)據(jù)不會(huì)發(fā)生變化)
transition_probability = {
'下雨' : {'下雨': 0.7, '晴天': 0.3},
'晴天' : {'下雨': 0.4, '晴天': 0.6},
}
# 給定狀態(tài)下工窍,觀察值概率分布,發(fā)射概率 B
emission_probability = {
'下雨' : {'散步': 0.1, '購物': 0.3, '打掃': 0.6},
'晴天' : {'散步': 0.5, '購物': 0.4, '打掃': 0.1},
}
現(xiàn)在,重點(diǎn)是要了解并解決HMM 的三個(gè)問題
問題一:概率計(jì)算問題前酿。也叫評(píng)估問題(Evaluation)患雏。給定模型 λ=(A,B,π) 和觀察序列 O=(o1,o2,o3),計(jì)算在模型λ下觀察序列O出現(xiàn)的概率P(O|λ)
結(jié)合上面列子,問題就是罢维,已知整個(gè)模型淹仑,你朋友告訴你他連續(xù)三天做的事情分別是:散步,購物,收拾匀借。那么取试,根據(jù)模型,計(jì)算產(chǎn)生這些行為的概率是多少怀吻?
解決方法:向前算法
先計(jì)算t=1時(shí)刻瞬浓,
P(散步,下雨) = P(第一天下雨)*P(散步|下雨) = 0.6 * 0.1 = 0.06
P(散步蓬坡,晴天) = P(第一天晴天)*P(散步|晴天) = 0.4 * 0.5 = 0.2
t=2時(shí)刻猿棉, 發(fā)生“購物的概率”
如果t=2下雨:
P(第一天散步,第二天購物屑咳,第二天下雨) =【P(第一天散步萨赁,第一天下雨) * P(第二天下雨 | 第一天下雨)
+ P(第一天散步,第一天晴天) * P(第二天下雨 | 第一天晴天)】
* P(第二天購物 | 第二天下雨)
= [0.06x0.7+0.2*0.4]*0.3
=0.0366
如果t=2晴天:
P(第一天散步兆龙,第二天購物杖爽,第二天晴天) =【P(第一天散步,第一天下雨) * P(第二天晴天 | 第一天下雨)
+ P(第一天散步紫皇,第一天晴天) * P(第二天晴天 | 第一天晴天)】
* P(第二天購物 | 第二天晴天)
= [0.06x0.3+0.2*0.6]*0.4
=0.0552
t=3時(shí)刻慰安,發(fā)生“收拾的概率”
如果t=3 下雨
P(第一天散步,第二天購物聪铺,第三天收拾化焕,第三天下雨)=[P(第一天散步,第二天購物铃剔,第二天下雨) * P(第三天下雨|第二天下雨)
+P(第一天散步撒桨,第二天購物,第二天晴天)* P(第三天下雨|第二天晴天)]
* P(第三天打掃|第三天下雨)
=[0.0366**0.7+0.0552**0.4]*0.6
= 0.02862
如果t=3 晴天
P(第一天散步键兜,第二天購物凤类,第三天收拾,第三天晴天)=[P(第一天散步普气,第二天購物谜疤,第二天下雨) * P(第三天晴天|第二天下雨)
+P(第一天散步,第二天購物棋电,第二天晴天)* P(第三天晴天|第二天晴天)]
* P(第三天打掃|第三天晴天)
=[0.0366**0.3+0.0552**0.6]*0.1
= 0.00441
所以 P(第一天散步茎截,第二天購物苇侵,第三天收拾) = 0.02862 + 0.00441 = 0.03303
從以上公式可以看出后一次的算法都與上一次的有關(guān)赶盔,所以使用遞歸方式,可以很輕松的算出最終結(jié)果
問題二:學(xué)習(xí)問題(Learning)榆浓。已知觀察序列 O=(o1,o2,o3,... Or),估計(jì)模型 λ=(A,B,π) 參數(shù)于未,使得在該模型下觀察序列概率P(O|λ)最大
Baum-Welch 算法
問題三:預(yù)測(cè)問題也稱為解碼問題(decoding)。已知模型 λ=(A,B,π) 和觀察序列 O=(o1,o2,o3,... Or) ,求對(duì)給定的觀察序列條件概率 P(I|O)最大的狀態(tài)序列 I=(i1,i2,i3, ... ir)。 即給定觀察序列烘浦,求最有可能的對(duì)應(yīng)的狀態(tài)序列抖坪。
結(jié)合上面列子,問題就是闷叉,已知整個(gè)模型擦俐,你朋友告訴你他連續(xù)三天做的事情分別是:散步,購物握侧,收拾蚯瞧。那么,根據(jù)模型品擎,這三天怎么樣的天氣才最有可能讓她做這樣的事情埋合?
解法,解最大似然路徑問題
1.第一天萄传,散步甚颂。
當(dāng)?shù)谝惶焓乔缣鞎r(shí),去散步的概率最大秀菱,為0.4 * 0.5振诬,高于下雨的0.6 * 0.1
2.第二天, 購物衍菱。
這時(shí)我們要分別求出第二天是晴天贷揽,下雨的最大概率,顯然梦碗,要取得取大值禽绪,第一天必須是晴天
第二天是晴天的最大概率值:
P2(晴天) = P(散步|第一天是晴天)P(第二天晴天|第一天晴天)P(購物|第二天是晴天)
= 0.4 * 0.5 * 0.6 * 0.4
= 0.048
第二天是下雨的最大概率值 :
P2(下雨) = P(散步|第一天是晴天)P(第二天雨天|第一天晴天)P(購物|第二天是雨天)
= 0.4 * 0.5 * 0.4 * 0.3
= 0.024
所以第二天是睛天去購物的概率最大
3.第三天,打掃洪规。
同樣印屁,我們要求出第三天是晴天,下雨的最大概率斩例。同樣雄人,要有最大值,第二天必須是晴天念赶。
第三天是晴天的最大概率值 :
P3(晴天) = P2(晴天) * P(第三天晴天|第二天晴天) * P(打掃|第三天是晴天)
= 0.048 * 0.6 * 0.1
= 0.00288
第三天是雨天的最大概率值 :
P3(雨天) = P2(晴天) * P(第三天雨天|第二天晴天) * P(打掃|第三天是雨天)
= 0.048 * 0.3 * 0.6
= 0.00864
所以由結(jié)果可以看出础钠,第三天是雨天去打掃的概率最大
所以最終的天氣序列為:晴天-下雨-下雨
隱馬爾克夫模型在分詞中的應(yīng)用
隱馬爾可夫模型是一個(gè)五元組:
S:狀態(tài)集合:即所有可能的狀態(tài)s1,s2,…,sn所組成的集合。
O:觀察序列:即實(shí)際存在的一個(gè)狀態(tài)的有向序列叉谜,如狀態(tài)o1,o2,…,on旗吁,注意狀態(tài)是存在順序的。
A:狀態(tài)轉(zhuǎn)移分布停局,即S中各元素中很钓,兩兩之間轉(zhuǎn)移的概率值香府。比如當(dāng)前是s2,下一個(gè)狀態(tài)是s9的轉(zhuǎn)移概率為s2,9(小于1)码倦。
B:每種狀態(tài)出現(xiàn)的概率分布企孩。
π:初始的狀態(tài)分布
HMM模型有三個(gè)主要用途,沒有例子可能比較難于理解袁稽,分詞示例:
1.參數(shù)學(xué)習(xí)
模型沒有建立前勿璃,有已經(jīng)分好詞的部分語料。利用現(xiàn)有語料訓(xùn)練模型推汽,得到各參數(shù)的值蝗柔。我們使用最簡(jiǎn)單的HMM(設(shè)S由四種狀態(tài)構(gòu)成:詞頭,詞中民泵、詞尾癣丧、單字成詞),可以這樣做:
假如訓(xùn)練語料有兩句話:
我 愛 你 程序員栈妆。
他們 兩個(gè) 人 是 半斤八兩胁编。
a. O是觀察序列,本例中鳞尔,就是:“我嬉橙、愛、你寥假、程市框、序、員糕韧、他枫振、們、兩萤彩、個(gè)粪滤、人、是雀扶、半杖小、斤、八愚墓、兩”這16個(gè)字予权。
b. S由四種狀態(tài)構(gòu)成:詞頭(如“程”),詞中(如“序”)浪册、詞尾(如“員”)扫腺、單字成詞(如“愛”、“你”)
c. A即由一個(gè)狀態(tài)轉(zhuǎn)移到另一個(gè)狀態(tài)的概率集合议经,本例共有8種狀態(tài)
- 單字成詞->單字成詞斧账,如a我單單=1“我”后面一定是單字成詞
- 單字成詞->詞頭谴返,如a我單頭=0“我”后面一定不是詞頭煞肾,而a你單頭=1
- 詞頭->詞中
- 詞頭->詞尾
- 詞中->詞尾
- 詞中->詞中
- 詞尾->詞頭
- 詞尾->單字成詞
d. B由各狀態(tài)的概率分布構(gòu)成咧织,如b我單=1(“我”一定單字成詞)。
e. π由初始狀態(tài)的概率構(gòu)成籍救,此例中為π我=1/2(以“我”開頭的概率為1/2)习绢,π他=1/2(以“他”開頭的概率為1/2)。
2.評(píng)價(jià)問題
以上面一個(gè)問題的參數(shù)為基礎(chǔ)蝙昙,評(píng)估第一句話:我 愛 你 程序員闪萄。
“我”開頭的概率為π我=1/2,“我”轉(zhuǎn)移到“愛”的概率為a我單=1奇颠,“愛”到“你”的概率為a單單=1败去,“你”到“程”的概率為a單頭=1,“你”到“序”的概率為a頭中=1烈拒,“序”到“員”的概率為a中尾=1圆裕,而本例(因?yàn)樽痔伲總€(gè)字只出現(xiàn)一次)中所有的b都為1荆几,所以該句的概率為:
Pv=π我b我單 a我單單 b愛單a愛單單b你單 a你單頭 b程頭a程頭中b序中a序中尾*b員尾
注:至于數(shù)值越界等非原理問題這里就不詳解了吓妆,請(qǐng)大家自己找資料。
3.分詞問題
比如還以第一個(gè)問題的參數(shù)為基礎(chǔ)吨铸,來解碼還沒有分詞的句子:我愛人是程序員行拢。
因?yàn)槭鬃质恰拔摇保允恰八钡那闆r被排除诞吱。
π我=1/2舟奠,
“我”后面是單字的概率為1,a我單=1(即只能是單字)房维,其它情況的概率為0
“愛”后面是單字的概率為1鸭栖,a愛單=1,其它情況的概率為0
“人”后面是單字的概率為1握巢,a人單=1晕鹊,其它情況的概率為0
“是”后面是詞頭的概率為1,a是頭=1暴浦,其它情況的概率為0
“程”后面是詞中的概率為1溅话,a程中=1,其它情況的概率為0
“序”后面是詞尾的概率為1歌焦,a序尾=1飞几,其它情況的概率為0
所有分詞的可能性是很多的,需要采用動(dòng)態(tài)規(guī)劃的算法独撇,這里就不詳述了屑墨,只給出其中三種可能作為示例:
a. “我”為開頭躁锁,“愛”是單字成詞,“人”是單字成詞卵史,“是”是單字成詞战转,“程”是詞頭,“序”是詞中以躯,“員”是詞尾:
P1= π我b我單a我單單b愛單a愛單單b人單a人單單b是單a是單頭b程頭a程頭中b序中a序中尾*b員尾
=1/2111111111111*1=1/2
b. “我”為開頭槐秧,“愛”是詞頭,“人”是詞尾忧设,“是”是單字成詞刁标,“程”是詞頭,“序”是詞中址晕,“員”是詞尾:
P1= π我b我單a我單頭b愛頭a愛頭尾b人尾a人尾單b是單a是單頭b程頭a程頭中b序中a序中尾*b員尾
=1/2100000111111*1=0
c. “我”為開頭膀懈,“愛”是詞頭,“人”是詞中谨垃,“是”是詞尾启搂,“程”是詞頭,“序”是詞中乘客,“員”是詞尾:
P1= π我b我單a我單頭b愛頭a愛頭尾b人中a人中尾b是尾a是尾頭b程頭a程頭中b序中a序中尾*b員尾
=1/2100000001111*1=0