隱馬爾可夫模型拼音漢字輸入法

2022-05-06 07:45:10 字數 1979 閱讀 9952

隱馬爾科夫模型

隱馬爾可夫模型 (hidden markov model) 是一種統計模型,用來描述乙個含有隱含未知引數的馬爾可夫過程。其難點是從可觀察的引數中確定該過程的隱含引數,然後利用這些引數來作進一步的分析。

拼音輸入法中可觀察的引數就是拼音,隱含的引數就是對應的漢字。

那麼我們要解決的就是隱馬爾可夫的第二個問題:由觀察序列求最優的隱藏序列

只需要hmm的三個要素(π,a,b)

**解析如下:

1、模型生成

**見train/main.py檔案,裡面的initstarting,initemission,init_transition分別對應於生成隱馬爾科夫模型中的初始概率矩陣,發射概率矩陣,轉移概率矩陣,並把生成的結果寫入sqlite檔案中。

訓練用到的資料集是結巴分詞裡的詞庫,因為沒有訓練長句子,最後執行的結果也證明只能適用於短句輸入。

2、初始概率矩陣(π)

統計初始化概率矩陣,就是找出所有出現在詞首的漢字,並統計它們出現在詞首的次數,最後根據上述資料算出這些漢字出現在詞首的概率,沒統計的漢字就認為出現在詞首的概率是0,不寫入資料庫。有一點注意的是為了防止概率計算的時候因為越算越小導致計算機無法比較,所有的概率都進行了自然對數運算。統計的結果如下:

3、轉移概率矩陣(a)

此處用到的是最簡單的一階隱馬爾科夫模型,即認為在乙個句子裡,每個漢字的出現只和它前面的的乙個漢字有關,雖然簡單粗暴,但已經可以滿足大部分情況。統計的過程就是找出字典中每個漢字後面出現的漢字集合,並統計概率。因為這個概率矩陣非常的大,逐條資料寫入資料庫過慢,後續可以優化為批量寫入,提高訓練效率。結果如下:

上圖展示的一後面出現概率最高的十個字,也挺符合日常習慣。

4、發射概率矩陣(b)

通俗點就是統計每個漢字對應的拼音以及在日常情況下的使用概率,已暴舉例,它有兩個讀音:bao和pu,難點就是找bao和pu出現的概率。此處統計用到了pypinyin模組,把字典中的短語轉換為拼音後進行概率統計,但是某些地方讀音也不完全正確,最後執行的輸入法會出現和拼音不匹配的結果。統計結果如下:

5、viterbi演算法實現:

**建input_method/viterbi.py檔案,此處會找到最多十個區域性最優解,注意是十個區域性最優解而不是十個全域性最優解,但是這十個解中最優的那個是全域性最優解,**如下:

6、結果展示

執行input_method/viterbi.py檔案,簡單的展示一下執行結果:

問題統計:

統計字典生成轉移矩陣寫入資料庫的速度太慢,執行一次要將近十分鐘。

發射概率矩陣資料不準確,總有一些漢字的拼音不匹配。

訓練集太小,實現的輸入法不適用於長句子。

別人訓練好的 hmm 拼音輸入法**:

本部落格摘抄如下部落格:

隱馬爾可夫模型

隱 馬爾可夫模型 hidden markov model,hmm 作為一種統計分析模型,創立於20世紀70年代。80 年代得到了傳播和發展,成為訊號處理的乙個重要方向,現已成功地用於語音識別 行為識別,文字識別以及故障診斷等領域。隱馬爾可夫模型是馬爾可夫鏈的一種,它的狀態不能直接觀察到,但能通過觀測...

隱馬爾可夫模型

對隱馬爾可夫模型的解釋,個人覺得一句簡單概括就是 在馬爾可夫鏈的情況下對每乙個狀態都加入乙個單獨輸出口,而我們把這個輸出口定為可視視窗,可把馬爾可夫鏈放到裡面藏起來。ok!這樣就是知道隱馬爾可夫模型的結構了。通過如下例子來說明hmm的含義。假定乙個暗室中有n個口袋,每個口袋中有m種不同顏色的球,乙個...

隱馬爾可夫模型

搖色子的比喻很好 它解釋了模型的概念 模型的n個狀態 s 對應於色子的種類 隱狀態 真實不可見狀態s的序列,是每次用的色子種類d4 d6 d8組成的序列 觀測狀態 o 是可見的狀態,這裡是色子搖出的點數 觀測概率 是當確定用d4 d6 d8搖的色子的種類,求產生某種點數的概率 如 d4產生點數1的概...