一 馬爾科夫模型
? 每個狀態(tài)只依賴之前有限個狀態(tài)
– N階馬爾科夫:依賴之前n個狀態(tài)
– 1階馬爾科夫(即《中文分詞基礎(chǔ)》中的二元模型):僅僅依賴前一個狀態(tài)
? p(w1,w2,w3,……,wn) = p(w1)p(w2|w1)p(w3|w1,w2)……p(wn|w1,w2,……,wn-1)
? =p(w1)p(w2|w1)p(w3|w2)……p(wn|wn-1)
? 例如:
? p(w1=今天,w2=我活孩,w3=寫映穗,w4=了崔列,w5=一個,w6=程序)
? =p(w1=今天)p(w2=我|w1=今天)p(w3=寫|w2=我)……p(w6=程序|w5=一個)
總結(jié):
? 參數(shù)(重要的3個概念)
– 狀態(tài)横侦,由數(shù)字表示奕塑,假設(shè)共有M個
– 初始概率,由?? k 表示
如“時光荏苒妒蛇,歲月如梭”,在100篇文章中楷拳,“時光”開頭的文章共有10篇绣夺,則初始概率π(時光)= 10/100
– 狀態(tài)轉(zhuǎn)移概率,由a k,?? 表示
p(荏苒|時光)= 荏苒緊跟在時光后面的次數(shù)/所有文章(語料庫)里“時光”的次數(shù)
例子:
? 天氣
– 狀態(tài)定義
? {晴天欢揖, 雨天陶耍, 多云}
– 狀態(tài)轉(zhuǎn)移概率a k,??
? P(晴天|雨天), P(雨天|多云)
– 初始概率?? k
? P(晴天)她混, P(雨天)烈钞, P(多云)
馬爾科夫模型參數(shù)估計
? 最大似然法(策略+算法)
– 狀態(tài)轉(zhuǎn)移概率a k,??
? P(St+1=l|St=k)=l緊跟k出現(xiàn)的次數(shù)/k出現(xiàn)的總次數(shù)
– 初始概率?? k
? P(S1=k)=k作為序列開始的次數(shù)/觀測序列總數(shù)
馬爾科夫模型應(yīng)用
? 天氣預(yù)測
– 前幾天天氣情況:晴天、晴天坤按、雨天毯欣、多云
– 接下來一天的天氣預(yù)計怎樣?
– 接下來三天天氣都是晴的可能性臭脓?
小結(jié)
? 馬爾科夫模型是對一個序列數(shù)據(jù)建模酗钞,但有時我們需要對兩個序列數(shù)據(jù)建模,此時只有一個序列的馬爾科夫模型完全不能滿足我們的需求
– 例如:
? 機(jī)器翻譯:源語言序列 <-> 目標(biāo)語言序列
? 語音識別:語音信號序列 <-> 文字序列
? 詞性標(biāo)注:文字序列 <-> 詞性序列
– 寫/一個/程序 ->輸入序列分詞
– Verb/Num/Noun ->輸出序列是詞性:動詞/兩次/名詞
– 拼音糾錯:原始文字序列 <--> 糾正過的文字序列
? 自己的事情自己做
? 自己的事情自已做
二 隱馬爾科夫模型
? 觀察序列O中的數(shù)據(jù)通常是由對應(yīng)的隱藏序列數(shù)據(jù)決定的来累,彼此間相互獨立
? 隱藏序列數(shù)據(jù)間相互依賴砚作,通常構(gòu)成了馬爾科夫序列
– 例如,語音識別中聲波信號每段信號都是相互獨立的,有對應(yīng)的文字決定
– 對應(yīng)的文字序列中相鄰的字相互依賴嘹锁,構(gòu)成Markov鏈
紅色為輸入序列葫录,綠色為輸出序列
? 觀察和隱藏序列共同構(gòu)成隱馬模型
? O(??1 ?? 2 …?? ?? ):觀測序列,??t 只依賴于?? t
? S(?? 1 ?? 2 …?? ?? ):狀態(tài)序列(隱藏序列)领猾,S是Markov序列米同,假設(shè)1階Markov序列求冷,則?? t+1只依賴于??t
HMM參數(shù)
– 狀態(tài),由數(shù)字表示窍霞,假設(shè)共有M個
– 觀測,由數(shù)字表示拯坟,假設(shè)共有N個
– 初始概率但金,由??k 表示 k出現(xiàn)在第一個的概率
– 狀態(tài)轉(zhuǎn)移概率,由 ak,l 表示
ak,l = P(??t+1 = l|??t = k ) k,l = 1,2,…,M
– 發(fā)射概率郁季,由bk(u) 表示,是上圖“這”-“信1”的橋梁冷溃,比如了讀liao還是le
bk(u) = P (Ot = ??|??t = k) ?? = 1,2,…,N k = 1,2,…,M
比如給定“了”,liao=40%,le=60%,所以發(fā)射概率為p(liao|了)=40%
? 初始概率(取概率的Log值)
– BEMS:位置信息
? B(開頭)
? M(中間)
? E(結(jié)尾)
? S(獨立成詞)
– 詞性:
? n 名詞
? nr 人名
? ns 地名
? v 動詞
? vd 副動詞
? vn 名動詞
比如“廣州本田雅閣汽車”->廣州:BE 本田雅閣:4個漢字組成的詞語BMME(中間用M表示)
未登錄詞“雅閣汽車”在語料庫中不存在梦裂,將其一個字為一個詞切分似枕,jieba分詞然后通過HMM來解析,則輸入序列為“雅”“閣”“汽”“車”年柠,輸出序列為<B,n>,<E,n>,<B,n>,<E,n>凿歼,則得到“雅閣”、“汽車”
如果輸出序列為<B,n>,<E,n>,<M,n>,<S,n>冗恨,則得到“雅閣汽”答憔、“車”
進(jìn)入jieba-master\jieba\posseg,查看prob_start.py掀抹,可以看到文章以n開頭的概率大于量詞開頭的概率虐拓,幾乎都是B開頭,ME幾乎為0傲武,只不過為了平衡蓉驹,給了一個很小的默認(rèn)值而已
? 轉(zhuǎn)移概率
查看prob_trans.py
? 發(fā)射概率
查看prob_emit.py,比如由(B揪利,a)發(fā)射成某一個漢字的概率态兴,比如嘆詞詞性,幾乎就為啊唉嗚哇
HMM生成過程
? 先生成第一個狀態(tài)疟位,然后依次由當(dāng)前狀態(tài)生成下一個狀態(tài)诗茎,最后每個狀態(tài)發(fā)射出一個觀察值
求兩個序列的聯(lián)合概率P(o1:t,s1:t),等于所有轉(zhuǎn)移概率和發(fā)射概率的連乘(初始概率所有的狀態(tài)轉(zhuǎn)移概率發(fā)射概率),此時圖已生成完成献汗,初始概率πk和狀態(tài)轉(zhuǎn)移概率敢订、發(fā)射概率都將不再發(fā)生變化。
? 三個基本問題
– 模型參數(shù)估計
M個狀態(tài)就有M個初始概率 狀態(tài)轉(zhuǎn)移概率為一個M*M的矩陣 發(fā)射概率個數(shù)為M個狀態(tài)和N個觀測的乘積
– 給定模型??罢吃,計算一個觀測序列出現(xiàn)的概率P??(O)
O為HMM生成過程中序列O
– 給定模型??和觀測序列??楚午,找到最優(yōu)的隱藏狀態(tài)序列(切分方案)
前向 - 后向算法
前向概率:
后向概率:t時刻k的概率,
無論前M個狀態(tài)如何轉(zhuǎn)移尿招,只要t時刻為K的概率矾柜,然后對1~t-1時刻的所有概率進(jìn)行加和得到阱驾,這種方式過于粗暴了,實踐復(fù)雜度太高
前向概率公式的優(yōu)化
后向概率
其他概率
隱馬模型參數(shù)估計
HMM的應(yīng)用
? 給定O怪蔑,尋找最優(yōu)的S
? 尋找一條最優(yōu)的路徑
? 如果比較所有路徑:遍歷所有的S里覆,算出一個最大的,則時間復(fù)雜度是?? ?? 缆瓣,不可接受喧枷!
HMM應(yīng)用-viterbi算法
? 動態(tài)規(guī)劃,在t+1位置重用t的結(jié)果