美文网首页
调整pocketsphinx中文声学模型

调整pocketsphinx中文声学模型

作者: Toplhyi | 来源:发表于2020-03-05 21:09 被阅读0次

    调整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文件,可以删除以节省空间。

    相关文章

      网友评论

          本文标题:调整pocketsphinx中文声学模型

          本文链接:https://www.haomeiwen.com/subject/krrxrhtx.html