通过在现有声学模型中加入特定的适应数据,来改进现有声学模型以满足特定场合需求。这种适应声学模型的方法有时比重新训练新的声学模型效果还要好。 通常由于不同的解码器(如pocketsphinx和sphinx4)使用不同声学模型,因此对应适应声学模型的方法也是不同的。

1 创建适应语料库

1.1 需要的文件

arctic20.fileids :记录要使用哪些语音文件

arctic20.transcription :记录句子和语音文件对应关系

1.2 录制语音文件

此处音频文件采样率16KHz,16bit单声道录音,而且是wav格式。

最简单录音方式是使用录音软件Audacity 或者Wavesurfer,一次把20句全部记录下来,然后再按照句子分割保存。

当然,也可以用linux命令行命令rec进行录音。

当记录下这20个wav格式文件之后,我们可以用下面命令播放下每个音频文件,看看是否正常:

for i in *.wav; do play $i; done

2 适应语音模型

2.1 复制PocketSphinx现有声学模型到当前工作目录

cp -a /usr/local/share/pocketsphinx/model/en-us/en-us .

为测试,再拷贝lm和字典文件,

cp -a /usr/local/share/pocketsphinx/model/en-us/cmudict-en-us.dict .

cp -a /usr/local/share/pocketsphinx/model/en-us/en-us.lm.bin .

2.2 生成声学特征文件

从录制的WAV格式语音文件中提取MFCC声纹特征,这个操作必须确保用与现有声学模型相同声学参数提取声纹。

sphinx_fe -argfile en-us/feat.params -samprate 16000 -c arctic20.fileids -di . -do . -ei wav -eo mfc -mswav yes

这条命令执行后,你将会看到20个对应的扩展名为mfc的文件。

2.3 转化sendump和mdef文件

有些模型要做适应的话还需要一些数据,但是为了节省空间pocketsphinx没有包含这些东西,需要从其它地方下载,对于en-us模型我们从这里下载完整版本:cmusphinx-en-us-ptm-5.2.tar.gz

解压下载的包,从中拷贝mixture_weights到你的声学模型(这里是en-us)中。

cp cmusphinx-en-us-ptm-5.2/mixture_weights en-us/

然后我们把声学模型的mdef文件转换为SphinxTrain训练工具可以使用的plain text格式:

pocketsphinx_mdef_convert -text en-us/mdef en-us/mdef.txt

2.4 累加观测序列

使用SphinxTrain生成的bw工具去收集适应数据的统计数据。

拷贝bw工具到当前工作目录:

cp /usr/local/libexec/sphinxtrain/bw .

然后执行如下命令:

./bw  -hmmdir en-us  -moddeffn en-us/mdef.txt  -ts2cbfn .ptm.  -feat 1s_c_d_dd  -svspec 0-12/13-25/26-38  -cmn current  -agc none  -dictfn cmudict-en-us.dict  -ctlfn arctic20.fileids  -lsnfn arctic20.transcription  -accumdir .

注意:确保bw的参数和现有声学模型目录的feat.params文件一致;

2.5 创建MLLR(似然线性回归算法)变换

MLLR是一种有效的轻量级的自适应方法,尤其是当样本数据集较小时候。在线适应中使用MLLR是一种比较好的方式。MLLR在连续模型中表现得比较好,但是因为半连续模型很依赖混合权重,所以它的效果有限。如果想得到最好的准确度,最好将MLLR适应和MAP适应两种方法结合起来。

下面我们使用命令生成MLLR变换,并在运行时将其传入解码器去适应声学模型:

拷贝sphinxtrain的工具mllr_solve到当前目录

cp /usr/local/libexec/sphinxtrain/mllr_solve .

接着执行:

./mllr_solve     -meanfn en-us/means     -varfn en-us/variances     -outmllrfn mllr_matrix -accumdir .

这个命令行会产生一个名叫mllr_matrix的适应数据文件。如果我们需要使用这个适应模型,那就可以通过给pocketsphinx命令行参数添加 -mllr mllr_matrix。

2.6 使用MAP更新现有声学模型文件

拷贝sphinxtrain的工具map_adapt到当前目录

cp /usr/local/libexec/sphinxtrain/map_adapt .

我们将原来的声学模型目录拷贝为一个新的模型目录:

cp -rf en-us en-us-adapt

接着执行命令:

./map_adapt     -moddeffn en-us/mdef.txt     -ts2cbfn .ptm.     -meanfn en-us/means     -varfn en-us/variances     -mixwfn en-us/mixture_weights     -tmatfn en-us/transition_matrices     -accumdir .     -mapmeanfn en-us-adapt/means     -mapvarfn en-us-adapt/variances     -mapmixwfn en-us-adapt/mixture_weights     -maptmatfn en-us-adapt/transition_matrices

2.7 重新创建senddump文件

通过已经更新的mixture_weights文件来重新创建 sendump文件,

拷贝sphinxtrain的工具mk_s2sendump到当前目录

cp /usr/local/libexec/sphinxtrain/mk_s2sendump .

然后执行下面命令:

./mk_s2sendump     -pocketsphinx yes     -moddeffn en-us-adapt/mdef.txt     -mixwfn en-us-adapt/mixture_weights     -sendumpfn en-us-adapt/sendump

3 测试适应语言模型

适应过程完成后,新的适应声学模型位于目录en-us-adapt,该目录下应该有这些文件:

├── feat.params
├── mdef
├── mdef.txt
├── means
├── mixture_weights
├── noisedict
├── README
├── sendump
├── transition_matrices

└── variances

然后,通过下面命令测试新适应的声学模型(en-us-adapt),可以验证对你录制文件的识别率,如:

pocketsphinx_continuous -hmm en-us-adapt/ -lm en-us.lm.bin -dict cmudict-en-us.dict -infile arctic_0008.wav

可以看看旧的声学模型模型(en-us)识别率,

pocketsphinx_continuous -hmm en-us/ -lm en-us.lm.bin -dict cmudict-en-us.dict -infile arctic_0008.wav

实验结果表明,适应出来的新模型确实识别率提高不少;真的是适应了你的声音,即使发音不太准也可使用。

CMUSphinx适应声学模型相关推荐

  1. PocketSphinx语音识别系统声学模型的训练与使用

    PocketSphinx语音识别系统声学模型的训练与使用 zouxy09@qq.com http://blog.csdn.net/zouxy09 声学模型主要用于计算语音特征和每个发音模板之间的似然度 ...

  2. pocketsphinx 模型库_[转] PocketSphinx语音识别系统声学模型的训练与使用

    PocketSphinx语音识别系统声学模型的训练与使用 声学模型主要用于计算语音特征和每个发音模板之间的似然度.目的是为每个声学单元建立一套模型参数(通过不断地学习和改进得到最优的,也就是概率最大的 ...

  3. CMUSphinx免费离线语音识别开源库教程iOS开发

    CMUSphinx开源语音识别工具包,可以基于CMUSphinx开发iOS版本的语音识别和语音合成库. 本文介绍的语音识别库使您可以轻松快速地将多种语言的离线语音识别和合成语音添加到iOS应用程序中. ...

  4. 语音识别的基础知识与CMUsphinx介绍

    语音识别的基础知识与CMUsphinx介绍 语音识别技术就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的技术. 基于语音识别芯片的嵌入式产品也越来越多,如Sensory公司的RSC系列语 ...

  5. window下使用CMUSphinx实现中文识别

    上一篇博客已经介绍了在Window系统下安装CMUSphinx,https://blog.csdn.net/zxy13826134783/article/details/103642266 测试环境: ...

  6. CMUSphinx 构建语言模型

    描述语言的模型常见的有关键词列表,语法,统计语言模型,你可以基于你的使用场合选用不同解码方式,也可在运行过程在不同模型间切换. 关键词列表和语法模型属于小众模型,以下主要描述统计语言模型的使用. 构建 ...

  7. 六、改进现有的声学模型

     改进现有的声学模型    Jiangdg_VIP http://blog.csdn.net/u012637501 译自:http://cmusphinx.sourceforge.net/wiki/t ...

  8. 开源语音识别工具包 - CMUSphinx

    开源语音识别工具包 - CMUSphinx 开源语音识别工具包 语音识别简介 语音的构成 识别过程 模型 其他概念 CMU Sphinx 简介 Sphinx初体验 下载 编译 运行 开源语音识别工具包 ...

  9. 腾讯 AI Lab副主任俞栋:过去两年基于深度学习的声学模型进展

    来源:腾讯AI Lab 概要:过去几年里,自动语音识别(ASR)已经取得了重大的进步 .这些进步让 ASR 系统越过了许多真实场景应用所需的门槛,催生出了 Google Now.微软小娜和亚马逊 Al ...

  10. 3月16日云栖精选夜读:显著超越流行长短时记忆网络,阿里提出DFSMN语音识别声学模型...

    在语音顶会ICASSP,阿里巴巴语音交互智能团队的poster论文提出一种改进的前馈序列记忆神经网络结构,称之为深层前馈序列记忆神经网络(DFSMN).研究人员进一步将深层前馈序列记忆神经网络和低帧率 ...

最新文章

  1. html创建php,php-从html创建图像
  2. NameNode任务线程之FSNamesystem$ReplicationMonitor
  3. ZQCNN快速人脸检测
  4. error.html mp4,HTML Video error用法及代码示例
  5. 【C++ Priemr | 15】面向对象程序设计
  6. 《netty入门与实战》笔记-02:服务端启动流程
  7. 定义下一代存储,打造全新一代数据基础设施
  8. stm32 NVIC EXTI
  9. 什么是函数式编程思维?
  10. OpenGL(二)——OpenGL图形绘制
  11. html5声音播放音乐,HTML5 煽情的音乐播放器和音频可视化
  12. R语言之——字符串处理函数
  13. Drupal7 常用配置
  14. JS 转换格林尼治时间
  15. 【AnySDK】接入必读及常见问题
  16. 2015.11--360校招面试-后台C++开发工程师
  17. 警告: 忽略额外的图例条目
  18. ChatGPT账号注册,中国手机号为什么不行?
  19. ArcGIS_栅格数据归一化
  20. 使用Tycho构建OSGi插件项目

热门文章

  1. c语言保龄球计分系统课程设计,[C语言课程设计保龄球积分.doc
  2. <Halcon> 区域划分算子partition_dynamic和partition_rectangle
  3. 新版win10的恢复语言栏设置
  4. F.conv2d pytorch卷积计算
  5. 机工士姆斯塔迪奥(20分)
  6. Combating Web Spam with TrustRank的实验
  7. python3学习笔记---类
  8. 网页编程----HTML网页编程
  9. 数学建模——时间序列预测(股价预测)
  10. offset 和 零点的一点解释