「NLP」用於語音識別、分詞的隱馬爾科夫模型HMM

2020-12-05 有三AI

大家好,今天介紹自然語言處理中經典的隱馬爾科夫模型(HMM)。HMM早期在語音識別、分詞等序列標註問題中有著廣泛的應用。

了解HMM的基礎原理以及應用,對於了解NLP處理問題的基本思想和技術發展脈絡有很大的好處。本文會詳細講述HMM的基本概念和原理,並詳細介紹其在分詞中的實際應用。

作者 | 小Dream哥

編輯 | 言有三

1 馬爾科夫隨機過程

設隨機變量X(t)隨時間t(t=t1,t2,t3...tn)而變化,E為其狀態空間,若隨機變量x滿足馬爾科夫性,如下:

即X在tn時刻的狀態只與其前一時刻時狀態的值有關,則稱該隨機變量的變化過程是馬爾科夫隨機過程,隨機變量滿足馬爾科夫性。

2 隱馬爾科夫模型(HMM)

如圖所示為馬爾科夫模型的圖結構

基於此圖結構可知,HMM模型滿足如下的性質:

(1) 它基於觀測變量來推測未知變量;

(2) 狀態序列滿足馬爾科夫性;

(3) 觀測序列變量X在t時刻的狀態僅由t時刻隱藏狀態yt決定。

同時,隱馬爾科夫模型是一種概率圖模型,它將學習任務歸結於計算變量的概率分布。通過考慮聯合概率P(Y,X)來推斷Y的分布。

考慮馬爾科夫性質以及隨機變量Y在t時刻的狀態僅由y(t-1)決定,觀測序列變量X在t時刻的狀態僅由yt決定,有:

從而可以推出聯合概率:

總的來說,馬爾科夫模型式利用已知的觀測序列來推斷未知變量序列的模型。

例如在分詞任務中,中文的句子「請問今天的天氣怎麼樣?」就是可以被觀測到的序列,而其分詞的標記序列就是未知的狀態序列「請問/今天/深圳/的/天氣/怎麼樣/?」這種分詞方式對應的標記序列為「BEBEBESBEBME」

標記序列:標籤方案中通常都使用一些簡短的英文字符[串]來編碼。

標籤列表如下,在分詞任務中,通常用BMES標記。

B,即Begin,表示開始

M,即Mediate,表示中間

E,即End,表示結尾

S,即Single,表示單個字符

3 HMM模型的幾個重要概率矩陣

仔細分析此聯合概率表達式,可知其分為三個部分:

(1) 初始狀態概率P(y1)

初始概率矩陣是指序列頭的狀態分布,以分詞為例,就是每個句子開頭,標記分別為BMES的概率。

(2) 狀態轉移概率P(yi|yi-1)

狀態轉移概率是指狀態序列內,兩個時刻內不同狀態之間轉移的狀態分布。以分詞為例,標記狀態總共有BMES四種,因此狀態轉移概率構成了一個4*4的狀態轉移矩陣。這個矩陣描述了4種標記之間轉化的概率。例如,P(yi=」E」|yi-1=」M」)描述的i-1時刻標為「M」時,i時刻標記為「E」的概率。

(3) 輸出觀測概率P(xi|yi)

輸出觀測概率是指由某個隱藏狀態輸出為某個觀測狀態的概率。以分詞為例,標記狀態總共有BMES四種,詞表中有N個字,則輸出觀測概率構成了一個4*N的輸出觀測概率矩陣。這個矩陣描述了4種標記輸出為某個字的概率。例如,P(Xi=」深」|yi=」B」)描述的是i時刻標記為「B」時,i時刻觀測到到字為「深」的概率。

4 HMM在分詞應用中的實戰

經過上面的講述,各位讀者可能還是會對HMM有一種似懂非懂的感覺。所以這一節中介紹其在分詞應用中的實踐,通過完整實際的思路介紹和代碼講解,相信各位讀者能夠對HMM模型有一個準確的認識。

假設有詞序列Y = y1y2....yn,HMM分詞的任務就是根據序列Y進行推斷,得到其標記序列X= x1x2....xn,也就是計算這一個概率:

根據貝葉斯公式:

當語料確定時

可以認為是常數,所以只需計算

這樣的話,就是要計算3小節的那三個概率矩陣,當獲得上述三個矩陣之後,便可以根據維特比算法計算出一個詞序列對應概率最大的分詞標記序列,就此也就完成了分詞的任務。那我們就還剩下2個任務:

4.1 根據語料計算三個概率矩陣

當獲得了分好詞的語料之後,三個概率可以通過如下方式獲得:

(1)初始狀態概率P(y1)

統計每個句子開頭,序列標記分別為B,S的個數,最後除以總句子的個數,即得到了初始概率矩陣。

(2) 狀態轉移概率P(yi|yi-1)

根據語料,統計不同序列狀態之間轉化的個數,例如count(yi=」E」|yi-1=」M」)為語料中i-1時刻標為「M」時,i時刻標記為「E」出現的次數。得到一個4*4的矩陣,再將矩陣的每個元素除以語料中該標記字的個數,得到狀態轉移概率矩陣。

(3) 輸出觀測概率P(xi|yi)

根據語料,統計由某個隱藏狀態輸出為某個觀測狀態的個數,例如count(xi=」深」|yi=」B」)為i時刻標記為「B」時,i時刻觀測到字為「深」的次數。得到一個4*N的矩陣,再將矩陣的每個元素除以語料中該標記的個數,得到輸出觀測概率矩陣。

我們看一下該部分的代碼:

Pi = {k: v*1.0/line_num for k,v in Pi_dict.items()} A = {k: { k1: v1/ Count_dict[k] for k1, v1 in v.items()} for k, v in A_dict.items() }B= {k: { k1: v1/ Count_dict[k] for k1, v1 in v.items()} for k,v in B_dict.items() } line_num為預料中句子的個數;

Pi_dic記錄了語料中句子中開頭標記的個數。

Count_dict記錄了預料中「BMES」四個標記的個數;

A_dict記錄了不同序列狀態之間轉化的個數;

B_dict記錄了不同隱藏狀態輸出為某個觀測狀態的個數。

4.2 維特比算法

訓練結束之後,便可獲得三個概率矩陣,那麼該如何利用上述矩陣,獲得一個句子的最大概率分詞標記序列,即完成分詞任務呢?下面就是我們要介紹的維特比算法。

設Q是所有可能狀態的集合Q={q1,q2,....qN},V={v1,v2,...vM}是所有可能的觀測集的集合。其中N是可能的狀態數(例如標記個數4:「BMES」),M是可能的觀測狀態數(例如字典中字的個數)。

一個隱馬爾可夫模型由一個三元組(Pi,A,B)確定,I是長度為T的狀態序列,O是對應的觀測序列,先用數學符號表示上述的三個概率矩陣:

初始概率矩陣,表示序列開頭,序列狀態為yi的概率

狀態轉移矩陣,表示序列狀態由yi轉為yj的概率

輸出狀態矩陣,表示序列狀態為yi時,輸出字為xj的概率

進而,為了敘述方便,引入兩個變量:

定義時刻t狀態為i的所有單個路徑(i1,i2,i3,...,it)中概率最大值為,簡單記為delta(i):

由其定義可得其遞推公式:

下為時刻t狀態為i的所有單個路徑中,概率最大的路徑的第t-1個節點,簡單記為kethe(i):

先闡述一下維特比算法的基本流程:

(1) 計算初始轉態概率

通過上述公式,得到t=1時刻,隱藏狀態取各個值(BMES)時的概率。

(2) 逐漸遞推到t=2,3,4.....T

通過上述公式,分別得到各個時刻,隱藏狀態取各個值時的概率最大的路徑以及其前一時刻節點狀態

(3) 終止

選取T時刻中,取值最大的那個狀態為T時刻的狀態。

(4) 回溯最優路徑

根據前面計算的結果,反推得到各個時刻隱藏狀態的取值

可能還有同學對這個過程不是很理解,我們舉分詞的例子,詳細介紹一下這個過程。

維特比算法是計算一個概率最大的路徑,如圖要計算「我愛中國」的分詞序列:

第一個詞為「我」,通過初始概率矩陣和輸出觀測概率矩陣分別計算delta1("B")=P(y1=」S」)P(x1=」我」|y1=」S」),delta1("M")=P(y1=」B」)P(x1=」我」|y1=」B」),delta1("E")=P(y1=」M」)P(x1=」我」|y1=」M」),delta1("S")=P(y1=」E」)P(x1=」我」|y1=」E」),

並設kethe1("B")=kethe1("M")=kethe1("E")=kethe1("S")=0;

同理利用公式分別計算:

delta2("B"),delta2("M"),delta2("E"),delta2("S")。圖中列出了delta2("S")的計算過程,就是計算:

P(y2=」S」|y1=」B」)P(x2=」愛」|y2=」S」)P(y2=」S」|y1=」M」)P(x2=」愛」|y2=」S」)P(y2=」S」|y1=」E」)P(x2=」愛」|y2=」S」)P(y2=」S」|y1=」S」)P(x2=」愛」|y2=」S」)其中P(y2=」S」|y1=」S」)P(x2=」愛」|y2=」S」)的值最大,為0.034,因此delta2("S"),kethe2("S")="S",同理,可以計算出delta2("B"),delta2("M"),delta2("E")及kethe2("B"),kethe2("M"),kethe2("E")。

同理可以獲得第三個和第四個序列標記的delta和kethe。

到最後一個序列,delta4("B"),delta4("M"),delta4("E"),delta4("S")中delta4("S")的值最大,因此,最後一個狀態為」S」。

最後,回退,

i3 = kethe4("S") ="B"i2 =kethe3("B") = "S"i1 = kethe2("S") ="S"求得序列標記為:「SSBE」。

總結

HMM的基本原理和其在分詞中的應用就講到這裡了,從上述分析可以看出,HMM時非常適合用於序列標註問題的。但是HMM模型引入了馬爾科夫假設,即T時刻的狀態僅僅與前一時刻的狀態相關。但是,語言往往是前後文相互照應的,所以HMM可能會有它的局限和問題,讀者可以思考一下,如何解決這個問題。

下期預告:條件隨機場(CRF)原理與應用

相關焦點

  • 「八鬥之才」HMM模型在地址分詞中的應用
    HMM(隱馬爾科夫模型)是統計模型,它用來描述一個含有隱含未知參數的馬爾可夫過程。其難點是從可觀察的參數中確定該過程的隱含參數,然後利用這些參數來作進一步的分析,例如模式識別。HMM是自然語言處理中的一個基本模型,用途比較廣泛,如漢語分詞、詞性標註及語音識別等,在NLP中佔有很重要的地位。
  • 「NLP-NER」什麼是命名實體識別?
    命名實體識別(Named Entity Recognition,NER)是NLP中一項非常基礎的任務。NER是信息提取、問答系統、句法分析、機器翻譯等眾多NLP任務的重要基礎工具。命名實體識別的準確度,決定了下遊任務的效果,是NLP中非常重要的一個基礎問題。作者&編輯 | 小Dream哥1 命名實體識別是什麼?
  • 深度學習在NLP中的運用?從分詞、詞性到機器翻譯、對話系統
    通過深度學習和其他機器學習技術的模型組合,竹間智能也已初步實現了自然語言對話中的意圖識別、上下文理解和多輪對話。本文將基於竹間智能的一些經驗和探索,從分詞、詞性等基礎模塊,到機器翻譯、知識問答等領域,列舉並分析一些深度學習在 NLP 領域的具體運用,希望對大家研究深度學習和 NLP 有所幫助。
  • 一篇文章教你用隱馬爾科夫模型實現中文分詞
    這類問題可以用Markov模型來描述。markov進一步,如果我們並不知道今天的天氣屬於什麼狀況,我們只知道今明後三天的水藻的乾燥溼潤狀態,因為水藻的狀態和天氣有關,我們想要通過水藻來推測這三天的真正的天氣會是什麼,這個時候就用HiddenMarkov模型來描述。
  • 基於Julius的機器人語音識別系統構建
    基於HMM模式匹配算法的語音識別系統表現為:在訓練階段,採用HMM訓練算法為每一個詞條建立一個HMM模型。詞條經過反覆訓練後,將得到的對應HMM模型加入HMM模型庫中以數據的形式保存。在匹配階段,也就是識別階段,採用HMM匹配算法將輸入的未知語音信號與訓練階段得到的模型庫中的模型進行匹配,輸出語音識別的結果。
  • PTMs|2020最新NLP預訓練模型綜述
    由於篇幅原因,本文主要針對前面兩點進行梳理,即「目前主流的預訓練模型」和「預訓練模型的分類體系」。1. 背景「nlp、cv領域的傳統方法極度依賴於手動特徵工程」。「nlp領域的發展比cv領域相對緩慢的原因是什麼呢」?相比於cv領域,「nlp領域的劣勢在於有監督數據集大小非常小」(除了機器翻譯),導致深度學習模型容易過擬合,不能很好地泛化。
  • 有趣的隱馬爾科夫模型
    01 隱馬爾科夫模型簡介隱馬爾科夫模型是關於時序的概率模型,描述由一個隱藏的馬爾科夫鏈隨機生成不可觀測的狀態隨機序列,再由各個狀態生成一個觀測而產生觀測序列的過程02 隱馬爾科夫模型舉例為了讓讀者更直觀地了解馬爾科夫模型,本文將針對經典的盒子與球模型展開分析。
  • 聯合漢語分詞和依存句法分析的統一模型:當前效果最佳
    我們的聯合模型比以前的聯合模型性能都更優,並在漢語分詞和依存句法分析中實現了當前最優的結果。本文提出的模型以前的聯合方法主要基於轉換的模型,它通過添加一些額外的操作(如「app」和「tag」)來修改標準的「shift-reduce」操作。
  • Siri語音識別:你在哪裡 就能準確地識別那附近地址
    自動語音識別系統同城由兩個主要部分組成:      一個聲學模型,用於捕捉語音的聲學特徵和語言學單位序列之間的關係,如語音和單詞之間的關係      一個語言模型(LM),它決定了某個特定的單詞序列出現在一種特定的語言中的先驗概率    我們可以找出造成這種困難(準確識別具名實體)的兩個因素
  • 基於DSP的語音識別計算器電路設計
    語音識別過程主要包括語音信號前處理、特徵提取、模式匹配等部分。語音信號輸入之後,預處理和數位化是進行語音識別的前提條件。特徵提取是進行語音信號訓練和識別必不可少的步驟,本文採用的是提取每幀的Mel係數的倒譜參數作為語音信號的特徵值。模板匹配算法目前有DTW算法、HMM隱馬爾科夫模型、ANN人工神經網絡等。
  • 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來進行預測。
  • Gse v0.30.0 發布, Go 高性能分詞, 增加 hmm 支持
    Go 語言高效分詞, 支持英文、中文、日文等詞典用雙數組 trie(Double-Array Trie)實現, 分詞器算法為基於詞頻的最短路徑加動態規劃。
  • 海量新聞信息處理中的中文分詞算法研究
    我們知道,基於網絡輿情監控風險評估系統的算法是基於WEB文本挖掘一些基本的模型與算法:如TF-IDF模型,關聯規則的Apriori算法,監督學習中SVM算法等等。然而這些算法能用於中文文本挖掘的先決條件就是有一個良好中文的分詞模塊,所以中文分詞作為風險評估,網絡輿情的基礎工具,角色十分重要。
  • 智能語音識別技術入門系列(上)
    本系列文章開始,我們將一起探索自動識別、語言處理技術所包含的核心算法、模型及未來的發展趨勢。本篇文章我們主要討論語音識別的基本概念。並理解語音識別技術的流程。(一) 自動語音識別技術ASR自動語音識別,簡稱ASR。
  • 語音識別算法有哪些_語音識別特徵提取方法
    語音識別算法有哪些_語音識別特徵提取方法 網絡整理 發表於 2020-04-01 09:24:49   語音識別算法有哪些   本文列舉了幾種不同的語音識別算法
  • 入門NLP 項目前,你必須掌握哪些理論知識?
    文本歸一化和分詞3. 詞性標註(POS)4. 命名實體識別在大多數應用中,並不需要執行以上所有的預處理步驟。是否需要進行命名實體識別取決於應用的具體業務需求,而詞性標註工作則通常由現代工具自動完成,從而改進歸一化和分詞步驟的某些部分。
  • 騰訊AI Lab西雅圖實驗室負責人俞棟:語音識別領域的現狀與進展
    俞棟:去年底在 NIPS 會議上南大的周志華教授還和我開玩笑說,「語音識別已經解決了,你不要做了。」相信很多人有類似的感覺。機器之心:理論上來講,推理的數據與訓練數據不滿足同分布假設的話,機器學習模型會整體失效。那麼自適應算法最終能夠解決魯棒性問題嗎?俞棟:真實場景和訓練集之間所謂的「不滿足同分布假設」大概率來講不是「完全不滿足」,而是「近似」或者「滿足一些」。因此機器學習模型的識別率雖然會下降,模型仍然可用。
  • 史上最強NLP知識集合:知識結構、發展歷程、導師名單
    1968年始在IBM研究中心兼職1974年全職加入,他領導一批傑出科學家利用大型計算機處理人類語言問題,學術休假(SabbaticalLeave)時(約1972-1976年間)提出統計語言模型。 1990s李開復用統計語言模型把997個詞的語音識別問題簡化成了20詞識別問題,實現了有史以來第一次大詞彙量非特定人連續語言的識別。
  • 語音識別新範式:完全的「端到端」模型,優勢在哪裡?
    語音識別新範式以自然語言處理的子領域「語音識別」為例,從 2012 年引入深度學習技術開始,語音識別的研究熱點經歷了三個階段:2011年前後,基於 DNN+HMM(深度神經網絡+隱馬爾科夫模型)的語音識別 2014年前後,基於 LSTM+CTC(長短時記憶網絡+連接時序分類)的不完全端到端語音識別
  • GMM-HMM語音識別原理詳解
    本文簡明講述GMM-HMM在語音識別上的原理,建模和測試過程。本文引用地址:http://www.eepw.com.cn/article/201710/368485.htm  1. 什麼是Hidden Markov Model?