一、hmm隱馬爾可夫模型分詞、詞性標註、命名實體識別
hmm是用來描述隱含未知引數的統計模型,經典的例子:乙個東京的朋友每天根據天氣決定當天的活動中的一種,我每天只能在twitter上看到她發的「今前天去公園散步了、昨天購物、今天清理房間了!」,那麼我可以根據她發的推特推斷東京這三天的天氣。在這個例子裡,觀測狀態序列是活動,隱藏狀態序列是天氣。
任何乙個hmm都可以通過下列五元組描述:
:param obs: 觀測序列
:param states: 隱藏狀態序列
:param start_p: 初始狀態概率(隱藏狀態,天氣)
:param trans_p:狀態轉移矩陣概率 (隱藏狀態、)
:param 觀測序列概率(在時刻t隱藏狀態條件下,生成觀測序列的概率)
用python**來描述如下:
求解最可能的天氣:
維特比演算法:實際是用動態規劃解隱馬爾可夫模型**問題,即用動態規劃求概率最大路徑(最優路徑)。這時一條路徑對應著乙個狀態序列。
求解最可能的隱藏狀態序列是hmm的三個典型問題之
一、通常用維特比演算法解決。維特比演算法就是求解hmm上的最短路徑(-log(prob),也即是最大概率)的演算法
思路如下:第一天天晴還是下雨可以算出來:
1、定義v[時間][今天天氣] = 概率,注意今年天天氣指的是,前幾天的天氣確定下來了(概率最大)今天天氣是x的概率,這裡的概率 就是乙個累乘的概率
2、因為第一天我的朋友去散步了,所以第一天下雨的概率v[第一天][下雨] = 初始概率[下雨]*觀測概率[下雨][散步] = 0.6*0.1=0.06,同理可得v[第一天][天晴] = 0.24。因為第一天朋友出門了,她一般喜歡在
晴天的時候散步,所以第一天天晴的概率比較大,直覺上來看也是這樣。
3、從第二天開始,對於這種每天天氣y,都有前一天天氣是x的概率*x轉移到y的概率*y天氣下朋友進行這天這種活動的概率。因為前一天天氣x有兩種可能,所以y的概率有兩個,選取其中較大乙個作為v[第二天][天氣y]的概率,同時將今天的天氣加入到結果序列中
4、比較v[最後一天][下雨]和[最後一天][天晴]的概率,找出較大的哪乙個對應的序列,就是最終結果。
只需從時刻t=1開始,遞推地計算在時刻t狀態為i的各條部分路徑的最大概率,直至得到時刻t=t狀態為i的各條路徑的最大概率。時刻t=t的最大概率即為最優路徑的概率。
具體hmm應用在分詞系統,可以將天氣當成「標籤」,活動當成「字或者詞」。那麼nlp幾個問題可以轉化為:
詞性標註:給定乙個詞的序列(句子),找出最可能的詞性序列(標籤是詞性)。
分詞:給定乙個字的序列,找出最可能的標籤序列(bmes),比如結巴分詞目前就是利用bmes標籤來分詞的,
命名實體識別:給定乙個詞的序列,找出最可能的標籤序列(內外符號:[內]表示詞屬於命名實體,[外]表示不屬於)。如ictclas實現的人名識別、翻譯人名識別、地名識別都是用同乙個tagger實現的。
自然語言處理之 命名實體識別 1
命名實體識別是定位文件中的專有名詞或命名實體的過程,而且這些不同的命名實體被分成了不同的類別,如 人名,地名,機構名等。可以使用斯坦福標註器來實現ner。如果命名實體存在,就用ne標記來標註。import nltk nltk.download maxent ne chunker sentences1...
HMM與分詞 詞性標註 命名實體識別
hmm 隱馬爾可夫模型 是用來描述隱含未知引數的統計模型,舉乙個經典的例子 乙個東京的朋友每天根據天氣決定當天的活動中的一種,我每天只能在twitter上看到她發的推 啊,我前天公園散步 昨天購物 今天清理房間了!那麼我可以根據她發的推特推斷東京這三天的天氣。在這個例子裡,顯狀態是活動,隱狀態是天氣...
Python自然語言處理之分詞原理
入坑自然語言處理,最基本的就是要做文字挖掘,而首先要做的就是文字的預處理。自然語言處理的主要流程可以表示為 文字 分句 分詞 詞性標註 短語分析 句法分析 語義分析 語篇分析 理解 分句這部分一般有標點符號分割,便於處理。於是首先要做的就是分詞。英文單詞天然有空格隔開容易按照空格分詞,但是也有時候需...