Kaldi語料的兩種切分/組織方式及其處理
- text中每一個文本段由一個音頻索引(indexed by utterance)
使用該方式的egs:librispeech、timit、thchs30、atc_en、atc_cn
語料的組織形式為:
一個音頻(包含一個語句)對應一個文本(包含一個文本段)
或
一個音頻(包含一個語句)對應一個文本(包含多個文本段)中的一個文本段
- text中每一個文本段由一個時間片索引(indexed by segment)
- 使用該方式的egs:
tedlium、atc0_comp_LDC94S14A
時間片由segments文件指定,通常位於data/train, data/test, data/dev中
- 處理方式:
以tedlium為例,語料的組織形式為一個音頻sph(包含多個語句)對應一個文本stm(包含多個文本段)
stm,kaldi使用的一種文本組織形式(文本格式),tedlium的例子:
AaronHuey_2010X 1 AaronHuey_2010X 223.12 232.68 <o,f0,female> we appropriated land for(2) trails and(2) trains to shortcut through the heart of the lakota nation <sil> the treaties were(2) out the window <sil> in response three tribes led by the lakota chief {SMACK} red cloud <sil> (AaronHuey_2010X-223.12-232.68-F0_F-S27)
stm文件的格式:
<file-name> <?> <speaker-name> <segment-begin> <segment-end> <LABEL> <TEXT> <segment>
文本:db/TEDLIUM_release1/$set/stm/*.stm(其中包含了時間片信息)
音頻:db/TEDLIUM_release1/$set/sph/*.sph
tedlium/s5/run.sh調用了local/prepare_data.sh,其中對stm文件進行格式化,包括去除顯式的靜音標註和生成segments文件
segments文件的格式:
<utterance-id> <recording-id> <segment-begin> <segment-end>
其中,segment-begin和segment-end以秒為單位。它們指明了一段發音在一段錄音中的時間偏移量。"recording-id" 和在"wav.scp"中使用的是同一個標識字符串。再次聲明一下,這只是一個任意的標識字符串,你可以隨便指定。
Kaldi中隱含地對靜音SIL進行處理,不需要顯式標註。但是這並不意味著其他噪聲不需要顯式標註,如:
- 使用該方式的egs:
BRH | Breath | 呼吸 |
CGH | Cough | 咳嗽 |
NSN | Noise | 噪聲 |
SMK | Smack | 拍擊聲 |
UM | UM | 嗯 |
UHH | UH | 噓 |
在特征提取、在線訓練、解碼時需要判斷語料是哪種組織方式,即尋找segments:
../steps/make_*.sh
../steps/nnet2/dump_bottleneck_features.sh
../steps/<online/>nnet*/align.sh
../steps/<online/>nnet*/decode.sh
../steps/online/nnet2/dump_nnet_activations.sh
../steps/online/nnet2/get_egs.sh
../steps/online/nnet2/get_egs*.sh
Kaldi語料的兩種切分/組織方式及其處理