丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給AI研習(xí)社
發(fā)送

0

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

本文作者: AI研習(xí)社 2017-04-21 15:34
導(dǎo)語:如何用隱馬爾科夫模型處理中文分詞?

雷鋒網(wǎng)按:本文作者劉鵬,原文載于作者個人博客,雷鋒網(wǎng)已獲授權(quán)。

  什么問題用HMM解決

現(xiàn)實生活中有這樣一類隨機現(xiàn)象,在已知現(xiàn)在情況的條件下,未來時刻的情況只與現(xiàn)在有關(guān),而與遙遠(yuǎn)的過去并無直接關(guān)系。

比如天氣預(yù)測,如果我們知道“晴天,多云,雨天”之間的轉(zhuǎn)換概率,那么如果今天是晴天,我們就可以推斷出明天是各種天氣的概率,接著后天的天氣可以由明天的進(jìn)行計算。這類問題可以用 Markov 模型來描述。

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

markov

進(jìn)一步,如果我們并不知道今天的天氣屬于什么狀況,我們只知道今明后三天的水藻的干燥濕潤狀態(tài),因為水藻的狀態(tài)和天氣有關(guān),我們想要通過水藻來推測這三天的真正的天氣會是什么,這個時候就用 Hidden Markov 模型來描述。

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

hmm

HMM 模型的本質(zhì)是從觀察的參數(shù)中獲取隱含的參數(shù)信息,并且前后之間的特征會存在部分的依賴影響。

  我們從如何進(jìn)行中文分詞的角度來理解HMM

根據(jù)可觀察狀態(tài)的序列找到一個最可能的隱藏狀態(tài)序列

中文分詞,就是給一個漢語句子作為輸入,以“BEMS”組成的序列串作為輸出,然后再進(jìn)行切詞,進(jìn)而得到輸入句子的劃分。其中,B代表該字是詞語中的起始字,M代表是詞語中的中間字,E代表是詞語中的結(jié)束字,S則代表是單字成詞。

例如:給個句子

小明碩士畢業(yè)于中國科學(xué)院計算所

得到BEMS組成的序列為

BEBEBMEBEBMEBES

因為句尾只可能是E或者S,所以得到切詞方式為

BE/BE/BME/BE/BME/BE/S

進(jìn)而得到中文句子的切詞方式為

小明/碩士/畢業(yè)于/中國/科學(xué)院/計算/所

這是個HMM問題,因為你想要得到的是每個字的位置,但是看到的只是這些漢字,需要通過漢字來推出每個字在詞語中的位置,并且每個字屬于什么狀態(tài)還和它之前的字有關(guān)。
此時,我們需要根據(jù)可觀察狀態(tài)的序列找到一個最可能的隱藏狀態(tài)序列。

  五元組,三類問題,兩個假設(shè)

五元組

通過上面的例子,我們可以知道 HMM 有以下5個要素。

觀測序列-O:小明碩士畢業(yè)于中國科學(xué)院計算所

狀態(tài)序列-S:BEBEBMEBEBMEBES

初始狀態(tài)概率向量-π:句子的第一個字屬于{B,E,M,S}這四種狀態(tài)的概率

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

狀態(tài)轉(zhuǎn)移概率矩陣-A:如果前一個字位置是B,那么后一個字位置為BEMS的概率各是多少

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

觀測概率矩陣-B:在狀態(tài)B的條件下,觀察值為耀的概率,取對數(shù)后是-10.460

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

備注:示例數(shù)值是對概率值取對數(shù)之后的結(jié)果,為了將概率相乘的計算變成對數(shù)相加,其中-3.14e+100作為負(fù)無窮,也就是對應(yīng)的概率值是0

三類問題

當(dāng)通過五元組中某些已知條件來求未知時,就得到HMM的三類問題:

● 似然度問題:參數(shù)(O,π,A,B)已知的情況下,求(π,A,B)下觀測序列O出現(xiàn)的概率。(Forward-backward算法)

● 解碼問題:參數(shù)(O,π,A,B)已知的情況下,求解狀態(tài)值序列S。(viterbi算法)

● 學(xué)習(xí)問題:參數(shù)(O)已知的情況下,求解(π,A,B)。(Baum-Welch算法)

中文分詞這個例子屬于第二個問題,即解碼問題。

我們希望找到 s_1,s_2,s_3,... 使 P (s_1,s_2,s_3,...|o_1,o_2,o_3....) 達(dá)到最大。
意思是,當(dāng)我們觀測到語音信號 o_1,o_2,o_3,... 時,我們要根據(jù)這組信號推測出發(fā)送的句子 s_1,s_2,s_3,....,顯然,我們應(yīng)該在所有可能的句子中找最有可能性的一個。

兩個假設(shè)

利用貝葉斯公式得到:

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

這里需要用到兩個假設(shè)來進(jìn)一步簡化上述公式

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

有限歷史性假設(shè): si 只由 si-1 決定

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

獨立輸出假設(shè):第 i 時刻的接收信號 oi 只由發(fā)送信號 si 決定

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

有了上面的假設(shè),就可以利用算法 Viterbi 找出目標(biāo)概率的最大值。

  Viterbi算法

根據(jù)動態(tài)規(guī)劃原理,最優(yōu)路徑具有這樣的特性:如果最優(yōu)路徑從結(jié)點 i_{t}^ 到終點 i_{T}^,那么這兩點之間的所有可能的部分路徑必須是最優(yōu)的。
依據(jù)這一原理,我們只需從時刻 t=1 開始,遞推地計算在時刻 t 狀態(tài)為 i 的各條部分路徑的最大概率,直至得到時刻 t=T 狀態(tài)為 i 的各條路徑的最大概率 P^,最優(yōu)路徑的終結(jié)點 i_{T}^ 也同時得到。之后,為了找出最優(yōu)路徑的各個結(jié)點,從終結(jié)點 i_{T}^ 開始,由后向前逐步求得結(jié)點 i_{T-1}^...,i_{1}^,進(jìn)而得到最優(yōu)路徑 I^=i_{1}^...,i_{T}^,這就是維特比算法.

舉個栗子:

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

觀測序列 O=(紅,白,紅),想要求狀態(tài)序列S。

需要定義兩個變量:

● weight[3][3],行3是狀態(tài)數(shù)(1,2,3),列3是觀察值個數(shù)(紅,白,紅)。意思是,在時刻 t 狀態(tài)為 i 的所有單個路徑中的概率最大值。

● path[3][3],意思是,在時刻 t 狀態(tài)為 i 的所有單個路徑中概率最大的那條路徑,它的第 t-1 個結(jié)點是什么。比如 path[0][2]=1, 則代表 weight[0][2] 取到最大時,前一個時刻的狀態(tài)是 1.

1.初始化

t=1 時的紅,分別是在狀態(tài) 1,2,3 的條件下觀察得來的概率計算如下:

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

此時 path 的第一列全是 0.

2.遞歸

t=2 時的白,如果此時是在 1 的條件下觀察得來的話,先計算此時狀態(tài)最可能是由前一時刻的哪個狀態(tài)轉(zhuǎn)換而來的,取這個最大值,再乘以 1 條件下觀測到 白 的概率,同時記錄 path矩陣:如下圖 weight[0][1]=0.028,此值來源于前一時刻狀態(tài)是3,所以,

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

3.終止

在 t=3 時的最大概率 P^=0.0147,相應(yīng)的最優(yōu)路徑的終點是 i_3^=3.

4.回溯

由最優(yōu)路徑的終點 3 開始,向前找到之前時刻的最優(yōu)點:

在 t=2 時,因 i_3^=3,狀態(tài) 3 的最大概率 P=0.0147,來源于狀態(tài) 3,所以 i_2^=3.

在 t=1 時,因 i_2^=3,狀態(tài) 3 的最大概率 P=0.042,來源于狀態(tài) 3,所以 i_1^=3.

最后得到最優(yōu)路徑為 I^=(i_{1}^,i_{2}^,i_{3}^)=(3,3,3)

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

  用Viterbi算法求解中文分詞問題

根據(jù)上面講的 HMM 和 Viterbi,接下來對中文分詞這個問題,構(gòu)造五元組并用算法進(jìn)行求解。

InitStatus:π

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

TransProbMatrix:A

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

EmitProbMatrix:B

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

Viterbi求解

經(jīng)過這個算法后,會得到兩個矩陣 weight 和 path:

二維數(shù)組 weight[4][15],4是狀態(tài)數(shù)(0:B,1:E,2:M,3:S),15是輸入句子的字?jǐn)?shù)。比如 weight[0][2] 代表 狀態(tài)B的條件下,出現(xiàn)'碩'這個字的可能性。

二維數(shù)組 path[4][15],4是狀態(tài)數(shù)(0:B,1:E,2:M,3:S),15是輸入句子的字?jǐn)?shù)。比如 path[0][2] 代表 weight[0][2]取到最大時,前一個字的狀態(tài),比如 path[0][2] = 1, 則代表 weight[0][2]取到最大時,前一個字(也就是明)的狀態(tài)是E。記錄前一個字的狀態(tài)是為了使用viterbi算法計算完整個 weight[4][15] 之后,能對輸入句子從右向左地回溯回來,找出對應(yīng)的狀態(tài)序列。

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

先對 weight 進(jìn)行初始化,

使用 InitStatus 和 EmitProbMatrix 對 weight 二維數(shù)組進(jìn)行初始化。

由 EmitProbMatrix 可以得出

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

所以可以初始化 weight[i][0] 的值如下:

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

注意上式計算的時候是相加而不是相乘,因為之前取過對數(shù)的原因。

然后遍歷找到 weight 每項的最大值,同時記錄了相應(yīng)的 path

//遍歷句子,下標(biāo)i從1開始是因為剛才初始化的時候已經(jīng)對0初始化結(jié)束了

for(size_t i = 1; i < 15; i++)

{

    // 遍歷可能的狀態(tài)

    for(size_t j = 0; j < 4; j++) 

    {

        weight[j][i] = MIN_DOUBLE;

        path[j][i] = -1;

        //遍歷前一個字可能的狀態(tài)

        for(size_t k = 0; k < 4; k++)

        {

            double tmp = weight[k][i-1] + _transProb[k][j] + _emitProb[j][sentence[i]];

            if(tmp > weight[j][i]) // 找出最大的weight[j][i]值

            {

                weight[j][i] = tmp;

                path[j][i] = k;

            }

        }

    }

}

如此遍歷下來,weight[4][15] 和 path[4][15] 就都計算完畢。

確定邊界條件和路徑回溯

邊界條件如下:

對于每個句子,最后一個字的狀態(tài)只可能是 E 或者 S,不可能是 M 或者 B。
所以在本文的例子中我們只需要比較 weight[1(E)][14] 和 weight[3(S)][14] 的大小即可。

在本例中:

weight[1][14] = -102.492;

weight[3][14] = -101.632;

所以 S > E,也就是對于路徑回溯的起點是 path[3][14]。

進(jìn)行回溯,得到序列 

SEBEMBEBEMBEBEB。

再進(jìn)行倒序,得到 

BEBEBMEBEBMEBES

接著進(jìn)行切詞得到 

BE/BE/BME/BE/BME/BE/S

最終就找到了分詞的方式 

小明/碩士/畢業(yè)于/中國/科學(xué)院/計算/所

  HMM還有哪些應(yīng)用

HMM不只用于中文分詞,如果把 S 換成句子,O 換成語音信號,就變成了語音識別問題,如果把 S 換成中文,O 換成英文,就變成了翻譯問題,如果把 S 換成文字,O 換成圖像,就變成了文字識別問題,此外還有詞性標(biāo)注等等問題。

對于上述每種問題,只要知道了五元組中的三個參數(shù)矩陣,就可以應(yīng)用 Viterbi 算法得到結(jié)果。

雷鋒網(wǎng)相關(guān)文章:

深入NLP———看中文分詞如何影響你的生活點滴 | 硬創(chuàng)公開課

深度學(xué)習(xí)將會變革NLP中的中文分詞

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

一篇文章教你用隱馬爾科夫模型實現(xiàn)中文分詞

分享:
相關(guān)文章

編輯

聚焦數(shù)據(jù)科學(xué),連接 AI 開發(fā)者。更多精彩內(nèi)容,請訪問:yanxishe.com
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說