精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何用隱馬爾可夫模型實現中文拼音輸入

馬哥Linux運維 ? 2017-12-11 16:22 ? 次閱讀

根據此訓練得出隱馬爾科夫模型,用維特比算法實現了一個簡單的拼音輸入法。

原理簡介

隱馬爾科夫模型

抄一段網上的定義:

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

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

viterbi算法

維特比算法,思想是動態規劃,代碼比較簡單就不贅述。

代碼解釋

model定義

代碼見model/table.py文件,針對隱馬爾科夫的三個概率矩陣,分別設計了三個數據表存儲。這樣的好處很明顯,漢字的轉移概率矩陣是一個非常大的稀疏矩陣,直接文件存儲占用空間很大,并且加載的時候也只能一次性讀入內存,不僅內存占用高而且加載速度慢。此外數據庫的join操作非常方便viterbi算法中的概率計算。

數據表定義如下:

classTransition(BaseModel):

__tablename__='transition'

id=Column(Integer,primary_key=True)

previous=Column(String(1),nullable=False)

behind=Column(String(1),nullable=False)

probability=Column(Float,nullable=False)

classEmission(BaseModel):

__tablename__='emission'

id=Column(Integer,primary_key=True)

character=Column(String(1),nullable=False)

pinyin=Column(String(7),nullable=False)

probability=Column(Float,nullable=False)

classStarting(BaseModel):

__tablename__='starting'

id=Column(Integer,primary_key=True)

character=Column(String(1),nullable=False)

probability=Column(Float,nullable=False)

模型生成

代碼見train/main.py文件,里面的initstarting,initemission,init_transition分別對應于生成隱馬爾科夫模型中的初始概率矩陣,發射概率矩陣,轉移概率矩陣,并把生成的結果寫入sqlite文件中。訓練用到的數據集是結巴分詞里的詞庫,因為沒有訓練長句子,最后運行的結果也證明只能適用于短句輸入。

初始概率矩陣

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

轉移概率矩陣

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

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

發射概率矩陣

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

viterbi實現

代碼建input_method/viterbi.py文件,此處會找到最多十個局部最優解,注意是十個局部最優解而不是十個全局最優解,但是這十個解中最優的那個是全局最優解,代碼如下:

def viterbi(pinyin_list):

"""

viterbi算法實現輸入法

Aargs:

pinyin_list (list): 拼音列表

"""

start_char=Emission.join_starting(pinyin_list[0])

V={char:probforchar,probinstart_char}

foriinrange(1,len(pinyin_list)):

pinyin=pinyin_list[i]

prob_map={}

forphrase,probinV.iteritems():

character=phrase[-1]

result=Transition.join_emission(pinyin,character)

ifnotresult:

continue

state,new_prob=result

prob_map[phrase+state]=new_prob+prob

ifprob_map:

V=prob_map

else:

returnV

returnV

結果展示

運行input_method/viterbi.py文件,簡單的展示一下運行結果:

問題統計:

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

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • python
    +關注

    關注

    56

    文章

    4783

    瀏覽量

    84473
  • 隱馬爾科夫模型

    關注

    0

    文章

    4

    瀏覽量

    1339

原文標題:隱馬爾科夫模型 python 實現簡單拼音輸入法

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于馬爾模型的音頻自動分類

    音頻的自動分類,尤其是語音和音樂的分類,是提取音頻結構和內容語義的重要手段之一,它在基于內容的音頻檢索、視頻的檢索和摘要以及語音文檔檢索等領域都有重大的應用價值.由于馬爾
    發表于 03-06 23:50

    基于概率的統計分析馬爾模型

    圖解馬爾模型(HMM)
    發表于 08-20 14:17

    馬爾模型的組成

    自然語言處理——62 馬爾模型
    發表于 10-14 06:46

    【PIMF】OpenHarmony啃論文俱樂部——OpenHarmony標準系統上輸入法以及中文拼音輸入法原理

    法。 拼音輸入法是最合理的中文輸入方法。拼音輸入法屬于一種編碼輸入法。其基本實現原理依賴于
    發表于 05-23 11:02

    谷歌拼音輸入法2.3.14.85 最新版

    谷歌拼音輸入法 谷歌拼音輸入法1.0.19.0 最新版下載介紹: 聰明的谷歌拼音輸入法五大特色: 智能組句:選詞準確率高,能聰明地理解您的意圖,短句長句都合適
    發表于 06-10 09:20 ?0次下載

    微軟拼音輸入法2007

    微軟拼音輸入法2007 支持 3 種不同的輸入風格,微軟拼音新體驗、微軟拼音經典和 ABC 輸入風格。您可以從微軟
    發表于 02-12 08:49 ?18次下載

    基于馬爾模型的火焰檢測

    提出一種利用馬爾模型對普通視頻中的火焰進行分析的方法,除應用運動和顏色分析對火焰進行識別外,還通過
    發表于 04-14 08:36 ?28次下載

    基于馬爾的系統入侵檢測方法

    針對入侵檢測中普遍存在誤報與漏報過高的問題,本文提出一種新的基于馬爾模型的系統入侵檢測方法。該方法以程序正常執行過程中產生的系統調用序
    發表于 08-05 09:47 ?8次下載

    51單片機的中文拼音輸入法-c語言源程序

    51單片機的中文拼音輸入法-c語言源程序:拼音輸入法杳詢函數: unsigned char code * py_ime(unsigned char input_py_val[]);input_py_val為已
    發表于 08-23 11:00 ?142次下載

    馬爾模型(HMM)攻略(有具體例子-方便理解)

    馬爾模型(HMM)攻略,手勢識別算法
    發表于 12-07 18:00 ?0次下載

    基于改進的馬爾模型的態勢評估方法

    針對馬爾模型(HMM)參數難以配置的問題,提出一種改進的基于
    發表于 12-03 10:24 ?0次下載
    基于改進的<b class='flag-5'>隱</b><b class='flag-5'>馬爾</b><b class='flag-5'>可</b><b class='flag-5'>夫</b><b class='flag-5'>模型</b>的態勢評估方法

    基于馬爾模型的短波認知頻率選擇方法

    針對短波頻譜利用率低下及頻率選擇不夠智能的局限性,提出一種基于馬爾模型( HMM)的短波認知頻率選擇方法。應用認知無線電原理,將短波傳
    發表于 12-18 16:03 ?0次下載
    基于<b class='flag-5'>隱</b><b class='flag-5'>馬爾</b><b class='flag-5'>可</b><b class='flag-5'>夫</b><b class='flag-5'>模型</b>的短波認知頻率選擇方法

    基于馬爾模型的軟件狀態評估預測方法

    狀態進行客觀、準確地評估和預測,成為亟待解決的問題.為此,提出了一種基于馬爾模型的軟件系統狀態評估預測方法.該方法基于軟件系統外在特征
    發表于 01-05 10:56 ?1次下載
    基于<b class='flag-5'>隱</b><b class='flag-5'>馬爾</b><b class='flag-5'>可</b><b class='flag-5'>夫</b><b class='flag-5'>模型</b>的軟件狀態評估預測方法

    基于馬爾預測的功率博弈機制

    用戶的需求是保障系統正常運行的關鍵。 為了解決無線資源競爭中功率博弈的博弈者獲得的環境信息具有非對稱性問題,提出了一種基于馬爾預測的功率博弈機制。該機制通過建立
    發表于 02-02 14:23 ?0次下載
    基于<b class='flag-5'>隱</b><b class='flag-5'>馬爾</b><b class='flag-5'>可</b><b class='flag-5'>夫</b>預測的功率博弈機制

    基于馬爾模型的公交乘客出行鏈識別

    基于馬爾模型的公交乘客出行鏈識別
    發表于 07-02 15:18 ?4次下載