电竞比分网-中国电竞赛事及体育赛事平台

分享

Sphinx語音識別學(xué)習(xí)記錄 (四)

 然并卵書屋 2017-07-17
CMUSphinx系列目錄

 

關(guān)于中文識別

網(wǎng)上很多都是學(xué)習(xí)自下面的博客,Sphinx武林秘籍(上)

但很多人照做之后紛紛表示識別不出來,我們猜測是某個參數(shù)設(shè)定錯誤或者版本變化導(dǎo)致的

http://www.cnblogs.com/huanghuang/archive/2011/07/14/2106579.html

然后最近我也看了幾篇,查看思路發(fā)現(xiàn)了下面兩篇文章

http://leiwuluan./blog/1287305 - pocketsphinxAdroid離線語音識別---入門

http://zuoshu./blog/1463867 - Android平臺使用PocketSphinx做離線語音識別,小范圍語音99%識別率

 

這兩篇文章,一個說20%識別,一個說99%

然后再仔細(xì)看之后發(fā)現(xiàn)是 tdt_sc_8k 中文識別模型

然后小范圍語音99%識別率這個博客的博主(好長的稱呼,直接叫99博主算了。。。)說的直接用在線工具(http://www.speech.cs./tools/lmtool.html)生成的字典和語言模型,那時候我去測試了下,發(fā)現(xiàn)不支持分詞,也不支持語料庫里注音,我就直接扔掉了結(jié)果。?!,F(xiàn)在想來,我應(yīng)該也測試一把的

然后我突然想到,上次那個zh_broadcastnews_ptm256_8000 雖然測試的沒識別出來任何東西,但不是有個很全的語料庫嗎?2.1mb的純文本

我就去打開了看,并挨個單詞搜了下,單詞的確很全

但是LM模型呢?在線工具不支持中文分詞。。。我自己有沒搞懂lm的格式和參數(shù)各自是什么

然后想到不支持分詞,那我自己分詞,然后讓在線工具生成不行嗎?就跟上午英語識別一樣

下面是我的command6.txt

打開 瀏覽器
打開 音樂
打開 記事本
關(guān)閉 窗口
關(guān)閉 音樂

然后直接用生成的6010.lm,因為6010.dic注音表完全是空白的(在線工具不支持中文注音映射到英文)直接扔掉。

然后直接調(diào)用了zh_broadcastnews_utf8.dic,發(fā)現(xiàn)識別不出來。。。明明和上午的格式一樣

然后想起來zh_broadcastnews_utf8.dic這個這么大,lm那么小,是不是太大了,而且文件開頭一大段看不懂的東東然后我自己就臨時創(chuàng)建了一個6010.dic

內(nèi)容是

復(fù)制代碼
窗口 ch uang k ou
打開 d a k ai
關(guān)閉 g uan b i
記事本 j i sh ib b en
瀏覽器 l iu l an q i
音樂 y in uxs uxe
復(fù)制代碼

這里的發(fā)音是怎么出來的?我其實就是在zh_broadcastnews_utf8.dic里面查找到那個單詞后,復(fù)制過來的

然后測試

pocketsphinx_continuous -hmm tdt_sc_8k -lm 6010.lm -dict 6010.dic

我去,竟然能識別的出來。。。下面是結(jié)果

復(fù)制代碼
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: 關(guān)閉 音樂
復(fù)制代碼

如果的確說了的話,也跟上午的準(zhǔn)確率差不多,說了11句,全部識別正確了

不過這個識別庫貌似比較敏感,我沒說話,只有鍵盤聲音他竟然能識別成打開

要實用的話、這個問題可能要解決。

 

然后hmm模型調(diào)用 zh_broadcastnews_ptm256_8000之后,發(fā)現(xiàn)他智能識別一開始語料庫里出現(xiàn)過,所以在語料庫有記錄的組合

這樣的話,損失一些自由度,比如我開始的語料庫沒有 ”打開窗口“這句話,但是使用tdt_sc_8k這個模型,他能準(zhǔn)確的識別出來,而zh_broadcastnews_ptm256_8000識別不出來。應(yīng)該是對lm的依賴度和策略選擇問題。

上午的hub4wsj_sc_8k和tdt_sc_8k都是默認(rèn)提供的簡單模型,實際使用識別都很準(zhǔn)確。但是tdt_sc_8k有時候過于自由敏感,某一次連鍵盤敲擊聲竟然都識別成了打開

不過有人說話的話還是很準(zhǔn)確的。

至于這個自由度的度量,只能看你們需要什么程度的模型了。

 

然后就是那個zh_broadcastnews_utf8.dic這個字典、如果你不想自己搜索,并粘貼過去,可以。但是你需要把dic字典文檔的編碼轉(zhuǎn)換成GB2312的、那樣才能識別,否則系統(tǒng)識別不了你的字典。因為zh_broadcastnews_utf8.dic這個本身的編碼是utf8的、而windows下貌似默認(rèn)識別的是GB2312;UTF-8的會出現(xiàn)亂碼或者不能識別

而linux下又只是識別UTF-8,而不識別GB2312。跟著武林秘籍訓(xùn)練lm和dic的可以查看下你們訓(xùn)練的文檔編碼格式對不對,有時候這個編碼錯誤,直接出現(xiàn)空白的

 

 

能識別到中文真是糾結(jié)啊,各種查官網(wǎng)資料,語音識別資料,還有好幾個博客。

雖然有些照做不能跑,但是畢竟博主們都各自運行成功過,都有不少借鑒價值

這套方案,雖然挺麻煩的,但至少可以用。大家先參考下

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多