数据准备(快速构建ASR系统)
来源:互联网 发布:房价一直上涨后果 知乎 编辑:程序博客网 时间:2024/05/29 14:49
数据准备在Kaldi官方文档中已经有了较为全面、详尽的说明。然而在自己拿到语音数据后,要快速构建一个简单的ASR语音识别系统,对于新手来说,思路可能并不清晰。下面,以自己的操作过程为例,进行简单的说明。
1. 音频文件
首先需要准备的是音频文件,划分为3部分,分别放在train,dev,test目录下的wav文件夹中。train中的数据作训练用,dev中的作模型调校,test中的作测试。
音频文件建议为采样率16k,位深16bit,单声道的wav文件。
2. 音频相关数据
其他必须提供的音频相关的文件有text,wav.scp,utt2spk。spk2utt可由utt2spk转换得到。
- text
text即音频的转译文本,包含音频中每句话对应的文本信息,格式为:
<utt-id> <text-transcription>
其中,utt-id为语句的id。
- wav.scp
wav.scp将音频文件和对应转译文本关联起来,格式为
<utt-id> <path-of-audio>
- utt2spk
utt2spk将描述了语句的说话人信息,格式为
<utt-id> <speaker-id>
- spk2utt
说话人对应的所有语句,可由以下命令得到
utils/utt2spk_to_spk2utt.pl utt2spk > spk2utt
3. 语言数据
首先需要提供的是音素集,发音词典和语言模型。
音素集,发音词典
根据之前的文章语音识别之发音字典 ,确定音素集phones.txt,并生成发音词典lexicon.txt。语言模型
根据之前的文章构建语言模型(二):模型训练与评估 ,生成apra格式的LM。
然后,需要生成silence_phones.txt, optional_silence.txt, nonsilence_phones.txt
silence_phones.txt
静音音素。写入sil
optional_silence.txt
可选静音音素。写入sil
nonsilence_phones.txt
非静音音素。音素集phones.txt除去silence_phones.txt中的所有音素,不能包含<eps>.
还需要设置oov词,训练过程中,词汇表外的所有词都会被映射成oov。在lexicon中需要加入该oov词及其发音
<SPOKEN_NOISE> sil
4. 训练模型,构建系统
需要准备的数据基本完成,接下来可以在kaldi中调用接口,训练模型(train_mono.sh),生成解码图(mkgraph.sh),并利用测试集数据进行测试(decode.sh)。
5. 音频目录结构,源码
音频相关数据的目录结构,及部分文件如下图所示
源码如下:
#run.sh#!/bin/bash. ./cmd.sh ## You'll want to change cmd.sh to something that will work on your system. ## This relates to the queue.. ./path.shH=`pwd` #exp homen=8 #parallel jobs#corpus and trans directoryspeech_data=/mnt/Corpus/Speech/HUB4CHN#data preparation #generate text, wav.scp, utt2pk, spk2uttlocal/data_prep.sh $H $speech_data || exit 1;#produce MFCC features rm -rf data/mfcc && mkdir -p data/mfcc && cp -R data/{train,dev,test} data/mfcc || exit 1;for x in train dev test; do #make mfcc steps/make_mfcc.sh --nj $n --cmd "$train_cmd" data/mfcc/$x exp/make_mfcc/$x mfcc/$x || exit 1; #compute cmvn steps/compute_cmvn_stats.sh data/mfcc/$x exp/mfcc_cmvn/$x mfcc/$x || exit 1;done#prepare language stuff#build a large lexicon that invovles words in both the training and decoding. ( echo "make word graph ..." cd $H; mkdir -p data/{dict,lang,graph} && \ echo sil > data/dict/silence_phones.txt echo sil > data/dict/optional_silence.txt grep -v -F -f data/dict/silence_phones.txt phones.txt | grep -v '<eps>' | cut -f 1 > data/dict/nonsilence_phones.txt echo -e "<SPOKEN_NOISE>\tsil" | cat - $H/lexicon.txt | sort -u > data/dict/lexicon.txt || exit 1; utils/prepare_lang.sh --position_dependent_phones false data/dict "<SPOKEN_NOISE>" data/local/lang data/lang || exit 1; gzip -c $H/my.lm > data/graph/word.3gram.lm.gz || exit 1; utils/format_lm.sh data/lang data/graph/word.3gram.lm.gz $H/lexicon.txt data/graph/lang || exit 1;)#monophonesteps/train_mono.sh --boost-silence 1.25 --nj $n --cmd "$train_cmd" data/mfcc/train data/lang exp/mono || exit 1; #test monophone model (mkgraph & decode)local/my_decode.sh --mono true --nj $n "steps/decode.sh" exp/mono data/mfcc &#local/data_prep.sh(仅列出关键部分)dir=$1corpus_dir=$2cd $direcho "creating data/{train,dev,test}"mkdir -p data/{train,dev,test}#create wav.scp, utt2spk.scp, spk2utt.scp, text(for x in train dev test; do echo "cleaning data/$x" cd $dir/data/$x rm -rf wav.scp utt2spk spk2utt word.txt phone.txt text echo "preparing scps and text in data/$x" cp $corpus_dir/$x/wav.scp wav.scp cp $corpus_dir/$x/utt2spk utt2spk cp $corpus_dir/$x/text text cp text word.txt sort wav.scp -o wav.scp sort utt2spk -o utt2spk sort text -o textdone) || exit 1utils/utt2spk_to_spk2utt.pl data/train/utt2spk > data/train/spk2uttutils/utt2spk_to_spk2utt.pl data/dev/utt2spk > data/dev/spk2uttutils/utt2spk_to_spk2utt.pl data/test/utt2spk > data/test/spk2utt#local/my_decode.sh(仅列出关键部分)decoder=$1srcdir=$2datadir=$3#decode wordutils/mkgraph.sh $opt data/graph/lang $srcdir $srcdir/graph_word || exit 1;$decoder --cmd "$decode_cmd" --nj $nj $srcdir/graph_word $datadir/test $srcdir/decode_test_word || exit 1
6. 参考文章
- 数据准备-Kaldi官方文档 http://www.kaldi-asr.org/doc/data_prep.html
- Kaldi傻瓜教程-Kaldi官方文档 http://www.kaldi-asr.org/doc/kaldi_for_dummies.html
- 数据准备(快速构建ASR系统)
- 数据备份还原我有妙招----第3集:自动系统恢复(ASR)备份系统
- 数据备份还原我有妙招----第4集:自动系统恢复(ASR)恢复系统
- 构建证券行情分析系统——准备
- D_D系统构建-简述及环境准备
- 构建一个网站(准备)
- WEB应用 信息管理系统 数据分析展示系统 OA办公工作流 快速构建与开发平台
- Google Speech Recognition(ASR)
- 快速构建大数据缓存
- 在kaldi工具包使用小数字语料库创建一个简单的ASR系统(番外篇)
- 语音识别系统-----The Bavieca ASR toolkit
- Spring Boot+JPA+Mysql+ThymeLeaf快速构建CURD系统(三)构建后端
- Spring Boot+JPA+Mysql+ThymeLeaf快速构建CURD系统(四)构建前端
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(15)-权限管理系统准备
- Android系统源代码编译—[3]准备构建
- 信息管理系统 网站后台管理快速构建
- spring boot快速构建权限系统
- 地址空间随机化(ASR)学习
- 前台Activity旋转,后台Activity被销毁
- 查看论文是否被ISTP、EI检索
- 自定义$resource指令
- 如何为WebStorm设置炫酷黑色主题
- linux下的存储管理之一
- 数据准备(快速构建ASR系统)
- 电脑开机弹出winlogon.exe 应用程序错误的对话框
- iOS音频播放之AudioQueue(终结篇):缓存系统的实现
- # 转:手机触屏触摸特效javascript-TouchSwipe(依赖于jquery库)中文说明
- EF实体数据无法修改之 this .Configuration.AutoDetectChangesEnabled = true ; 要看的链接
- 基于 Nginx 的软件负载均衡实现解读
- I2C标准协议
- 单位转化 dp px sp dip
- java_websocket详解(一)