美文网首页
【kaldi学习.3】CVTE开源了kaldi中文模型

【kaldi学习.3】CVTE开源了kaldi中文模型

作者: Colleen_oh | 来源:发表于2019-05-06 11:57 被阅读0次

    近期在学习kaldi,然后某位大神给我推了这个CVTE开源了kaldi中文模型,网址[http://www.bzwaxx.com/xw-3/37323160.htm]
    下载地址http://kaldi-asr.org/models/0002_cvte_chain_model.tar.gz


    看了这个模型感觉好强大的样子,如果可以直接使用,对于开源来说,是一件莫大的好事呀!!


    image.png

    这上面有8个模型,感觉好酷。下面让我们来体验一下这个强大的中文模型。

    kaldi的安装https://www.jianshu.com/p/e337120c5885
    kaldi运行实例:https://www.jianshu.com/p/85a897fefa3a

    一、CVTE文件结构

    二、运行cvte模型

    把cvte模型下载下来后,把整个文件放到kaldi-trunk/egs路径下,然后解压

    $ cd kaldi/kaldi-trunk/egs
    $ unzip cvte.zip 
    

    解压完后,我们要先把一些重要的文件拷贝到cvte去,要在egs的目录下进行复制。

    $ cp -r wsj/s5/steps cvte/s5/steps 
    $ cp -r wsj/s5/utils cvte/s5/utils
    

    下面就是稍微更改一下s5/utils/lang/check_phones_compatible.sh中的if语句中的exit 1:

    $ cd cvte/s5/utils/lang
    $ vim check_phones_compatible.sh#自行进行修改
    

    修改成上图那样后,就可以开始运行示例脚本了,记得要回到s5路径下。

    $ ./run.sh#这两条代码二选一即可
    $ sudo sh ./run.sh
    

    我们可以自行查看结果,在exp相应的路径下,

    三、通过CVTE转音频数据

    这个环节我们就可以用我们自己的数据了,下面让我们来看看直接运用CVTE来预测我们自己的数据吧。
    数据要求是16-bit位深,采样率16000Hz,单声道,wav格式
    然后把数据放到某个路径下,比如比如: s5/data/wav/S0027

    n2@ubuntu:/kaldi/kaldi-trunk/egs/cvte/s5/data/wav/S0027$ ls
    BAC009S0027W0121.wav  BAC009S0027W0122.wav  BAC009S0027W0123.wav  BAC009S0027W0124.wav
    

    上面的数据是AISHElLL的几条数据

    需要创建文件,存放在data/fbank/test路径下

    我们要创建三个文件,分别是text,wav.scp,utt2spk,在创建之前,以防出错,我们先把之前的文件做个备份。

    $ cp text text_bak
    $ cp wav.scp wav_bak.scp
    $ cp utt2spk utt2spk_bak
    

    修改text文件

    这个文件的格式是:
    <speaker_id>-<utterance-id> transcription
    每行的第一项是发音编号(utterance-id), 可以是任意的文本字符串(如果设置中还包含说话人信息, 则应该把说话人编号(speaker-id)作为发音编号的前缀,和utterance-id以破折号"-"隔开)。这对于音频文件的排序非常重要。发音编号后面跟着的是每段发音的标注。你不用保证这里出现的每一个字都出现在你的词汇表中。词汇表之外的词会被映射到oov.txt 中。
    text文件修改成下面那样

    audio_BAC009S0027W0121  一二 线 城市 已 成为 房企 主要 阵地
    audio_BAC009S0027W0122  随着 信贷 及 调控 政策 的 进一步 放松
    audio_BAC009S0027W0123  房企 将 调整 策略 加大 拿 地步 伐
    audio_BAC009S0027W0124  二零一五 年 开局 土地 市场 热度 有 望 延续
    

    修改wav.scp

    这个文件的格式是:
    <recording-id> <extended-filename>
    其中, extended-filename 是一个实际的文件名, 或者一段提取wav格式文件的命令。
    在这里 wav.scp 每一行的第一项就是发音编号,即recording-id等于utterance-id。
    修改后成下面那样:

    audio_BAC009S0027W0121  /kaldi/kaldi-trunk/egs/cvte/s5/data/wav/audio/BAC009S0027W0121.wav
    audio_BAC009S0027W0122  /kaldi/kaldi-trunk/egs/cvte/s5/data/wav/audio/BAC009S0027W0122.wav
    audio_BAC009S0027W0123  /kaldi/kaldi-trunk/egs/cvte/s5/data/wav/audio/BAC009S0027W0123.wav
    audio_BAC009S0027W0124  /kaldi/kaldi-trunk/egs/cvte/s5/data/wav/audio/BAC009S0027W0124.wav
    

    修改utt2spk文件

    该文件指明某一段发音是哪一个说话人发出的。格式是:
    <utterance-id> <speaker-id>
    注意一点,说话人编号并不需要与说话人实际的名字完全一致——只需要大概能够猜出来就行。在这种情况下,我们假定每一个说话方(电话对话的每一方)对应一个说话人。这可能不完全正确—— 有时一个说话人会把电话交给另外一个说话人,或者同一个说话人会在不同的对话中出现——但是上述假定对我们来说也足够用了。如果完全没有关于说话人的信息, 可以把发音编号当做说话人编号。那么对应的文件格式就变为<utterance-id> <utterance-id>。
    修改后是下面那样:

    audio_BAC009S0027W0121  audio_BAC009S0027W0121
    audio_BAC009S0027W0122  audio_BAC009S0027W0122
    audio_BAC009S0027W0123  audio_BAC009S0027W0123
    audio_BAC009S0027W0124  audio_BAC009S0027W0124
    

    上述所有文件都应该按照utterance-id排序。如果没有排序, 运行脚本的时候就会出现错误。

    不需要手动创建的文件

    我们要通过utt2spk 创建 spk2utt 文件,要先回到s5目录下。

    $ utils/utt2spk_to_spk2utt.pl data/fbank/test/utt2spk > data/fbank/test/spk2utt
    
    Invalid line in utt2spk file: #会报错
    

    都第一次出现报错。。是因为我的utt2spk文件里面有空行。。。所以报错,然后我把空行删除掉,就没事了,就不会再报错了。

    最后需要移除旧测试数据产生的cmvn.scp, 否则后续执行steps/make_mfcc.sh的时候代码会自动去检查cmvn.scp与utt2spk的一致性, 导致冲突error.记得从s5目录去到test目录下。不然找不到文件。

    $ cd data/fbank/test
    $ rm cmvn.scp
    

    做好上面的准备工作后,我们就可以运行等待结果了。

    $ ./run.sh#这两条代码二选一即可
    $ sudo sh ./run.sh
    

    好啦 这篇文章就到这里啦 ,下面我将研究一下在docker下安装kaldi。

    下面的文章很值得我们去学习呀!!
    参考:
    https://blog.csdn.net/tcx1992/article/details/85717100
    https://blog.csdn.net/buki26/article/details/83272598

    相关文章

      网友评论

          本文标题:【kaldi学习.3】CVTE开源了kaldi中文模型

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