kaldi-yesno代码学习1

1. run.sh

#!/bin/bash

# run.pl 代码执行队列设置
train_cmd="utils/run.pl"
decode_cmd="utils/run.pl"

# 判断数据集是否存在 在s5路径下运行代码,检查当前目录下waves_yesno文件是否存在 不存在则下载yesno数据集
if [ ! -d waves_yesno ]; then
  wget http://www.openslr.org/resources/1/waves_yesno.tar.gz || exit 1;
  # was:
  # wget http://sourceforge.net/projects/kaldi/files/waves_yesno.tar.gz || exit 1;
  tar -xvzf waves_yesno.tar.gz || exit 1;
fi

# 设置训练测试文件夹 变量赋值
train_yesno=train_yesno
test_base_name=test_yesno

# 层级删除data exp mfcc三个文件  文件不存在不会报错,存在则删除,代码运行会生成这三个文件夹,存储一些文件信息,
# 重新运行需要先将这三个文件夹删除
rm -rf data exp mfcc

# Data preparation   数据准备

# 执行prepare_data.sh  需要传递waves_yesno文件   文件内存储的是60个(0_0_0_0_1_1_1_1.wav )音频数据
# 运行结果:四个文件---text、wav.scp  utt2spk   spk2utt
local/prepare_data.sh waves_yesno
# 准备字典
local/prepare_dict.sh
# 语言相关文件
utils/prepare_lang.sh --position-dependent-phones false data/local/dict "" data/local/lang data/lang
# 准备语言模型
local/prepare_lm.sh

# Feature extraction   特征提取
# 遍历train_yesno test_yesno 文件夹 对这两个文件夹里面的wav数据分别做mfcc特征提取
for x in train_yesno test_yesno; do 
 steps/make_mfcc.sh --nj 1 data/$x exp/make_mfcc/$x mfcc
 steps/compute_cmvn_stats.sh data/$x exp/make_mfcc/$x mfcc
 utils/fix_data_dir.sh data/$x
done

# Mono training   单因素训练
steps/train_mono.sh --nj 1 --cmd "$train_cmd" \
  --totgauss 400 \
  data/train_yesno data/lang exp/mono0a 
  
# Graph compilation    编译
utils/mkgraph.sh data/lang_test_tg exp/mono0a exp/mono0a/graph_tgpr

# Decoding   解码
steps/decode.sh --nj 1 --cmd "$decode_cmd" \
    exp/mono0a/graph_tgpr data/test_yesno exp/mono0a/decode_test_yesno

# 结果展示
for x in exp/*/decode*; do [ -d $x ] && grep WER $x/wer_* | utils/best_wer.sh; done

2. local/prepare_data.sh waves_yesno

#!/bin/bash

# 层级创建文件夹 准备存放生成的文件
mkdir -p data/local
local=`pwd`/local         # s5/local
scripts=`pwd`/scripts   # s5/scripts

# 设置环境变量
export PATH=$PATH:`pwd`/../../../tools/irstlm/bin

echo "Preparing train and test data"

# 设置变量
train_base_name=train_yesno
test_base_name=test_yesno
waves_dir=$1    # local/prepare_data.sh waves_yesno   $1=waves_yesno

# 将waves_yesno文件夹里面的所有文件的文件名显示输出并重定向到waves_all.list文件中
ls -1 $waves_dir > data/local/waves_all.list

# 当前目录从s5跳转到s5/data/local目录中
cd data/local

# 传递waves_all.list,生成两个文件  waves.test(测试集部分) waves.train (训练集部分)  【分割数据集】
../../local/create_yesno_waves_test_train.pl waves_all.list waves.test waves.train   

# 运行产生文件内容: 文件名前缀(0_0_0_0_1_1_1_1) 空格  waves_yesno/文件名(具体路径)
../../local/create_yesno_wav_scp.pl ${waves_dir} waves.test > ${test_base_name}_wav.scp

# 同上  
../../local/create_yesno_wav_scp.pl ${waves_dir} waves.train > ${train_base_name}_wav.scp

# 保存成 文件名前缀0_0_0_0_1_1_1_1-(space)->NO NO NO NO YES  YES YES YES  进行对应
../../local/create_yesno_txt.pl waves.test > ${test_base_name}.txt

../../local/create_yesno_txt.pl waves.train > ${train_base_name}.txt

cp ../../input/task.arpabo lm_tg.arpa

# 退回到s5目录
cd ../..

# This stage was copied from WSJ example
# 将wav.scp  text utt2spk  spk2utt文件复制到train test两个数据集文件夹中
for x in train_yesno test_yesno; do 
  mkdir -p data/$x
  cp data/local/${x}_wav.scp data/$x/wav.scp
  cp data/local/$x.txt data/$x/text
  cat data/$x/text | awk '{printf("%s global\n", $1);}' > data/$x/utt2spk
  utils/utt2spk_to_spk2utt.pl data/$x/spk2utt
done

待更新。。。

你可能感兴趣的:(kaldi,kaldi,yesno)