调整pocketsphinx中文声学模型

调整pocketsphinx中文声学模型
以下操作基本都是按照wiki的步骤一步一步进行的,仅做记录。

  1. 创建语料库
    arctic20.txt 文本文件:里面是中文的句子
    arctic20.fileids控制文件:记录我的语音文件(读arctic20.txt里面的句子的录音)的路径
    arctic20.transcription脚本文件:中文句子和语音文件的对应
    arctic20.dic 字典文件:记录arctic20.txt里面的句子的因素组成
# arctic20.txt 准备录音的20个句子
今天我来到了北京天安门
你太让我失望了
举起你们的双手摇起来
他确定要这么做吗
盼望着盼望着东风来了春天的脚步近了
请打开我的电脑
这个液晶显示器有点贵
下午去购物怎么样
我们发现了一个新大陆
我想遨游在音乐的世界里
今天的天气还不错啊
什么时候人类能踏上火星的土地
物理学的大厦将会越来越高
地铁比公交车更快更方便
你愿意来我的公司上班吗
你的孩子多大了
让我们荡起双浆
毫无疑问这是一次机遇
我时刻在准备着
等了这么久这一天终于到来了
# arctic20.fileids 20个句子对应的录音文件名
arctic_0001
arctic_0002
arctic_0003
arctic_0004
arctic_0005
arctic_0006
arctic_0007
arctic_0008
arctic_0009
arctic_0010
arctic_0011
arctic_0012
arctic_0013
arctic_0014
arctic_0015
arctic_0016
arctic_0017
arctic_0018
arctic_0019
arctic_0020
# arctic20.transcription脚本文件 每个文件对应的内容
<s> 今天我来到了北京天安门 </s> (arctic_0001)
<s> 你太让我失望了 </s> (arctic_0002)
<s> 举起你们的双手摇起来 </s> (arctic_0003)
<s> 他确定要这么做吗 </s> (arctic_0004)
<s> 盼望着盼望着东风来了春天的脚步近了 </s> (arctic_0005)
<s> 请打开我的电脑 </s> (arctic_0006)
<s> 这个液晶显示器有点贵 </s> (arctic_0007)
<s> 下午去购物怎么样 </s> (arctic_0008)
<s> 我们发现了一个新大陆 </s> (arctic_0009)
<s> 我想遨游在音乐的世界里 </s> (arctic_0010)
<s> 今天的天气还不错啊 </s> (arctic_0011)
<s> 什么时候人类能踏上火星的土地 </s> (arctic_0012)
<s> 物理学的大厦将会越来越高 </s> (arctic_0013)
<s> 地铁比公交车更快更方便 </s> (arctic_0014)
<s> 你愿意来我的公司上班吗 </s> (arctic_0015)
<s> 你的孩子多大了 </s> (arctic_0016)
<s> 让我们荡起双浆 </s> (arctic_0017)
<s> 毫无疑问这是一次机遇 </s> (arctic_0018)
<s> 我时刻在准备着 </s> (arctic_0019)
<s> 等了这么久这一天终于到来了 </s> (arctic_0020)
# arctic20.dic 字典文件 每个句子的组成,参考pocketsphinx的中文字典
今天我来到了北京天安门 uu uo3 j in1 t ian1 l ai2 d ao4 l e5 b ei3 j ing1 t ian1 aa an1 m en2
你太让我失望了 n i3 t ai4 r ang4 uu uo3 sh ix1 uu uang4 l e5
举起你们的双手摇起来 j v3 q i3 n i3 m en5 d e5 sh uang1 sh ou3 ii iao2 q i3 l ai2 
他确定要这么做吗 t a1 q ve4 d ing4 ii iao4 zh e4 m e5 z uo4 m a5
盼望着盼望着东风来了春天的脚步近了 p an4 uu uang4 zh e5 p an4 uu uang4 zh e5 d ong1 f eng1 l ai2 l e5 ch un1 t ian1 d e5 j iao3 b u4 j in4 l e5
请打开我的电脑 q ing3 d a3 k ai1 uu uo3 d e5 d ian4 n ao3
这个液晶显示器有点贵 zh e5 g e4 ii ie4 j ing1 x ian3 sh ix4 q i4 ii iu3 d ian3 g ui4
下午去购物怎么样 x ia4 uu u3 q u4 g ou4 uu u4 z en3 m e5 ii iang4
我们发现了一个新大陆 uu uo3 m en5 f a1 x ian4 l e5 ii i1 g e5 x in1 d a4 l u4
我想遨游在音乐的世界里 uu uo3 x iang3 aa ao2 ii iu2 z ai4 ii in1 vv ve4 d e5 sh ix4 j ie4 l i3 
今天的天气还不错啊 j in1 t ian1 d e5 t ian1 q i4 h ai2 b u2 c uo4 aa a5
什么时候人类能踏上火星的土地 sh en2 m e5 sh ix2 h ou5 r en2 l ei4 n eng2 t a4 sh ang4 h uo3 x ing1 d e5 t u3 d i4
物理学的大厦将会越来越高 uu u4 l i3 x ve2 d e5 d a4 sh a4 j iang1 h ui4 vv ve4 l ai2 vv ve4 g ao1
地铁比公交车更快更方便 d i4 t ie3 b i3 g ong1 j iao1 ch e1 g eng4 k uai4 g eng4 f ang1 b ian4
你愿意来我的公司上班吗 n i3 vv van4 ii i4 l ai2 uu uo3 d e5 g ong1 s iy1 sh ang4 b an1 m a5
你的孩子多大了 n i3 d e5 h ai2 z iy5 d uo1 d a4 l e5
让我们荡起双浆 r ang4 uu uo3 m en5 d ang4 q i3 sh uang1 j iang3
毫无疑问这是一次机遇 h ao2 uu u2 ii i2 uu un4 zh e4 sh ix4 ii i1 c iy4 j i1 vv v4 
我时刻在准备着 uu uo3 sh ix2 k e4 z ai4 zh un3 b ei4 zh e5
等了这么久这一天终于到来了 d eng3 l e5 zh e4 m e5 j iu3 zh e4 ii i1 t ian1 zh ong1 vv v2 l ai2 d ao4 l e5

准备录音文件,使用下面的脚本进行录音(需要先安装sox):

#!/bin/bash

for i in `seq 1 20`; do
    fn=`printf arctic_%04d $i`;
    read sent; 
    echo $sent;
    rec -r 16000 -e signed-integer -b 16 -c 1 $fn.wav 2>/dev/null;
done < arctic20.txt

录音后使用下面的脚本进行播放检查:

#!/bin/bash

for i in *.wav;do
    read sent; 
    echo $sent; 
    play $i; 
done < arctic20.txt

此时,文件夹中应该有如下文件:

arctic20.dic
arctic20.fileids
arctic20.transcription
arctic20.txt
arctic_0001.wav
...
arctic_0020.wav
  1. 调整声学模型
    将现在的中文声学模型、语言模型、字典文件复制到当前目录下。
  • 生成声学特征文件
    使用sphinxbase中的sphinx_fe工具对wav录音文件进行特征提取,须确保使用与训练标准声学模型相同的声学参数,存储在feat.params文件中。
sphinx_fe -argfile zh_cn.cd_cont_5000/feat.params -samprate 16000 -c arctic20.fileids -di . -do . -ei wav -eo mfc -mswav yes

执行后会为每个录音文件生成mfc特征文件

  • 转换sendump和mdef文件


    image.png

    根据文档说明,有一些模型是以压缩模式发行的,适应所需的其他文件被排除在外,以节省空间。需确保使用的是带有完整mixture_weights文件的完整模型。
    接下来使用pocketsphinx_mdef_convert将mdef文件从声学模型转换为SphinxTrain工具使用的纯文本格式:

pocketsphinx_mdef_convert -text zh_cn.cd_cont_5000/mdef zh_cn.cd_cont_5000/mdef.txt
  • 累加观察序列
    通过SphinxTrain训练工具带的bw程序去收集适应数据的统计数据。将bw、map_adapt、mllr_solve、mk_s2sendump程序一起复制到当前目录下,程序在下载的sphinxtrain-5prealpha.tar.gz包中。
cp /home/lhy/Downloads/pocketsphinx/sphinxtrain/src/programs/bw/.libs/bw .
cp /home/lhy/Downloads/pocketsphinx/sphinxtrain/src/programs/map_adapt/.libs/map_adapt .
cp /home/lhy/Downloads/pocketsphinx/sphinxtrain/src/programs/mk_s2sendump/.libs/mk_s2sendump .
cp /home/lhy/Downloads/pocketsphinx/sphinxtrain/src/programs/mllr_solve/.libs/mllr_solve .

运行命令收集统计信息,应确保参数与feat.params文件中的参数相匹配:

./bw \
 -hmmdir zh_cn.cd_cont_5000 \
 -moddeffn zh_cn.cd_cont_5000/mdef.txt \
 -ts2cbfn .cont. \
 -feat 1s_c_d_dd \
 -cmn batch \
 -agc none \
 -dictfn zh_cn.dic \
 -ctlfn arctic20.fileids \
 -lsnfn arctic20.transcription \
 -lda zh_cn.cd_cont_5000/feature_transform \
 -accumdir .
  • 使用MLLR创建转换
    image.png

    接下来,我们将生成MLLR转换,并将其传递给解码器以在运行时调整声学模型
./mllr_solve \
    -meanfn zh_cn.cd_cont_5000/means \
    -varfn zh_cn.cd_cont_5000/variances \
    -outmllrfn mllr_matrix -accumdir .

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

  • 使用MAP更新声学模型文件
    复制声学模型目录,并使用改编的模型文件覆盖新创建的目录
cp -r zh_cn.cd_cont_5000 zh_cn_adapt

运行map_adapt命令:

./map_adapt \
    -moddeffn zh_cn.cd_cont_5000/mdef.txt \
    -ts2cbfn .ptm. \
    -meanfn zh_cn.cd_cont_5000/means \
    -varfn zh_cn.cd_cont_5000/variances \
    -mixwfn zh_cn.cd_cont_5000/mixture_weights \
    -tmatfn zh_cn.cd_cont_5000/transition_matrices \
    -accumdir . \
    -mapmeanfn zh_cn_adapt/means \
    -mapvarfn zh_cn_adapt/variances \
    -mapmixwfn zh_cn_adapt/mixture_weights \
    -maptmatfn zh_cn_adapt/transition_matrices
  • 重新创建适应的sendump文件
    通过已经更新的mixture_weights文件来重新创建 sendump文件
./mk_s2sendump \
    -pocketsphinx yes \
    -moddeffn zh_cn_adapt/mdef.txt \
    -mixwfn zh_cn_adapt/mixture_weights \
    -sendumpfn zh_cn_adapt/sendump

到现在已经拥有了一个经过调整的声学模型,解码器不使用mixture_weights和mdef.txt文件,可以删除以节省空间。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容

  • 一.Linux目录结构 1.存放命令相关的目录 bin 普通用户使用的命令/bin/ls,/bin/date sb...
    Letit_4c98阅读 158评论 0 0
  • HDFS简介 HDFS是Hadoop分布式文件系统,是Apache Hadoop Core项目的一部...
    FGCore阅读 140评论 0 1
  • 1. NFS客户端挂载命令 2. NFS客户端挂载命令参数说明 在NFS服务器端可以通过cat /var/lib/...
    阿丧小威阅读 3,056评论 0 0
  • Standard OTC—了解付款渠道 问题 首先,为什么我们仍然需要在区块链之外进行交易?使用比特币的人们正在寻...
    Ligo9阅读 159评论 0 0
  • 抗疫情,我们也在路上…… ——在家上课的日子 农历的正月...
    白衣易安焉知卿相阅读 298评论 0 0