近期在学习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
网友评论