導航:首頁 > 編程語言 > 隱馬爾科夫模型python

隱馬爾科夫模型python

發布時間:2023-06-08 10:25:05

A. jieba分詞詳解

「結巴」分詞是一個python 中文分片語件,參見 https://github.com/fxsjy/jieba
可以對中文文本進行 分詞、詞性標注、關鍵詞抽取 等功能,並且支持自定義詞典。

本文包括以下內容:
1、jieba分詞包的 安裝
2、jieba分詞的 使用教程
3、jieba分詞的 工作原理與工作流程
4、jieba分詞所涉及到的 HMM、TextRank、TF-IDF等演算法介紹

可以直接使用pip來進行安裝:
sudo pip install jieba
或者
sudo pip3 install jieba

關鍵詞抽取有兩種演算法,基於TF-IDF和基於TextRank:

jieba分詞有三種不同的分詞模式: 精確模式、全模式和搜索引擎模式

對應的,函數前加l即是對應得到list結果的函數:

精確模式是最常用的分詞方法,全模式會將句子中所有可能的詞都列舉出來,搜索引擎模式則適用於搜索引擎使用。具體的差別可在下一節工作流程的分析中詳述。

在上述每個函數中,都有名為HMM的參數。這一項表示是否在分詞過程中利用HMM進行新詞發現。關於HMM,本文附錄中將簡述相關知識。

另外分詞支持自定義字典,詞典格式和 dict.txt 一樣,一個詞佔一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。
具體使用方法為:

關鍵詞抽取的兩個函數的完整參數為:

可以通過

來打開或關閉並行分詞功能。
個人感覺一般用不到,大文件分詞需要手動實現多進程並行,句子分詞也不至於用這個。

jieba分詞主要通過詞典來進行分詞及詞性標注,兩者使用了一個相同的詞典。正因如此,分詞的結果優劣將很大程度上取決於詞典,雖然使用了HMM來進行新詞發現。
jieba分詞包整體的工作流程如下圖所示:

下面將根據源碼詳細地分析各個模塊的工作流程。

在之後幾節中,我們在 藍色的方框 中示範了關鍵步驟的輸出樣例或詞典文件的格式樣例。在本節中都採用類似的表示方式。

jieba分詞中,首先通過對照典生成句子的 有向無環圖 ,再根據選擇的模式不同,根據詞典 尋找最短路徑 後對句子進行截取或直接對句子進行截取。對於未登陸詞(不在詞典中的詞)使用 HMM 進行新詞發現。

詞典的格式應為
word1 freq1 word_type1
word2 freq2 word_type2

其中自定義用戶詞典中詞性word_type可以省略。
詞典在其他模塊的流程中可能也會用到,為方便敘述,後續的流程圖中將會省略詞典的初始化部分。

圖b演示了搜索引擎模式的工作流程,它會在精確模式分詞的基礎上,將長詞再次進行切分。

在這里我們假定讀者已經了解HMM相關知識,如果沒有可先行閱讀下一章內容中的HMM相關部分或者跳過本節。

在jieba分詞中,將字在詞中的位置B、M、E、S作為隱藏狀態,字是觀測狀態,使用了詞典文件分別存儲字之間的表現概率矩陣(finalseg/prob_emit.py)、初始概率向量(finalseg/prob_start.py)和轉移概率矩陣(finalseg/prob_trans.py)。這就是一個標準的 解碼問題 ,根據概率再利用 viterbi演算法 對最大可能的隱藏狀態進行求解。

詞性分析部分與分詞模塊用了同一個基礎的分詞器,對於詞典詞的詞性,將直接從詞典中提取,但是對於新詞,詞性分析部分有一個 專屬的新詞及其詞性的發現模塊
用於詞性標注的HMM模型與用於分詞的HMM模型相似,同樣將文字序列視為可見狀態,但是隱藏狀態不再是單單的詞的位置(B/E/M/S),而變成了詞的位置與詞性的組合,如(B,v)(B,n)(S,n)等等。因此其初始概率向量、轉移概率矩陣和表現概率矩陣和上一節中所用的相比都要龐大的多,但是其本質以及運算步驟都沒有變化。
具體的工作流程如下圖所示。

jieba分詞中有兩種不同的用於關鍵詞抽取的演算法,分別為TextRank和TF-IDF。實現流程比較簡單,其核心在於演算法本身。下面簡單地畫出實現流程,具體的演算法可以參閱下一章內容。

TextRank方法默認篩選詞性,而TF-IDF方法模型不進行詞性篩選。

在本章中,將會簡單介紹相關的演算法知識,主要包括用於新詞發現的 隱馬爾科夫模型 維特比演算法 、用於關鍵詞提取的 TextRank TF-IDF 演算法。

HMM即隱馬爾科夫模型,是一種基於馬爾科夫假設的統計模型。之所以為「隱」,是因為相較於馬爾科夫過程HMM有著未知的參數。在世界上,能看到的往往都是表象,而事物的真正狀態往往都隱含在表象之下,並且與表象有一定的關聯關系。

其中,S、O分別表示狀態序列與觀測序列。

如果讀者還對這部分內容心存疑問,不妨先往下閱讀,下面我們將以一個比較簡單的例子對HMM及解碼演算法進行實際說明與演示,在讀完下一小節之後再回來看這些式子,或許能夠恍然大悟。

下面以一個簡單的例子來進行闡述:
假設小明有一個網友小紅,小紅每天都會在朋友圈說明自己今天做了什麼,並且假設其僅受當天天氣的影響,而當天的天氣也只受前一天天氣的影響。
於小明而言,小紅每天做了什麼是可見狀態,而小紅那裡的天氣如何就是隱藏狀態,這就構成了一個HMM模型。一個HMM模型需要有五個要素:隱藏狀態集、觀測集、轉移概率、觀測概率和初始狀態概率。

即在第j個隱藏狀態時,表現為i表現狀態的概率。式中的n和m表示隱藏狀態集和觀測集中的數量。
本例中在不同的天氣下,小紅要做不同事情的概率也不同, 觀測概率 以表格的形式呈現如下:

其中

除此之外,還需要一個初始狀態概率向量π,它表示了觀測開始時,即t=0時,隱藏狀態的概率值。本例中我們指定 π={0,0,1}

至此,一個完整的 隱馬爾科夫模型 已經定義完畢了。

HMM一般由三類問題:
概率計算問題 ,即給定 A,B,π 和隱藏狀態序列,計算觀測序列的概率;
預測問題 ,也成解碼問題,已知 A,B,π 和觀測序列,求最優可能對應的狀態序列;
學習問題 ,已知觀測序列,估計模型的 A,B,π 參數,使得在該模型下觀測序列的概率最大,即用極大似然估計的方法估計參數。

在jieba分詞中所用的是解碼問題,所以此處對預測問題和學習問題不做深入探討,在下一小節中我們將繼續以本節中的例子為例,對解碼問題進行求解。

在jieba分詞中,採用了HMM進行新詞發現,它將每一個字表示為B/M/E/S分別代表出現在詞頭、詞中、詞尾以及單字成詞。將B/M/E/S作為HMM的隱藏狀態,而連續的各個單字作為觀測狀態,其任務即為利用觀測狀態預測隱藏狀態,並且其模型的 A,B,π 概率已經給出在文件中,所以這是一個標準的解碼問題。在jieba分詞中採用了 Viterbi演算法 來進行求解。

Viterbi演算法的基本思想是: 如果最佳路徑經過一個點,那麼起始點到這個點的路徑一定是最短路徑,否則用起始點到這點更短的一條路徑代替這段,就會得到更短的路徑,這顯然是矛盾的;從起始點到結束點的路徑,必然要經過第n個時刻,假如第n個時刻有k個狀態,那麼最終路徑一定經過起始點到時刻n中k個狀態里最短路徑的點
將時刻t隱藏狀態為i所有可能的狀態轉移路徑i1到i2的狀態最大值記為

下面我們繼續以上一節中的例子來對viterbi演算法進行闡述:
小明不知道小紅是哪裡人,他只能通過小紅每天的活動來推斷那裡的天氣。
假設連續三天,小紅的活動依次為:「睡覺-打游戲-逛街」,我們將據此計算最有可能的天氣情況。

表示第一天為雨天能夠使得第二天為晴天的概率最大(也就是說如果第二天是晴天在最短路徑上的話,第一天是雨天也一定在最短路徑上,參見上文中Viterbi演算法的基本思想)

此時已經到了最後的時刻,我們開始回溯。

其計算過程示意圖如下圖所示。

)的路徑。

TF-IDF(詞頻-逆文本頻率)是一種用以評估字詞在文檔中重要程度的統計方法。它的核心思想是,如果某個詞在一篇文章中出現的頻率即TF高,並且在其他文檔中出現的很少,則認為這個詞有很好的類別區分能力。

其中:

TextRank是一種用以關鍵詞提取的演算法,因為是基於PageRank的,所以先介紹PageRank。
PageRank通過互聯網中的超鏈接關系確定一個網頁的排名,其公式是通過一種投票的思想來設計的:如果我們計算網頁A的PageRank值,那麼我們需要知道哪些網頁鏈接到A,即首先得到A的入鏈,然後通過入鏈給網頁A進行投票來計算A的PR值。其公式為:

其中:

d為阻尼系數,取值范圍為0-1,代表從一定點指向其他任意點的概率,一般取值0.85。
將上式多次迭代即可直到收斂即可得到結果。

TextRank演算法基於PageRank的思想,利用投票機制對文本中重要成分進行排序。如果兩個詞在一個固定大小的窗口內共同出現過,則認為兩個詞之間存在連線。

公式與PageRank的基本相同。多次迭代直至收斂,即可得到結果。
在jieba分詞中,TextRank設定的詞窗口大小為5,將公式1迭代10次的結果作為最終權重的結果,而不一定迭代至收斂。

B. 《Python機器學習經典實例》pdf下載在線閱讀,求百度網盤雲資源

《Python機器學習經典實例》([美] Prateek Joshi)電子書網盤下載免費在線閱讀

資源鏈接:

鏈接:https://pan..com/s/127gBmSIIhTtvV3wDCX90fg

密碼:08r5

書名:Python機器學習經典實例

作者:[美] Prateek Joshi

譯者:陶俊傑

豆瓣評分:5.8

出版社:人民郵電出版社

出版年份:2017-8

頁數:264

內容簡介:

在如今這個處處以數據驅動的世界中,機器學習正變得越來越大眾化。它已經被廣泛地應用於不同領域,如搜索引擎、機器人、無人駕駛汽車等。本書首先通過實用的案例介紹機器學習的基礎知識,然後介紹一些稍微復雜的機器學習演算法,例如支持向量機、極端隨機森林、隱馬爾可夫模型、條件隨機場、深度神經網路,等等。

本書是為想用機器學習演算法開發應用程序的Python 程序員准備的。它適合Python 初學者閱讀,不過熟悉Python 編程方法對體驗示例代碼大有裨益。

作者簡介:

作者簡介:

Prateek Joshi

人工智慧專家,重點關注基於內容的分析和深度學習,曾在英偉達、微軟研究院、高通公司以及矽谷的幾家早期創業公司任職。

譯者簡介:

陶俊傑

長期從事數據分析工作,酷愛Python,每天都和Python面對面,樂此不疲。本科畢業於北京交通大學機電學院,碩士畢業於北京交通大學經管學院。曾就職於中國移動設計院,目前在京東任職。

陳小莉

長期從事數據分析工作,喜歡Python。本科與碩士畢業於北京交通大學電信學院。目前在中科院從事科技文獻與專利分析工作。

C. jieba分詞(R vs. python)

自然語言處理(NLP)是機器學習重要分支之一,主要應用於篇章理解、文本摘要、情感分析、知識圖譜、文本翻譯等領域。而NLP應用首先是對文本進行分詞,當前中文分詞器有Ansj、paoding、盤古分詞等多種,而最基礎的分詞器應該屬於jieba分詞器(比較見下圖)。

下面將分別應用R和python對jieba分詞器在中文分詞、詞性標注和關鍵詞提取領域的應用進行比較。

R實現

通過函數worker()來初始化分詞引擎,使用segment()進行分詞。有四種分詞模式:最大概率法(MP)、隱馬爾科夫模型(HMM)、混合模型(Mix)及索引模型(query),默認為混合模型。具體可查看help(worker).

#install.packages('jiebaR')library(jiebaR)mixseg <- worker()segment( "這是一段測試文本" , mixseg ) #或者用以下操作mixseg['這是一段測試文本']mixseg <= "這是一段測試文本"

python實現

python中需安裝jieba庫,運用jieba.cut實現分詞。cut_all參數為分詞類型,默認為精確模式。

import jiebaseg_list = jieba.cut(u"這是一段測試文本",cut_all = False)print("Full mode: "+ ",".join(seg_list))  #默認精確模式

無論是R還是python都為utf—8編碼。

R實現

可以使用<=.tagger 或者tag 來進行分詞和詞性標注,詞性標注使用混合模型模型分詞,標注採用和 ictclas 兼容的標記法。

words = "我愛北京天安門"tagger = worker("tag") #開啟詞性標注啟發器tagger <= words    #    r        v      ns      ns    # "我"    "愛"  "北京" "天安門"

python實現

#詞性標注import jieba.posseg as psegwords = pseg.cut("我愛北京天安門")for word,flag in words:    print('%s, %s' %(word,flag))

R實現

R關鍵詞提取使用逆向文件頻率(IDF)文本語料庫,通過worker參數「keywords」開啟關鍵詞提取啟發器,topn參數為關鍵詞的個數。

keys = worker("keywords",topn = 5, idf = IDFPATH)keys <= "會議邀請到美國密歇根大學(University of Michigan, Ann Arbor)環境健康科學系副教授奚傳武博士作題為「Multibarrier approach for safe drinking waterin the US : Why it failed in Flint」的學術講座,介紹美國密歇根Flint市飲用水污染事故的發生發展和處置等方面內容。講座後各相關單位同志與奚傳武教授就生活飲用水在線監測系統、美國水污染事件的處置方式、生活飲用水老舊管網改造、如何有效減少消毒副產物以及美國涉水產品和二次供水單位的監管模式等問題進行了探討和交流。本次交流會是我市生活飲用水衛生管理工作洽商機制運行以來的又一次新嘗試,也為我市衛生計生綜合監督部門探索生活飲用水衛生安全管理模式及突發水污染事件的應對措施開拓了眼界和思路。"#結果:#        48.8677        23.4784        22.1402        20.326        18.5354 #      "飲用水"        "Flint"        "衛生"      "水污染"        "生活"

python實現

python實現關鍵詞提取可運用TF-IDF方法和TextRank方法。allowPOS參數為限定范圍詞性類型。

#關鍵詞提取import jieba.analysecontent = u'會議邀請到美國密歇根大學(University of Michigan, Ann Arbor)環境健康科學系副教授奚傳武博士作題為「Multibarrier approach for safe drinking waterin the US : Why it failed in Flint」的學術講座,介紹美國密歇根Flint市飲用水污染事故的發生發展和處置等方面內容。講座後各相關單位同志與奚傳武教授就生活飲用水在線監測系統、美國水污染事件的處置方式、生活飲用水老舊管網改造、如何有效減少消毒副產物以及美國涉水產品和二次供水單位的監管模式等問題進行了探討和交流。本次交流會是我市生活飲用水衛生管理工作洽商機制運行以來的又一次新嘗試,也為我市衛生計生綜合監督部門探索生活飲用水衛生安全管理模式及突發水污染事件的應對措施開拓了眼界和思路。'#基於TF-IDFkeywords = jieba.analyse.extract_tags(content,topK = 5,withWeight = True,allowPOS = ('n','nr','ns'))for item in keywords:        print item[0],item[1]  #基於TF-IDF結果# 飲用水 0.448327672795# Flint 0.219353532163# 衛生 0.203120821773# 水污染 0.186477211628# 生活 0.170049997544

#基於TextRankkeywords = jieba.analyse.textrank(content,topK = 5,withWeight = True,allowPOS = ('n','nr','ns'))for item in keywords:        print item[0],item[1]    #基於TextRank結果:# 飲用水 1.0# 美國 0.570564785973# 奚傳武 0.510738424509# 單位 0.472841889334# 講座 0.443770732053

寫在文後

自然語言處理(NLP)在數據分析領域有其特殊的應用,在R中除了jiebaR包,中文分詞Rwordseg包也非常常用。一般的文本挖掘步驟包括:文本獲取(主要用網路爬取)——文本處理(分詞、詞性標注、刪除停用詞等)——文本分析(主題模型、情感分析)——分析可視化(詞雲、知識圖譜等)。本文是自然語言處理的第一篇,後續將分別總結下應用深度學習Word2vec進行詞嵌入以及主題模型、情感分析的常用NLP方法。

參考資料

Introction · jiebaR 中文分詞 https://qinwenfeng.com/jiebaR/segment.html

知乎:【文本分析】利用jiebaR進行中文分詞 https://zhuanlan.hu.com/p/24882048

雪晴數據網:全棧數據工程師養成攻略 http://www.xueqing.tv/course/73

搜狗實驗室,詞性標注應用 http://www.sogou.com/labs/webservice/

【R文本挖掘】中文分詞Rwordseg http://blog.163.com/zzz216@yeah/blog/static/162554684201412895732586/

D. 隱式馬爾科夫模型 及 Python + HMMlearn的使用

hmmlearn

隱式馬爾科夫模型Hidden Markov Models(HMMs) 是一種通用的概率模型。一個可觀測的變數X的序列被一個內部的隱藏狀態Z所生成。其中,隱藏狀態Z無法被直接觀測。在隱藏狀態之間的轉移被假設是通過 馬爾科夫鏈(Markov chain) 的形式。
模型可以表示為 起始概率向量 和轉移概率矩陣 . 一個觀測量生成的概率可以是關於 的任意分布, 基於當前的隱藏狀態。

HMMs的3個基本問題:

hmmlearn 是Python支持HMMs的包。原來是sklearn的一部分,後來由於介面不一致分成單獨的包了。不過使用起來和sklearn的其他模型類似。

構造HMM model:

初始化的參數主要有 n_components , covariance_type , n_iter 。每個參數的作用我還沒有研究。

通過 fit 方法。
輸入是一個矩陣,包含拼接的觀察序列concatenated sequences of observation (也就是samples),和序列的長度。

EM演算法是背後擬合模型的演算法。基於梯度優化的方法。通常會卡到一個局部極優值上。通常用戶需要用不同的初始化跑多次 fit ,然後選擇分數最高的模型。

分數通過 score 方法計算。
推導出的最優的隱藏狀態可以調用 predict 方法獲得。 predict 方法可以指定解碼器演算法。當前支持的有 viterbi (Vierbi algorithm)和 map (posteriori estimation)。

E. 條件隨機場和隱馬爾科夫模型最大區別在哪裡

隱馬爾可夫模型(Hidden Markov Model,HMM),最大熵馬爾可夫模型(Maximum Entropy Markov Model,MEMM)以及條件隨機場(Conditional Random Field,CRF)是序列標注中最常用也是最基本的三個模型。HMM首先出現,MEMM其次,CRF最後。三個演算法主要思想如下:HMM模型是對轉移概率和表現概率直接建模,統計共現概率。MEMM模型是對轉移概率和表現概率建立聯合概率,統計時統計的是條件概率,但MEMM容易陷入局部最優,是因為MEMM只在局部做歸一化。CRF模型中,統計了全局概率,在 做歸一化時,考慮了數據在全局的分布,而不是僅僅在局部歸一化,這樣就解決了MEMM中的標記偏置(label bias)的問題。舉個例子,對於一個標注任務,「我愛北京天安門「, 標注為」 s s b e b c e」對於HMM的話,其判斷這個標注成立的概率為 P= P(s轉移到s)*P(『我』表現為s)* P(s轉移到b)*P(『愛』表現為s)* …*P().訓練時,要統計狀態轉移概率矩陣和表現矩 陣。對於MEMM的話,其判斷這個標注成立的概率為 P= P(s轉移到s|』我』表現為s)*P(『我』表現為s)* P(s轉移到b|』愛』表現為s)*P(『愛』表現為s)*..訓練時,要統計條件狀態轉移概率矩陣和表現矩陣。對於CRF的話,其判斷這個標注成立的概率為 P= F(s轉移到s,』我』表現為s)….F為一個函數,是在全局范圍統計歸一化的概率而不是像MEMM在局部統計歸一化的概率。當前,最後出現的CRF在多項任務上達到了統治級的表現,所以如果重頭搞應用的話,大家可以首選CRF。

本質上,CRF有以下三個優點:

CRF沒有HMM那樣嚴格的獨立性假設條件,因而可以容納任意的上下文信息。特徵設計靈活(與ME一樣) ————與HMM比較

同時,由於CRF計算全局最優輸出節點的條件概率,它還克服了最大熵馬爾可夫模型標記偏置(Label-bias)的缺點。 ­­————與MEMM比較

CRF是在給定需要標記的觀察序列的條件下,計算整個標記序列的聯合概率分布,而不是在給定當前狀態條件下,定義下一個狀態的狀態分布。

凡事都有兩面,正由於這些優點,CRF需要訓練的參數更多,與MEMM和HMM相比,它存在訓練代價大、復雜度高的缺點。

閱讀全文

與隱馬爾科夫模型python相關的資料

熱點內容
跆拳道pdf 瀏覽:205
程序員畢設可以攻哪個方向 瀏覽:427
毛絨玩具怎麼壓縮 瀏覽:378
拖拉式編程教學視頻 瀏覽:793
伺服器壞了硬碟數據如何取出 瀏覽:602
體積加密度等於質量嗎 瀏覽:608
如何執行命令 瀏覽:859
速賣通指標源碼 瀏覽:179
linux切換root登錄 瀏覽:925
什麼是有效的伺服器地址 瀏覽:825
交通銀行app如何信用卡額度查詢 瀏覽:479
asp程序員收入 瀏覽:334
無線有密碼顯示未加密 瀏覽:212
檢查伺服器地址命令 瀏覽:599
編譯過程和解釋過程的圖表形式 瀏覽:837
文明重啟如何弄自己的伺服器免費 瀏覽:912
伺服器許可權不足如何解決 瀏覽:373
少兒編程樂高主要是學什麼 瀏覽:674
張家口人社app如何實名認證 瀏覽:296
淘寶圖片怎麼設置加密 瀏覽:314