Sphinx武林秘籍(上)

Sphinx武林秘籍()

――使用现有的语言模型与声学模型

一、     使用平台

Windows XP、VMware workstation+ Ubuntu10.10

(1) Soundrecorder 测试下能否使用

(2) sudo apt-get install libasound2-dev

二、     CMUSphinx语音识别工具包

Pocketsphinx — 用C语言编写的轻量级识别库

Sphinxbase — Pocketsphinx所需要的支持库

Sphinx3 — 为语音识别研究用C语言编写的解码器

CMUclmtk — 语言模型工具

Sphinxtrain — 声学模型训练工具

下载网址:http://sourceforge.net/projects/cmusphinx/files/

以上对应所使用的版本如下:

 pocketsphinx- 0.6.1 (pocketsphinx_0.6.1-1.tar.gz)

 sphinxbase- 0.6.1 (sphinxbase-0.6.1.tar.gz)

sphinx3-0.8(sphinx3-0.8.tar.bz2)

cmuclmtk(cmusphinx-cmuclmtk.tar.gz)

SphinxTrain-1.0(SphinxTrain-1.0.tar.bz2)

三、     安装pocketsphinx

由于pocketsphinx依赖于另外一个库Sphinxbase,所以先需要安装Sphinxbase。

  (1)安装Sphinxbase

tar xzf sphinxbase- 0.6.1 .tar.gz

cd sphinxbase-0.6

./configure

make

sudo make install

默认安装在/usr/local/bin下面,ls可查看。

(2)安装pocketsphinx

export  LD_LIBRARY_PATH=/usr/local/lib

export  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

cd  pocketsphinx- 0.6.1

./configure

make

sudo make install

完成安装,在/usr/local/bin下面可以看到三个新生成的文件,

cd  /usr/local/bin

ls

pocketsphinx_batch

pocketsphinx_continuous

pocketsphinx_mdef_convert

   测试下安装结果

       pocketsphinx_continuous

   若出现如下信息,说明安装成功。

INFO: cmd_ln.c(512): Parsing command line:

pocketsphinx_continuous

Current configuration:

[NAME]              [DEFLT]             [VALUE]

-adcdev                     

-agc              none             none

-agcthresh     2.0         2.000000e+00

-alpha           0.97              9.700000e-01

-argfile                

-ascale          20.0              2.000000e+01

-backtrace     no          no

-beam           1e-48            1.000000e-48

-bestpath      yes         yes

-bestpathlw  9.5         9.500000e+00

-bghist          no          no

-ceplen          13          13

-cmn             current          current

-cmninit 8.0         8.0

………………………………….

…………………………………

………………………………….

INFO: ngram_search_fwdtree.c(333): after: 457 root, 13300 non-root channels, 26 single-phone words

INFO: ngram_search_fwdflat.c(153): fwdflat: min_ef_width = 4, max_sf_win = 25

Warning: Could not find Mic element

INFO: continuous.c(261): pocketsphinx_continuous COMPILED ON: Feb 21 2011, AT: 22:31:47

READY....

四、     建立一个简单的语言模型

(1)创建一个语料库

vi corpus.txt

输入如下内容:

stop

forward

backward

turn right

turn left

     保存退出

(2)利用在线工具LMTool建立语言模型

进入网址:http://www.speech.cs.cmu.edu/tools/lmtool.html

点击Browse按钮,选择之前创建的corpus.txt, 最后点击COMPILE KNOWLEDGE BASE 。

  生成TAR2916.tar.gz

  tar xzf TAR2916.tar.gz

  2916.corpus  2916.lm    2916.sent.arpabo  2916.vocab

2916.dic     2916.sent  2916.token

真正有用的是.dic、.lm 的文件

(3)测试结果

pocketsphinx_continuous -lm 2916.lm -dict 2916.dic

INFO: ngram_search_fwdflat.c(295): Utterance vocabulary contains 1 words

INFO: ngram_search_fwdflat.c(912):       97 words recognized (2/fr)

INFO: ngram_search_fwdflat.c(914):     2342 senones evaluated (38/fr)

INFO: ngram_search_fwdflat.c(916):     1011 channels searched (16/fr)

INFO: ngram_search_fwdflat.c(918):      167 words searched (2/fr)

INFO: ngram_search_fwdflat.c(920):       47 word transitions (0/fr)

WARNING: "ngram_search.c", line 1087: </s> not found in last frame, using <sil> instead

INFO: ngram_search.c(1137): lattice start node <s>.0 end node <sil>.56

INFO: ps_lattice.c(1228): Normalizer P(O) = alpha(<sil>:56:60) = -341653

INFO: ps_lattice.c(1266): Joint P(O,S) = -341653 P(S|O) = 0

000000000: STOP (-6531224)

READY....

Listening...

Stopped listening, please wait...

INFO: cmn_prior.c(121): cmn_prior_update: from < 37.45 -1.28 -0.16 -0.71  0.19 -0.19 -0.07  0.34  0.13 -0.07 -0.03 -0.42  0.19 >

INFO: cmn_prior.c(139): cmn_prior_update: to   < 42.22 -0.51 -0.35 -0.28 -0.24 -0.37  0.02  0.38  0.03 -0.05  0.10 -0.32  0.05 >

INFO: ngram_search_fwdtree.c(1513):      847 words recognized (9/fr)

INFO: ngram_search_fwdtree.c(1515):    11452 senones evaluated (123/fr)

INFO: ngram_search_fwdtree.c(1517):     4963 channels searched (53/fr), 534 1st, 3470 last

INFO: ngram_search_fwdtree.c(1521):     1094 words for which last channels evaluated (11/fr)

INFO: ngram_search_fwdtree.c(1524):      203 candidate words for entering last phone (2/fr)

INFO: ngram_search_fwdflat.c(295): Utterance vocabulary contains 2 words

INFO: ngram_search_fwdflat.c(912):      225 words recognized (2/fr)

INFO: ngram_search_fwdflat.c(914):    10189 senones evaluated (110/fr)

INFO: ngram_search_fwdflat.c(916):     5206 channels searched (55/fr)

INFO: ngram_search_fwdflat.c(918):      329 words searched (3/fr)

INFO: ngram_search_fwdflat.c(920):      164 word transitions (1/fr)

WARNING: "ngram_search.c", line 1087: </s> not found in last frame, using RIGHT instead

INFO: ngram_search.c(1137): lattice start node <s>.0 end node RIGHT.48

INFO: ps_lattice.c(1228): Normalizer P(O) = alpha(RIGHT:48:91) = -647142

INFO: ps_lattice.c(1266): Joint P(O,S) = -647271 P(S|O) = -129

000000001: TURN RIGHT (-12643528)

READY....

 

注意:此方法不可用于中文命令词建立语言模型

五、     利用现有的语言模型和声学模型

(1)下载Mandarin language and acoustic model

下载网址:http://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/

 

Mandarin language model : zh_broadcastnews_64000_utf8.DMP、zh_broadcastnews_utf8.dic

Mandarin Broadcast News acoustic models : zh_broadcastnews_16k_ptm256_8000.tar.bz2

 

tar xjf zh_broadcastnews_16k_ptm256_8000.tar.bz2

cd zh_broadcastnews_16k_ptm256_8000

ls

feat.params  means            noisedict  transition_matrices

mdef         mixture_weights  sendump    variances

 

上面这些文件为声学模型中所拥有的文件。

 

把zh_broadcastnews_64000_utf8.DMP、zh_broadcastnews_utf8.dic、zh_broadcastnews_16k_ptm256_8000、pocketsphinx_continuous放在同一个目录下面,然后就可以使用模型了。

(2)测试结果

huang@ubuntu:/usr/local/bin$ pocketsphinx_continuous -hmm zh_broadcastnews_ptm256_8000 -lm zh_broadcastnews_64000_utf8.DMP -dict zh_broadcastnews_utf8.dic

       -lowerf 133.33334 \

       -upperf 6855.4976 \

       -nfft 512 \

       -wlen 0.0256 \

       -transform legacy \

       -feat s2_4x \

       -agc none \

       -cmn current \

       -varnorm no

Current configuration:

[NAME]        [DEFLT]        [VALUE]

-agc        none              none

-agcthresh       2.0          2.000000e+00

-alpha            0.97        9.700000e-01

-ceplen           13           13

-cmn              current           current

-cmninit  8.0          8.0

-dither            no           no

-doublebw      no           no

-feat        1s_c_d_dd      s2_4x

-frate             100         100

-input_endian  little        little

-lda                      

-ldadim          0            0

-lifter             0            0

-logspec  no           no

-lowerf           133.33334      1.333333e+02

-ncep             13           13

-nfft        512         512

-nfilt              40           40

-remove_dc    no           no

-round_filters  yes          yes

-samprate       16000            1.600000e+04

-seed              -1           -1

-smoothspec    no           no

-svspec                        

-transform      legacy            legacy

-unit_area       yes          yes

-upperf           6855.4976      6.855498e+03

-varnorm no           no

-verbose  no           no

-warp_params              

-warp_type     inverse_linear inverse_linear

-wlen             0.025625 2.560000e-02

…………………………….

…………………………….

……………………………

INFO: ngram_search_fwdtree.c(324): after: max nonroot chan increased to 75539

INFO: ngram_search_fwdtree.c(333): after: 461 root, 75411 non-root channels, 27 single-phone words

INFO: ngram_search_fwdflat.c(153): fwdflat: min_ef_width = 4, max_sf_win = 25

Warning: Could not find Mic element

INFO: continuous.c(261): pocketsphinx_continuous COMPILED ON: Feb 21 2011, AT: 22:31:47

READY....

Listening...

Stopped listening, please wait...

INFO: cmn_prior.c(121): cmn_prior_update: from <  8.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00 >

INFO: cmn_prior.c(139): cmn_prior_update: to   <  9.20 -0.17 -0.27 -0.29 -0.38 -0.05 -0.08 -0.15 -0.12 -0.15  0.13 -0.08 -0.07 >

INFO: ngram_search_fwdtree.c(1513):     2628 words recognized (45/fr)

INFO: ngram_search_fwdtree.c(1515):   228830 senones evaluated (3878/fr)

INFO: ngram_search_fwdtree.c(1517):   506870 channels searched (8591/fr), 25129 1st, 119738 last

INFO: ngram_search_fwdtree.c(1521):     7773 words for which last channels evaluated (131/fr)

INFO: ngram_search_fwdtree.c(1524):   146203 candidate words for entering last phone (2478/fr)

INFO: ngram_search_fwdflat.c(295): Utterance vocabulary contains 137 words

INFO: ngram_search_fwdflat.c(912):     1906 words recognized (32/fr)

INFO: ngram_search_fwdflat.c(914):    71680 senones evaluated (1215/fr)

INFO: ngram_search_fwdflat.c(916):   134571 channels searched (2280/fr)

INFO: ngram_search_fwdflat.c(918):     7855 words searched (133/fr)

INFO: ngram_search_fwdflat.c(920):     6388 word transitions (108/fr)

WARNING: "ngram_search.c", line 1087: </s> not found in last frame, using 啊 instead

INFO: ngram_search.c(1137): lattice start node <s>.0 end node 啊(4).21

INFO: ps_lattice.c(1228): Normalizer P(O) = alpha(啊(4):21:57) = -296641

INFO: ps_lattice.c(1266): Joint P(O,S) = -296641 P(S|O) = 0

000000000: 啊 (-4653851)

READY....

Listening...

Stopped listening, please wait...

INFO: cmn_prior.c(121): cmn_prior_update: from <  9.37 -0.27 -0.29 -0.06 -0.23 -0.13 -0.09 -0.15 -0.08 -0.15 -0.02 -0.07 -0.10 >

INFO: cmn_prior.c(139): cmn_prior_update: to   <  9.31 -0.25 -0.37 -0.08 -0.22 -0.14 -0.08 -0.11 -0.05 -0.13 -0.02 -0.10 -0.12 >

INFO: ngram_search_fwdtree.c(1513):     2368 words recognized (38/fr)

INFO: ngram_search_fwdtree.c(1515):   251689 senones evaluated (4059/fr)

INFO: ngram_search_fwdtree.c(1517):   499391 channels searched (8054/fr), 26703 1st, 127525 last

INFO: ngram_search_fwdtree.c(1521):     7782 words for which last channels evaluated (125/fr)

INFO: ngram_search_fwdtree.c(1524):   181902 candidate words for entering last phone (2933/fr)

INFO: ngram_search_fwdflat.c(295): Utterance vocabulary contains 106 words

INFO: ngram_search_fwdflat.c(912):     1960 words recognized (32/fr)

INFO: ngram_search_fwdflat.c(914):    40695 senones evaluated (656/fr)

INFO: ngram_search_fwdflat.c(916):   107699 channels searched (1737/fr)

INFO: ngram_search_fwdflat.c(918):     6493 words searched (104/fr)

INFO: ngram_search_fwdflat.c(920):     5071 word transitions (81/fr)

INFO: ngram_search.c(1137): lattice start node <s>.0 end node </s>.50

INFO: ps_lattice.c(1228): Normalizer P(O) = alpha(</s>:50:60) = -190357

INFO: ps_lattice.c(1266): Joint P(O,S) = -206492 P(S|O) = -16135

000000002: 二 (-3082778)

READY....

Listening...

Stopped listening, please wait...

INFO: cmn_prior.c(121): cmn_prior_update: from <  9.31 -0.25 -0.37 -0.08 -0.22 -0.14 -0.08 -0.11 -0.05 -0.13 -0.02 -0.10 -0.12 >

INFO: cmn_prior.c(139): cmn_prior_update: to   <  9.26 -0.29 -0.28  0.11 -0.18 -0.16 -0.05 -0.16 -0.04 -0.19 -0.05 -0.10 -0.14 >

INFO: ngram_search_fwdtree.c(1513):     1595 words recognized (18/fr)

INFO: ngram_search_fwdtree.c(1515):   302259 senones evaluated (3358/fr)

INFO: ngram_search_fwdtree.c(1517):   487518 channels searched (5416/fr), 37862 1st, 104395 last

INFO: ngram_search_fwdtree.c(1521):     5835 words for which last channels evaluated (64/fr)

INFO: ngram_search_fwdtree.c(1524):   197251 candidate words for entering last phone (2191/fr)

INFO: ngram_search_fwdflat.c(295): Utterance vocabulary contains 61 words

INFO: ngram_search_fwdflat.c(912):     1027 words recognized (11/fr)

INFO: ngram_search_fwdflat.c(914):    24680 senones evaluated (274/fr)

INFO: ngram_search_fwdflat.c(916):    65722 channels searched (730/fr)

INFO: ngram_search_fwdflat.c(918):     4251 words searched (47/fr)

INFO: ngram_search_fwdflat.c(920):     2861 word transitions (31/fr)

INFO: ngram_search.c(1137): lattice start node <s>.0 end node </s>.82

INFO: ps_lattice.c(1228): Normalizer P(O) = alpha(</s>:82:88) = -275522

INFO: ps_lattice.c(1266): Joint P(O,S) = -277262 P(S|O) = -1740

000000003: 一年 (-4414731)

READY....

Listening...

Stopped listening, please wait...

……………………………

…………………………..

……………………………

INFO: ngram_search_fwdflat.c(920):     6841 word transitions (73/fr)

INFO: ngram_search.c(1137): lattice start node <s>.0 end node </s>.85

INFO: ps_lattice.c(1228): Normalizer P(O) = alpha(</s>:85:91) = -261132

INFO: ps_lattice.c(1266): Joint P(O,S) = -278320 P(S|O) = -17188

000000008: 留念 (-3893136)

…………………..

…………………

……………………

INFO: ngram_search.c(1137): lattice start node <s>.0 end node </s>.99

INFO: ps_lattice.c(1228): Normalizer P(O) = alpha(</s>:99:105) = -305972

INFO: ps_lattice.c(1266): Joint P(O,S) = -325764 P(S|O) = -19792

000000010: 基 民 (-4532446)

…………………..

…………………..

…………………..

INFO: ngram_search_fwdflat.c(920):     5175 word transitions (46/fr)

INFO: ngram_search.c(1137): lattice start node <s>.0 end node </s>.102

INFO: ps_lattice.c(1228): Normalizer P(O) = alpha(</s>:102:110) = -283182

INFO: ps_lattice.c(1266): Joint P(O,S) = -283589 P(S|O) = -407

000000012: 一九 八九 (-4134767)

READY....

从以上识别结果可以看出,这普通话语音识别正确率比原来的英文语音识别正确率低了很多,这和我们的口音存在一定的关系,为了能有比较高的普通话语音识别率,最好自已生成语音模型与声学模型。

 

你可能感兴趣的:(sphinx)