Skip to content
This repository has been archived by the owner. It is now read-only.

使用PocketSphinx设置中文唤醒词 #45

Closed
yunxiyinzhe opened this Issue Sep 16, 2017 · 0 comments

Comments

Projects
None yet
1 participant
@yunxiyinzhe
Copy link
Contributor

yunxiyinzhe commented Sep 16, 2017

目前叮当设置中文唤醒词的方案是

  1. 编写 keyword.txt文件,包含两个全拼唤醒词。
  2. Imtool上传keyword.txt生成字典文件和语言模型文件。
  3. 使用编译好的FST模型g014b2b和随PocketSphinx安装到系统里的英文hmm(隐马尔可夫声学模型)hub4wsj_sc_8k,进行识别。

这种方案利用中文全拼,通过Imtool得到英文音素,利用英文的模型去识别,得到的识别效果还是可以的,但并不是真正的中文唤醒词方案。其实也是自带中文hmm的,即tdt_sc_8k,可以利用它设置真正的中文唤醒词。具体步骤其实和设置英文(全拼)唤醒词的差不多。

  1. profile.yml里面robot_name可以直接设置中文,比如"叮当", 编写 keyword.txt文件,包含两个中文唤醒词,比如"叮当"和"小梅"。
  2. Imtool上传keyword.txt生成字典文件和语言模型文件。然而由于目前Imtool不支持汉字,所以我们只能得到语言模型文件,字典文件里面没有生成相应的音素。所以我们需要手动加入音素信息。
  3. 检查/usr/share/pocketsphinx/model/hmm/里有没有zh文件夹,检查/usr/share/pocketsphinx/model/lm/里有没有zh_CN文件夹,没有的话,到PocketSphinx的源码目录下的model文件夹里把相应的文件夹copy过去。
  4. 由于Imtool生成的dictionary文件没有音素信息,打开/usr/share/pocketsphinx/model/lm/zh_CN/mandarin_notone.dic文件,从里面找到你设置的每个中文唤醒词的相应的音素,没有词组就找相同的字或者同音字,手动完善dictionary的音素信息,比如叮当的音素是"d ing d ang"(注意空格)。
  5. 将dictionary和languagemodel放到相应位置。
  6. profile.yml里面把hmm_dir指向中文hmm:'/usr/share/pocketsphinx/model/hmm/zh/tdt_sc_8k'

这样就能享用真正的中文唤醒词了,不过我在试验中识别返回的结果是gbk编码的汉字,可能需要转换下。至于识别效果,我并没有对两种方案做非常详细的对比,普通话标准的话,可能后者好点?其实不管是全拼方式还是汉字方式,选择一个合适的唤醒词更重要,至于如何挑选出合适的唤醒词,这就需要不断尝试了。另外想提高识别率,还可以用自己的声音改进或者说适配当前的声学模型,有兴趣的同学可以尝试一下。

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
You can’t perform that action at this time.