yesorno案例

s5/run.sh为完整脚本,下面分别解析每个步骤

1. 指定训练/解码脚本

-d 判断是否为目录 更多命令
命令之间使用 || 连接,实现逻辑或的功能。 linux中的分号&&和&,|和||说明与用法

只有在 || 左边的命令返回假(命令返回值$? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。
只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。 –直到返回真的地方停止执行。

如果没有数据,下载+解压

#!/bin/bash

train_cmd="utils/run.pl"
decode_cmd="utils/run.pl"

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

2. 数据准备

train_yesno=train_yesno
test_base_name=test_yesno

rm -rf data exp mfcc

# Data preparation

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

2.1 prepare_data.sh

create_yesno_waves_test_train.pl 输出路径 ./kaldi/egs/yesno/s5/data/local

../../local/create_yesno_waves_test_train.pl waves_all.list waves.test waves.train

三个参数:第一个全路径,第二个test,第三个train
功能:读取全部文件,一半训练一半测试

chomp($l); #  perl函数,去掉换行符

create_yesno_wav_scp.pl / create_yesno_txt.pl 处理各种文件路径

2.2 prepare_dict.sh

准备词汇表,不发声的SIL

2.3 prepare_lang.sh

准备语言模型

3. 特征提取

# Feature extraction
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 # Compute cepstral mean and variance statistics per speaker.
 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

4. 训练

steps/train_mono.sh --nj 1 --cmd "$train_cmd" \
  --totgauss 400 \
  data/train_yesno data/lang exp/mono0a

5. 生成HCLG图

utils/mkgraph.sh data/lang_test_tg exp/mono0a exp/mono0a/graph_tgpr

6. 解码

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

7.评估

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

结果可视化

你可能感兴趣的:(yesorno案例)