./utils/subset_data_dir_tr_cv.shy脚本分析,用于划分训练集和验证集。

./utils/subset_data_dir_tr_cv.sh脚本分析

这个脚本的作用是根据说话人来划分数据集,分为训练集和验证集。

使用代码的结构如下:

Usage: $0 [opts] <src-data> <train-data> <cv-data>

src_data:指的就是原始的数据集合
trn_data:指的是划分的训练集合
cv_data:指的是划分的验证集合

可选项有两个:
–cv-spk-percent N (default 10):
第一个是默认选项,并且值默认为10。第一个选项的意思就是按照说话人的比例来划分数据集。比如说默认情况的N=10,也就是随机将10%的说话人对应的utt话语划分为验证集,剩余90%的说话人对应的utt话语划分为训练集。
–cv-spk-list (a pre-defined list with cv speakers)
对于受干扰的数据,我们没办法直接按照比例去进行划分,所以我们通过传入验证集的说话人列表,将list中的说话人对应的utt划分为验证集,其余的说话人集是训练集。

首先我们来看没有传入spk-list的情况,也就是按照比例划分训练集和验证集

 38 if [ -z "$cv_spk_list" ]; then
 39   # Select 'cv_spk_percent' speakers randomly,
 40   cat $src_data/spk2utt | awk '{ print $1; }' | utils/shuffle_list.pl     --srand $seed >$tmp/speakers
 41   n_spk=$(wc -l <$tmp/speakers)
 42   n_spk_cv=$(perl -e "print int($cv_spk_percent * $n_spk / 100); ")
 43   #
 44   head -n $n_spk_cv $tmp/speakers >$tmp/speakers_cv
 45   tail -n+$((n_spk_cv+1)) $tmp/speakers >$tmp/speakers_trn

38行:[ -z STRING ] “STRING” 的长度为零则为真。
40行:提取出所有的speak,然后将所有speak的顺序随机排列一下。
41.42:根据之前设置的比例,计算验证集需要的speak的数量
44.45:将前 n_spk_cv数量的speak划分给验证集,剩余的就是训练集的speak

接下来看传入spk-list的情况:

 46 else
 47   # Use pre-defined list of speakers,
 48   cp $cv_spk_list $tmp/speakers_cv
 49   join -v2 <(sort $cv_spk_list) <(awk '{ print $1; }' <$src_data/spk2    utt | sort) >$tmp/speakers_trn
 50 fi

49行的作用就是提取出spk2所有的说话人列表中不包含cv_spk_list中说话人的其他说话人。

关于join的使用方法的话可以参考我之前的博客:传送门

通过以上的过程,speakers_cv中包含的是验证集的说活人列表,speakers_trn中包含的是训练集的说话人;列表。

下一步主要是一个检查的作用,判断训练集和验证集划分出来的说话人是否存在交叠重复的现象。

 52 # Sanity checks,
 53 n_spk=$(wc -l <$src_data/spk2utt)
 54 echo "Speakers, src=$n_spk, trn=$(wc -l <$tmp/speakers_trn), 
 cv=$(wc  -l $tmp/speakers_cv)"
 55 overlap=$(join <(sort $tmp/speakers_trn) <(sort $tmp/speakers_cv) | wc -l)
 56 [ $overlap != 0 ] && \
 57   echo "WARNING, speaker overlap detected!" && \
 58   join <(sort $tmp/speakers_trn) <(sort $tmp/speakers_cv) | head && \
 59   echo '...'

最后一步就是调用./utils/data/subset_data_dir.sh 脚本根据我们划分出来的说话人列表,来对原始的数据进行划分,生成相应的数据集。

 61 # Create new data dirs,
 62 utils/data/subset_data_dir.sh --spk-list $tmp/speakers_trn $src_data     $trn_data
 63 utils/data/subset_data_dir.sh --spk-list $tmp/speakers_cv $src_data     $ cv_data

utils/data/subset_data_dir.sh 脚本主要是根据说话人的列表。去过滤相应的文件的信息,从而生成相应的训练集和测试集,这里就不详细展开了,有兴趣的可以去kaldi的代码。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值