
http://www.cnblogs.com/yin52133/archive/2012/06/21/2557219.html - (一)基本運行測試 http://www.cnblogs.com/yin52133/archive/2012/07/12/2587282.html - (二)自然語言處理原理研究 http://www.cnblogs.com/yin52133/archive/2012/07/12/2587419.html - (三)小范圍語音英文識別 http://www.cnblogs.com/yin52133/archive/2012/07/12/2588201.html - (四)小范圍語音中文識別 http://www.cnblogs.com/yin52133/archive/2012/06/22/2558806.html - (五)錯誤調試 http://www.cnblogs.com/yin52133/archive/2012/07/12/2588418.html - (六)我的目標和幾個想像的方案(閑置中)
關於中文識別
網上很多都是學習自下面的博客,Sphinx武林秘籍(上)
但很多人照做之后紛紛表示識別不出來,我們猜測是某個參數設定錯誤或者版本變化導致的
http://www.cnblogs.com/huanghuang/archive/2011/07/14/2106579.html
然后最近我也看了幾篇,查看思路發現了下面兩篇文章
http://leiwuluan.iteye.com/blog/1287305 - pocketsphinxAdroid離線語音識別---入門
http://zuoshu.iteye.com/blog/1463867 - Android平台使用PocketSphinx做離線語音識別,小范圍語音99%識別率
這兩篇文章,一個說20%識別,一個說99%
然后再仔細看之后發現是 tdt_sc_8k 中文識別模型
然后小范圍語音99%識別率這個博客的博主(好長的稱呼,直接叫99博主算了。。。)說的直接用在線工具(http://www.speech.cs.cmu.edu/tools/lmtool.html)生成的字典和語言模型,那時候我去測試了下,發現不支持分詞,也不支持語料庫里注音,我就直接扔掉了結果。。。現在想來,我應該也測試一把的
然后我突然想到,上次那個zh_broadcastnews_ptm256_8000 雖然測試的沒識別出來任何東西,但不是有個很全的語料庫嗎?2.1mb的純文本
我就去打開了看,並挨個單詞搜了下,單詞的確很全
但是LM模型呢?在線工具不支持中文分詞。。。我自己有沒搞懂lm的格式和參數各自是什么
然后想到不支持分詞,那我自己分詞,然后讓在線工具生成不行嗎?就跟上午英語識別一樣
下面是我的command6.txt
打開 瀏覽器
打開 音樂
打開 記事本
關閉 窗口
關閉 音樂
然后直接用生成的6010.lm,因為6010.dic注音表完全是空白的(在線工具不支持中文注音映射到英文)直接扔掉。
然后直接調用了zh_broadcastnews_utf8.dic,發現識別不出來。。。明明和上午的格式一樣
然后想起來zh_broadcastnews_utf8.dic這個這么大,lm那么小,是不是太大了,而且文件開頭一大段看不懂的東東然后我自己就臨時創建了一個6010.dic
內容是
窗口 ch uang k ou 打開 d a k ai 關閉 g uan b i 記事本 j i sh ib b en 瀏覽器 l iu l an q i 音樂 y in uxs uxe
這里的發音是怎么出來的?我其實就是在zh_broadcastnews_utf8.dic里面查找到那個單詞后,復制過來的
然后測試
pocketsphinx_continuous -hmm tdt_sc_8k -lm 6010.lm -dict 6010.dic
我去,竟然能識別的出來。。。下面是結果
INFO: ngram_search.c(875): bestpath 0.00 CPU 0.000 xRT INFO: ngram_search.c(878): bestpath 0.00 wall 0.001 xRT 000000003: 打開 瀏覽器 READY.... Listening... Stopped listening, please wait... INFO: cmn_prior.c(121): cmn_prior_update: from < 50.66 1.37 0.15 0.75 -0.44 0.37 0.02 0.19 -0.09 0.08 0.04 -0.07 -0.00 > INFO: cmn_prior.c(139): cmn_prior_update: to < 52.13 1.51 0.64 0.68 -0.80 0.44 -0.26 0.10 -0.07 -0.03 0.08 -0.19 -0.02 > INFO: ngram_search_fwdtree.c(1549): 825 words recognized (5/fr) INFO: ngram_search_fwdtree.c(1551): 18335 senones evaluated (111/fr) INFO: ngram_search_fwdtree.c(1553): 7691 channels searched (46/fr), 965 1st, 4828 last INFO: ngram_search_fwdtree.c(1557): 1203 words for which last channels evalu ated (7/fr) INFO: ngram_search_fwdtree.c(1560): 343 candidate words for entering last p hone (2/fr) INFO: ngram_search_fwdtree.c(1562): fwdtree 0.05 CPU 0.028 xRT INFO: ngram_search_fwdtree.c(1565): fwdtree 2.52 wall 1.528 xRT INFO: ngram_search_fwdflat.c(305): Utterance vocabulary contains 5 words INFO: ngram_search_fwdflat.c(940): 630 words recognized (4/fr) INFO: ngram_search_fwdflat.c(942): 14119 senones evaluated (86/fr) INFO: ngram_search_fwdflat.c(944): 6618 channels searched (40/fr) INFO: ngram_search_fwdflat.c(946): 1293 words searched (7/fr) INFO: ngram_search_fwdflat.c(948): 206 word transitions (1/fr) INFO: ngram_search_fwdflat.c(951): fwdflat 0.03 CPU 0.019 xRT INFO: ngram_search_fwdflat.c(954): fwdflat 0.02 wall 0.015 xRT INFO: ngram_search.c(1201): </s> not found in last frame, using <sil>.163 instea d INFO: ngram_search.c(1253): lattice start node <s>.0 end node <sil>.105 INFO: ngram_search.c(1281): Eliminated 99 nodes before end node INFO: ngram_search.c(1386): Lattice has 215 nodes, 219 links INFO: ps_lattice.c(1352): Normalizer P(O) = alpha(<sil>:105:163) = -1028613 INFO: ps_lattice.c(1390): Joint P(O,S) = -1029390 P(S|O) = -777 INFO: ngram_search.c(875): bestpath 0.00 CPU 0.000 xRT INFO: ngram_search.c(878): bestpath 0.00 wall 0.001 xRT 000000004: 關閉 音樂
如果的確說了的話,也跟上午的准確率差不多,說了11句,全部識別正確了
不過這個識別庫貌似比較敏感,我沒說話,只有鍵盤聲音他竟然能識別成打開
要實用的話、這個問題可能要解決。
然后hmm模型調用 zh_broadcastnews_ptm256_8000之后,發現他智能識別一開始語料庫里出現過,所以在語料庫有記錄的組合
這樣的話,損失一些自由度,比如我開始的語料庫沒有 ”打開窗口“這句話,但是使用tdt_sc_8k這個模型,他能准確的識別出來,而zh_broadcastnews_ptm256_8000識別不出來。應該是對lm的依賴度和策略選擇問題。
上午的hub4wsj_sc_8k和tdt_sc_8k都是默認提供的簡單模型,實際使用識別都很准確。但是tdt_sc_8k有時候過於自由敏感,某一次連鍵盤敲擊聲竟然都識別成了打開
不過有人說話的話還是很准確的。
至於這個自由度的度量,只能看你們需要什么程度的模型了。
然后就是那個zh_broadcastnews_utf8.dic這個字典、如果你不想自己搜索,並粘貼過去,可以。但是你需要把dic字典文檔的編碼轉換成GB2312的、那樣才能識別,否則系統識別不了你的字典。因為zh_broadcastnews_utf8.dic這個本身的編碼是utf8的、而windows下貌似默認識別的是GB2312;UTF-8的會出現亂碼或者不能識別
而linux下又只是識別UTF-8,而不識別GB2312。跟着武林秘籍訓練lm和dic的可以查看下你們訓練的文檔編碼格式對不對,有時候這個編碼錯誤,直接出現空白的
能識別到中文真是糾結啊,各種查官網資料,語音識別資料,還有好幾個博客。
雖然有些照做不能跑,但是畢竟博主們都各自運行成功過,都有不少借鑒價值
這套方案,雖然挺麻煩的,但至少可以用。大家先參考下