CMU Sphinx 语音识别学习笔记(1)

为了快速入门,环境先用windows系统。

第一步,到 http://cmusphinx.sourceforge.net/wiki/download/ 直接下载编译好的程序,先把sphinxbase 、pocketsphinx 、sphinxtrain、、beta6 sphinx4 、cmuclmtk 和 https://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/ 里面的中文普通话语言模型全下载下来。

在等文件下载完的时候可以先理解一下语音识别的工作方式,对之后自己调整语音识别准确度很有帮助。语音库有3种类型的库,第一个就是 hmm Hidden Markov Model隐马尔可夫模型 模型训练算法,可以理解为声音到音标的库;第二个是dict 词典,可以理解为音标到词(文字)的库;最后一个是lm language model 语言模型,可以理解为各个词的使用频率,这个词和另一个词同时出现的几率。语音识别的过程是先把声音转成音标(通过 hmm Hidden Markov Model隐马尔可夫模型),然后把音标转成词(通过 dict 词典),由于语音的不确定性(同音字、语音不清晰、语音不标准等原因)会识别出来多重可能结果,然后根据 lm language model 语言模型 选择可能性最高的一个作为结果返回,这就完成了语音的识别过程。

第二步,在下载过程中先检查一下麦克风,用windows自带的录音程序录一下音,看看各个距离麦克风的效果,一般的麦克风距离稍微远些声音就很小了,如果想做远距离的声音识别就需要换成监控上面拾音器了。拾音器需要接到音源输入(电脑声卡的蓝色接口)上面,不是接麦克风(声卡的粉色接口)的那个插口。

第三步,把各个文件全部解压出来。为了使用方便,把 pocketsphinx-0.8-win32\pocketsphinx-0.8-win32\bin\Release 路径加到PATH环境变量里面。

第四步,找到之前解压出来的 zh_broadcastnews_ptm256_8000(这是一个目录,里面有 feat.params、 mdef、 means、 mixture_weights 等文件) 、zh_broadcastnews_64000_utf8.DMP 和 zh_broadcastnews_utf8.dic ,把它们放到一个目录里面去,然后执行pocketsphinx_continuous -hmm zh_broadcastnews_ptm256_8000 -lm zh_broadcastnews_64000_utf8.DMP -dict zh_broadcastnews_utf8.dic 就可以测试语音识别效果了。

我没试这个,从网上看其他人的说是效果很不好。我做这个语音识别的目的是为了识别特定命令,所以直接自己生成的语言模型。可以在这里 http://www.speech.cs.cmu.edu/tools/lmtool-new.html 上传文本文件来提供语料资料,然后根据文本内容自动生成词频和用到的词的音标词典。不过这个不支持中文分词和中文音标,需要上传前用空格手工分词,然后打开生成的 *.dic 音标词典文件,自己根据 zh_broadcastnews_utf8.dic 里面的音标手工添加音标。之后执行 pocketsphinx_continuous -hmm zh_broadcastnews_ptm256_8000(或tdt_sc_8k) -lm 你的lm文件 -dict 你的dic文件 就可以测试了。

我的语料文件:

生成的1675.dic文件内容

生成的1675.lm文件内容

另附一点资料:
hmm Hidden Markov Model隐马尔可夫模型 模型训练算法
个人理解为声音和音标的关联
中文的有 tdt_sc_8k 和 zh_broadcastnews_ptm256_8000 ,是一个目录。

lm language model
lm模型是统计语料得到的模型,lm模型里存的是语料的组合概率。个人理解为这个是存放的那个词比较常用,那个词在另一个词后面的几率更高。
zh_broadcastnews_64000_utf8.DMP 是从网下下的语言模型,在线生成的语言模型的扩展名是 lm 。

dict 词典
音标和词之间的关联。
zh_broadcastnews_utf8.dic 是从网上下的词典。在线生成的扩展名也是 dic 。

Pocketsphinx — 用C语言编写的轻量级识别库
Sphinxbase — Pocketsphinx所需要的支持库
Sphinx3 — 为语音识别研究用C语言编写的解码器
CMUclmtk — 语言模型工具
Sphinxtrain — 声学模型训练工具

附一下在线生成语言模型和词典的工具 http://www.speech.cs.cmu.edu/tools/lmtool-new.html

本文参考了 http://www.cnblogs.com/huanghuang/archive/2011/07/14/2106579.html 和 http://www.cnblogs.com/yin52133/archive/2012/06/21/2557219.html 写的,如果有不明白的地方建议翻一下上面两个博文系列。

CMU Sphinx 语音识别学习笔记(1)》有4个想法

  1. laoyur

    博主你好,我使用在线工具生成的lm加载后,始终报错:
    04-05 22:13:08.719 12984-13011/edu.cmu.sphinx.pocketsphinx E/cmusphinx: ERROR: “allphone_search.c”, line 558: Phonetic LM does not have SIL phone in vocabulary
    我的pocketsphinx版本是5prealpha

    lm内容是再简单不过的测试内容:
    Language model created by QuickLM on Tue Apr 5 10:02:59 EDT 2016
    Copyright (c) 1996-2010 Carnegie Mellon University and Alexander I. Rudnicky

    The model is in standard ARPA format, designed by Doug Paul while he was at MITRE.

    The code that was used to produce this language model is available in Open Source.
    Please visit http://www.speech.cs.cmu.edu/tools/ for more information

    The (fixed) discount mass is 0.5. The backoffs are computed using the ratio method.
    This model based on a corpus of 5 sentences and 7 words

    \data\
    ngram 1=7
    ngram 2=10
    ngram 3=5

    \1-grams:
    -0.7782 -0.3010
    -0.7782 -0.2218
    -1.4771 百度 -0.2218
    -1.4771 谷歌 -0.2218
    -1.4771 音乐 -0.2218
    -1.4771 抬头 -0.2218
    -1.4771 低头 -0.2218

    \2-grams:
    -1.0000
    百度 0.0000
    -1.0000
    谷歌 0.0000
    -1.0000
    音乐 0.0000
    -1.0000
    抬头 0.0000
    -1.0000
    低头 0.0000
    -0.3010 百度
    -0.3010
    -0.3010 谷歌 -0.3010
    -0.3010 音乐 -0.3010
    -0.3010 抬头 -0.3010
    -0.3010 低头 -0.3010

    \3-grams:
    -0.3010 百度
    -0.3010 谷歌
    -0.3010 音乐
    -0.3010 抬头
    -0.3010 低头

    \end\

    对应的dict内容:
    百度 b ai d u
    谷歌 g u g e
    音乐 y in uxs uxe
    抬头 t ai t ou
    低头 d i t ou

  2. laoyur

    已解决,是我自己调错API了,应该用addNgramSearch加载lm,我直接用demo改的,错误地用addAllphoneSearch加载了lm,导致报错。

发表评论

您的电子邮箱地址不会被公开。