「八鬥之才」HMM模型在地址分詞中的應用

2020-12-05 IDEADATA大數據

HMM(隱馬爾科夫模型)是統計模型,它用來描述一個含有隱含未知參數的馬爾可夫過程。其難點是從可觀察的參數中確定該過程的隱含參數,然後利用這些參數來作進一步的分析,例如模式識別。

HMM是自然語言處理中的一個基本模型,用途比較廣泛,如漢語分詞、詞性標註及語音識別等,在NLP中佔有很重要的地位。我們將以一個關於天氣和吃飯的例子來說明HMM模型。

一、簡單的例子:天氣與吃飯

我們假設一天的天氣有晴天和雨天兩種狀態,小明某天吃飯有三種選擇:火鍋、烤串、水餃,而他某天選擇吃哪樣品類受當天的天氣的一定影響。晴天我們稱為A,在晴天小明選擇就餐種類的概率(意願)分別為:1/6,2/3,1/6

雨天我們稱為B,在雨天小明選擇就餐種類的概率(意願)分別為:1/2,1/4,1/4

為了方便,後文我們分別用值1,2,3來代表火鍋、烤串、水餃。

假設第一天,這天是晴天或雨天的概率都是1/2,而且我們將這個概率稱為初始概率。然後小明從三種品類中選擇當天的就餐種類,比如選擇了水餃,我們標註為3。第二天重複同樣的過程,小明仍會選擇一種品類進行就餐,該值總是火鍋、烤串、水餃(1,2,3)中的一個。這樣我們可以得到一串數字(連續就餐10天):3,1,2,2,1,3,3,2,2,1

一般來說,HMM中說到的馬爾可夫鏈其實是指隱含狀態鏈,在這裡就是每一天的天氣狀況構成的序列,即B,B,A,A,B,B,A,B,A,A,隱含狀態(天氣)之間存在轉移概率(transition probability)。在我們這個例子裡,晴天的下一天天氣狀態是晴天、雨天的概率都是0.6和0.4。雨天的下一天狀態是晴天、雨天的轉換概率都是1/2。這樣設定是為了容易說清楚,但是我們其實是可以隨意設定轉移概率的。比如,我們可以這樣定義,雨天后面是晴天的概率是0.6,是雨天的概率是0.4。這樣就是一個新的HMM。

同樣的,儘管可見狀態之間沒有轉移概率,但是隱含狀態和可見狀態之間有一個概率叫做輸出概率(emission probability),既在此隱含狀態下產生該可見狀態的概率。就我們的例子來說,晴天狀態(隱含狀態)下吃火鍋(可見狀態)的輸出概率是1/6。產生其他可見狀態的概率分別是2/3(烤串),1/6(水餃)。我們同樣可以對輸出概率進行其他定義。比如,小王在晴天願意吃火鍋、烤串、水餃的概率分別是1/8,1/8,3/4。

通過上面的例子,我們可以得到一些概念。可見狀態,隱含狀態,轉移概率,輸出概率,初始概率,且可見狀態和隱含狀態,隱含狀態和隱含狀態之間分別具有一定的關係,這些關係我們以相應的概率來表示。通過這些概念,我們在下面就可以定義出我們的HMM模型。

二、HMM五要素:就這些

由上面的例子和概念,我們可以定義出一個HMM模型的基本要素如下:

隱含狀態:事物隱藏的狀態集合,一般是我們要求的,如晴天,雨天可見狀態:事物可被觀察到的集合,一般是我們的輸入,如吃水餃,吃火鍋初始概率:事物初始時處於某一隱含狀態的概率,如某天是晴天的概率轉移概率:事物從某一個隱含狀態轉移到下一個隱含狀態的概率,如晴天后是雨天的概率輸出概率:事物在某一隱含狀態下表現為可見狀態的概率,如晴天吃火鍋的概率一個滿足上述要素的模型,我們便稱之為HMM模型。隱馬爾可夫模型(Hidden Markov Model,HMM)是統計模型,它用來描述一個含有隱含未知參數的馬爾可夫過程。其難點是從可觀察的參數中確定該過程的隱含參數。

由上我們定義出了HMM模型,但是HMM模型可以幹什麼呢?我們這裡舉例說明。

假設我現在知道天氣狀態有幾種(隱含狀態數量),天氣之間轉換的關係(轉移概率),每種天氣和就餐的關係(輸出概率),現在根據小明每天就餐的種類(可見狀態鏈),我想知道每天的天氣是什麼(隱含狀態鏈)。

舉例來說,我知道天氣共有兩種:晴天、下雨。我也知道小明連續十天的就餐種類(3,1,2,2,1,3,3,2,2,1),我不知道每天是哪種天氣,但我想知道這連續十天最有可能的天氣序列。

其實最簡單而暴力的方法就是窮舉所有可能的天氣序列,然後把每個序列對應的概率算出來。然後我們從裡面把對應最大概率的序列挑出來就行了。如果馬爾可夫鏈不長,當然可行。如果長的話,窮舉的數量太大,就很難完成了。 因此,我們引入了解決該問題的新途徑:Viterbi算法,通過它可以明顯地降低求解的複雜度。

三、Viterbi算法:降低負責度

為了解決前面提出的求解天氣序列的問題以及窮舉法的複雜度問題,我們在此引入Viterbi算法,使用貪心算法的思想來降低複雜度。還是以天氣和吃飯的列子來說明。

第一天,小明吃飯:

看到結果為3(水餃)。對應的最大概率天氣序列就是雨天,因為雨天去吃水餃(3)的概率是1/4,高于晴天去吃水餃的概率1/6。

把這個情況拓展,小明連續兩天就餐:

結果為3(水餃),1(火鍋)。這時問題變得複雜起來,我們要計算兩個值,分別是第二天天氣是晴天、雨天的最大概率。顯然,要取到最大概率,第一天天氣必須為雨天。這時,第二天天氣取到晴天的最大概率是:

P2(晴天) = P(雨天) * P(雨天-> 水餃) * P(雨天-> 晴天) * P(晴天-> 火鍋)

= 1/2 * 1/4 * 1/2 * 1/6 = 1/96

同樣的,我們可以計算第二天天氣是雨天的最大概率:

P2(雨天) = P(雨天) * P(雨天-> 水餃) * P(雨天-> 雨天) * P(雨天-> 火鍋)

= 1/2 * 1/4 * 1/2 * 1/2 = 1/32

我們發現,第二天是雨天的概率最大。而使這個概率最大時,第一天天氣為雨天。所以這連續兩天的最大概率天氣序列就是(雨天,雨天)。

繼續拓展,小明連續三天就餐:

同樣,我們計算第三天分別是晴天、雨天的最大概率。我們再次發現,要取到最大概率,第二天天氣必須為雨天。這時,第三天取到晴天的最大概率是:

P3(晴天) = P2(雨天) * P(雨天-> 晴天) * P(晴天-> 烤串)

= 1/32 * 1/2 * 2/3 = 1/96

同上,我們可以計算第三天天氣是雨天時的最大概率:

P3(雨天) = P2(雨天) * P(雨天-> 雨天) * P(雨天-> 烤串)

= 1/32 * 1/2 * 1/4 = 1/256

我們發現,第三天天氣是晴天的概率最大。而使這個概率最大時,第二天天氣為雨天,第一天天氣為雨天。

所以最大概率的天氣序列就是雨天,雨天,晴天。

寫到這裡,大家應該看出點規律了。既然連續三天可以算,那麼連續多少天都可以以此類推。我們發現,我們要求最大概率天氣序列時要做這麼幾件事情。首先,不管序列多長,要從序列長度為1算起,算序列長度為1時取到每個天氣的最大概率。然後,逐漸增加長度,每增加一次長度,重新算一遍在這個長度下最後一個位置取到每個天氣的最大概率。因為上一個長度下的取到每個天氣的最大概率都算過了,重新計算的話其實不難。當我們算到最後一位時,就知道最後一位是哪個天氣的概率最大了。然後,我們要把對應這個最大概率的序列從後往前推出來。如此,我們就可以計算出一個給定的可見狀態序列(就餐種類)對應的隱含狀態序列(天氣狀況)了。

HMM模型不僅可以用於解決上面的反推天氣序列的問題,還可以解決其他問題,如語音識別,詞性標註等,在此我們以詞性標註為例,說明HMM模型在詞性標註上的應用。

四、詞性標註:用武之地

我們首先給出詞性標註的概念:BMES。給定一個字符,它的詞性標記代表的是該字在詞語中的位置,B代表該字是詞語中的起始字,M代表是詞語中的中間字,E代表是詞語中的結束字,S則代表是單字成詞。如「愛狄特」對應的標記分別為「BME」。這裡的{B,M,E,S}的集合就對應於我們前面講過的天氣狀況集合{晴天,雨天},既我們中文分詞的隱含狀態集合。

可見狀態集合就是所有漢字(東南西北你我他…),甚至包括標點符號所組成的集合,對應於我們前面的{火鍋,烤串,水餃}集合。

隱含狀態值也就是我們要求的值,在HMM模型中文分詞中,我們的輸入是一個句子(也就是觀察值序列),輸出是這個句子中每個字的隱含狀態值(詞性標記)。

比如:

輸出的狀態序列為:

根據這個狀態序列我們可以進行切詞:

所以最終分詞結果如下:

這樣當給定一個輸入的句子(觀察值序列),我們總是能夠通過前面講過的HMM模型和Viterbi算法計算出該句子對應的詞性標記序列(隱含狀態序列),進而完成分詞。

通過上面我們知道,HMM可以完成詞性標註的工作,從而進一步對一個給定的語句通過詞性標註對其完成分詞。但上面講的只是一般的句子分詞,當推廣應用到我們的地址分詞時,還需要對HMM模型進行更多的處理,以便達到更好的分詞效果。

五、地址分詞:做的更多一點

在實際的分詞應用中,我們一般是通過觀察序列(輸入的句子)求隱含狀態序列(詞性標記序列),這樣我們通常需要初始概率、轉移概率、輸出概率等矩陣。在實際應用中這些值一般是通過統計經過標記的語料庫獲得。所謂標記是根據詞性將語料庫內的句子人為進行分割。

具體到我們的地址分詞,這些值可以從我們的明文字典(已經分割過,無需再進行人工標記)中統計獲得,通過計算各個字符出現的數量,以及各種詞性的詞相互出現的數量,計算對應的概率。

流程圖如下:

1. 全字符覆蓋

在我們的分詞程序中,顯狀態就是字符,包括漢字,標點符號,英文字母,阿拉伯數字,特殊符號等,為了保證顯狀態對常見字符的全覆蓋進而保證程序的正確性,防止出現「某字符在語料庫中存在但在顯狀態集合中不存在」這種情況,我們需要事先定義一個顯狀態集合,該集合包含GB2312定義的漢字以及所有的英文字母、數字、標點符號和一些特殊符號,程序啟動後加載該字符集合,之後再進行語料庫的統計。

2. 人工標記

語料庫需要通過人工標記之後才能進行統計。人工標記是根據句子內詞的詞性使用分隔符進行人工分詞,如語料庫內有句子「北京愛狄特信息科技有限公司」,我們使用空格進行人工標記,標記後的結果為「北京 愛狄特 信息 科技 有限公司」。這部分需要大量的人工工作,且語料庫需要有足夠大的量才能保證準確率。

3. 初始概率近似

當統計完語料庫後,可能某個詞性標記的統計值為0,這樣其初始概率便為0,如詞性B的字符統計量為0,這不太符合事實,我們需要對這種情況進行修正。當前我們程序中使用加1估計的方式,將這種0值給予一個非常小的值進行近似估計,如1,之後再進行初始概率的計算。

4. 顯狀態概率近似

在統計顯狀態後,可能某個字符在某個詞性標記上的統計量為0,如「北」的詞性E統計量為0,這樣既不符合事實,也會導致Viterbi算法出現問題,因此我們也需要對這種情況進行修正。同樣使用加1估計的方法,計算概率時使用該字符在各個詞性上的真實統計值或修正值除以該詞性標記的總值(真實統計值加修正值),得到一個近似的顯狀態概率矩陣。

5. 分詞效果

我們使用最新的全部街道明文字典進行建模,使用一定量的客戶地址數據進行分詞,抽取一定樣本,得出的結果如下圖:

六、總結

HMM(隱馬爾科夫模型)是一個統計模型,它用來描述一個含有隱含未知參數的馬爾可夫過程。顧名思義,在隱馬爾可夫模型中,狀態發生序列是未知的,只能通過一些觀察得到的另一組狀態發生序列來獲得相關信息。例如,在語音識別中,當然無法直接識別語言,我們實際得到的只是某一個人發出的聲音,而這個聲音是真正的聲音(這裡指人類某種語言的所有語調等信息)通過和聲帶,空氣等信息混合表現得到的。

一個HMM模型是一個五元組,它常被用於求解一些問題,其中一類問題就是:已知了隱含狀態數量,轉移概率,輸出概率,可見狀態鏈,我想知道最可能的隱含狀態鏈。為了簡化求解複雜度,我們常常使用Viterbi算法來解決此類問題。

在實際的應用中,HMM經常被用於語音識別,中文分詞等場景,我們一般使用詞性標註的方式來實現中文分詞,且在真實的程序中,需要對模型做更多的近似平滑處理以及一些其他處理,才能更好地完成分詞工作。

【i分享】

案例-政府招投標網站監測平臺

案例-新華社廣東物流信用平臺

案例-金融行業地址數據服務項目

案例-金融行業-地址數據應用項目

案例-內外部信息整合共享平臺

案例-實時寫字樓價格信息平臺

案例-保險行業動態情報雲平臺

案例-市場產品比價平臺

案例-地址清洗技術支持

…… ……

【八鬥之才原創集】

淺談Docker技術的實際應用

漫談雲計算

淺談廠商在銀行業大數據建設領域的建設能力

淺談銀行零售客戶細分與營銷

軟體設計開發經驗分享

網頁設計參考標準

簡化圖表,凸顯數據價值

談一談架構相關的那些事

淺談java性能優化

NBA球員場上位置的預測分析

微服務—軟體架構又一春

NodeJS作為Web架構中間層的使用

傳統數倉從 Teradata 遷移到 Hadoop平臺實踐

淺談網絡I/O

…… ……

更多信息請查閱www.ideadata.com.cn官方網站

關於IDEADATA

IDEADATA專注於從數據到信息的有效管理與應用,是領先的商業信息服務技術提供商,是數據倉庫及大數據技術和應用的先行實踐者。

公司官網:www.ideadata.com.cn新浪微博:IDEADATA大數據視界微信關注:IDEADATA大數據長按指紋或掃描下面的二維碼可以直接添加:

相關焦點

  • 「NLP」用於語音識別、分詞的隱馬爾科夫模型HMM
    大家好,今天介紹自然語言處理中經典的隱馬爾科夫模型(HMM)。HMM早期在語音識別、分詞等序列標註問題中有著廣泛的應用。了解HMM的基礎原理以及應用,對於了解NLP處理問題的基本思想和技術發展脈絡有很大的好處。本文會詳細講述HMM的基本概念和原理,並詳細介紹其在分詞中的實際應用。
  • Gse v0.30.0 發布, Go 高性能分詞, 增加 hmm 支持
    Go 語言高效分詞, 支持英文、中文、日文等詞典用雙數組 trie(Double-Array Trie)實現, 分詞器算法為基於詞頻的最短路徑加動態規劃。
  • 聯合漢語分詞和依存句法分析的統一模型:當前效果最佳
    在數據集 CTB-5 和 CTB-7 上進行的實驗中,即使沒有 POS 信息,本文模型在聯合漢語分詞和依存句法分析中也達到了當前最先進的性能。我們的聯合模型比以前的聯合模型性能都更優,並在漢語分詞和依存句法分析中實現了當前最優的結果。本文提出的模型以前的聯合方法主要基於轉換的模型,它通過添加一些額外的操作(如「app」和「tag」)來修改標準的「shift-reduce」操作。
  • 機器學習在馬蜂窩酒店聚合中的應用初探
    酒店聚合能力的強弱,決定著用戶預訂酒店時可選價格的「厚度」,進而影響用戶個性化、多元化的預訂體驗。為了使酒店聚合更加實時、準確、高效,現在馬蜂窩酒店業務中近 80% 的聚合任務都是由機器自動完成。本文將詳細闡述酒店聚合是什麼,以及時下熱門的機器學習技術在酒店聚合中是如何應用的。
  • R語言中的隱馬爾可夫HMM模型實例
    p=17592 最近,我們使用隱馬爾可夫模型開發了一種解決方案,並被要求解釋這個方案。HMM用於建模數據序列,無論是從連續概率分布還是從離散概率分布得出的。它們與狀態空間和高斯混合模型相關,因為它們旨在估計引起觀測的狀態。狀態是未知或「隱藏」的,並且HMM試圖估計狀態,類似於無監督聚類過程。
  • 每天調用達80億次的小米MiNLP平臺,近期又開源了中文分詞功能
    機器之心報導作者:陳萍近日,小米開源了其自然語言處理平臺 MiNLP 的中文分詞功能,具備分詞效果好、輕量級、詞典可定製、多粒度切分以及調用更便捷等特點。在自然語言處理任務中,除了模型之外,底層的數據處理也是非常重要的。
  • 深度學習在NLP中的運用?從分詞、詞性到機器翻譯、對話系統
    其中,對話交互系統已經成為一個重要的應用研究領域,2017 年的自然語言對話系統,將開創一個新的人機互動時代。通過深度學習和其他機器學習技術的模型組合,竹間智能也已初步實現了自然語言對話中的意圖識別、上下文理解和多輪對話。
  • 一篇文章教你用隱馬爾科夫模型實現中文分詞
    個人博客什麼問題用HMM解決現實生活中有這樣一類隨機現象,在已知現在情況的條件下,未來時刻的情況只與現在有關,而與遙遠的過去並無直接關係。比如天氣預測,如果我們知道「晴天,多雲,雨天」之間的轉換概率,那麼如果今天是晴天,我們就可以推斷出明天是各種天氣的概率,接著後天的天氣可以由明天的進行計算。這類問題可以用Markov模型來描述。
  • 宇宙學家是如何看待「大爆炸宇宙模型」與「穩恆態宇宙模型」的?
    上個世紀20年代以前,人們心中那個「靜態的宇宙」幾乎已經成型,然而哈勃的發現改變了這一切,「純靜態的宇宙模型」已經被兩個新生的理論所替代,那就是——「大爆炸宇宙模型」和「穩恆態宇宙模型」。我們可以有兩個選擇:可以選擇「大爆炸宇宙模型」,它要求宇宙有一個創生的時刻,它的過去和未來有著天壤之別,有著有限的歷史和未來,當然我們也可以選擇「穩恆態宇宙模型」,它有著永恆的歷史和未來。並且有連續的物質產生,「大爆炸宇宙模型」可以解釋氫和氦的豐度,而「穩恆態宇宙模型」更容易被人們接受,它本質上卻回到了永恆宇宙的保守觀點。
  • 「熱大爆炸宇宙學模型」的創立者最早提出「遺傳密碼模型」
    上個世紀40年代「大爆炸模型」雖然有哈勃等人的觀測證據,有弗裡德曼和勒邁特等人的理論支撐,但是依然有很多人是反對的,為了使「大爆炸模型」被廣泛地接受,有一個問題是不容忽視的,那就是——為什麼有些元素比其他元素更常見!
  • 中文分詞最佳紀錄刷新,兩大模型分別解決中文分詞及詞性標註問題
    伊瓢 發自 中關村量子位 報導 | 公眾號 QbitAI中文分詞的最佳效果又被刷新了。在今年的ACL 2020上,來自創新工場大灣區人工智慧研究院的兩篇論文中的模型,刷新了這一領域的成績。另外,在詞性標註方面,TwASP模型同樣刷新了成績。中文分詞的SOTA中文分詞目的是在中文的字序列中插入分隔符,將其切分為詞。例如,「我喜歡音樂」將被切分為「我/喜歡/音樂」(「/」表示分隔符)。
  • matlab代寫hmm算法程序(隱馬爾科夫模型)需要注意什麼?
    我要做的就是把svm/rf算法的輸出,作為hmm算法的輸入,然後來預測行為。1.Svm/rf算法的輸出也是預測意圖,我想通過hmm算法結合svm/rf的輸出得到更好的預測結果。2.組合各種意圖,比如通過svm/rf得到的意圖劃分為1-7個強度,我想用hmm將這個強度劃分為1,2兩個狀態。或者1,2,3 三個狀態,然後比較這些結果與svm/rf得到的預測結果3.直接運用特徵值用hmm來進行預測。
  • 創新工場提出中文分詞和詞性標註模型,性能分別刷新五大數據集
    基於此,創新工場近日公布的兩篇論文各自提出了「鍵-值記憶神經網絡的中文分詞模型」和「基於雙通道注意力機制的分詞及詞性標註模型」,將外部知識(信息)創造性融入分詞及詞性標註模型,有效剔除了分詞「噪音」誤導,大幅度提升了分詞及詞性標註效果。
  • 一站式解決:隱馬爾可夫模型(HMM)全過程推導及實現
    > 點擊上方「MLNLP」,選擇「星標」公眾號重磅乾貨,第一時間送達【導讀】隱馬爾可夫模型
  • 中文分詞和詞性標註:為拓展工業場景應用夯基—新聞—科學網
    未登錄詞指的是不在詞表,或者是模型在訓練的過程中沒有遇見過的詞,例如經濟、醫療、科技等領域的專業術語或者社交媒體上的新詞,或者是人名。「這類問題在跨領域分詞任務中尤其明顯。」宋彥表示。 在論文中,宋彥等人提出了「基於鍵-值記憶神經網絡的中文分詞模型」。
  • 海量新聞信息處理中的中文分詞算法研究
    我們根據以往的研究積累,針對人民網對於社會化海量新聞的分析需求,有針對性的在文中提出了幾種分詞算法。不僅在原理上做了正確論述,由理論應用到分詞算法上也有詳細描述。通過研究,我們認為基於隱馬爾科夫模型(HMM)的改進模型多重隱馬爾科夫模型(CHMM)在分詞算法上更為出色,更適合為風險評估系統提供服務。 與此同時,結合人民網風險評估系統,我們認為具有預警意義的詞應該是名詞動詞或者形容詞。
  • 百度推「一次包會」模型:「一次性」教會智能體認知新事物
    在雷鋒網旗下學術頻道 AI 科技評論的資料庫項目「AI影響因子」中,憑藉百度 PaddlePaddle 開源平臺負責人王益專訪、百度數據可視化實驗室的成立及NLP 團隊在微軟 MARCO 閱讀理解數據集上的突出表現、被ACL 2018 接收的論文「Interactive Language Acquisition with One-shot Visual Concept Learning
  • 創新工場提出中文分詞和詞性標註新模型 可提升工業應用效率
    DoNews7月13日消息(記者 翟繼茹)13日,記者從創新工場獲悉,其最新提出了中文分詞和詞性標註模型,可將外部知識(信息)融入分詞及詞性標註模型,剔除了分詞「噪音」誤導,提升了分詞及詞性標註效果。
  • 「最美應用」Relaxing Sounds for Me :用音樂打造放鬆的精神世界
    上手「我的放鬆音樂」這款 App 相對容易且直接。在提供的聲音庫裡,根據分類快速選擇播放不同的聲音:都市的車水馬龍,自然的風雨雷電,樂器的絲竹鐘鳴……選中這些種類豐富的聲音之後,用戶可以進行疊加和組合。
  • 「最美應用」我的放鬆音樂:可能是我用過最好的白噪音播放應用
    白噪音類的音樂誰都喜歡,無論是日常因為工作忙的焦頭爛額的時候,還是晚上因為煩心事情太多而導致的晚上失眠,放上一首白噪音類的音樂,總能讓忙碌中的你呼出一口氣,而雖然現在市面上也有著不少十分棒的白噪音,但是它們儘管音質和功能方面十分的贊,但是內存真的不咋小,今天小美來為大家帶來的這款「我的放鬆音樂」就是一款十分簡約的白噪音應用,讓你好好在音樂中休息一下。