相关资料
- kaldi官方文档
- 语言模型训练工具SRILM详解
- 史上最全的Vim命令 知乎
- Linux vi/vim 菜鸟教程
- python字符串 菜鸟教程
- shell运算符 菜鸟教程
- Shell脚本字符串匹配及日常命令工具 - 用法总结(技巧指南)
- A*算法图解
admissible(应该)是指评估距离要小于真实距离,这样才能保证一定找到最优解;如果评估距离远大于真实距离,那么当前到该位置的代价就会被忽略,那么就会变成Greedy搜索,不一定会找到最优解
- sub DTW
- Pytorch里的CrossEntropyLoss详解
- jupyter env 安装指南
- kaldi-GMM-HMM pipeline 介绍几个训练脚本
- Kaldi-nnet3-基础知识
- SoX — 音频处理工具里的瑞士军刀
- python subprocess使用
- Transformer代码阅读
- CTC beam search
- Kaldi的HCLG构图过程可视化
- [翻译]Kaldi中的解码图构建过程-可视化教程
- 语音识别系列之区分性训练和LF-MMI
- k2 doc
transition id
以kaldi中的yesno为例谈谈transition
kaldi中的chain model(LFMMI)详解
我想问下kaldi中的pdf-id是什么意思?和state-id有什么关系?
LF-MMI笔记
Bug record
- error “utils/validate_data_dir.sh: utt2spk is not in sorted order when sorted first on speaker-id”
utt_id的前缀必须为spk_id,另外spk_id与utt_id之间最好为下划线ref - Refusing to split data because number of speakers 3 is less than the number of output .scp files 10
让我修改nj小于说话人数量?可能work
确实需要nj小于说话人数量,但之前理解的说话人定义不太合适,导致定义的说话人数量过少
较好的说话人的定义可以不为现实定义的人,同一个人不同的说话场景也可视为不同的说话人 - bailiao训练集数据为163449 速度感觉好慢 设了nj=30 从1.28下午14点多开始训 后来应该是确实数据量过大,需要慢慢训练
- decode.sh如果需要打分的话 需要自己定义local/score.sh
steps/decode.sh: Not scoring because local/score.sh does not exist or not executable.
aishell默认使用下述所示的两个打分脚本#!/bin/bash set -e -o pipefail set -x steps/score_kaldi.sh "$@" # 以WER为标准(word error rate) steps/scoring/score_kaldi_cer.sh --stage 2 "$@" #以CER为标准(char error rate?) echo "$0: Done"
- sox 变速直接输出为管道会遇到warning
Length in output .wav header will be wrong since can’t seek to fix it
参考
目录解释
-
data目录
|—— wav.scp 句子id→句子路径(path)映射
|—— text 句子id→文本映射
|—— spk2utt 说话人id→句子id映射
|—— utt2spk 句子id→说话人id映射
|—— segments 句子切割方式指示
|—— utt2dur 句子id→时长映射
|—— spk2gender 说话人id→性别映射 -
decode 目录
exp/mono/decode_dev/scoring_kaldi/test_filt.chars.txt 为以char为单位的test text
exp/mono/decode_dev/scoring_kaldi/test_filt.txt 为以word为单位的test text
上述两个文件是用来作为标准的
exp/mono/decode_dev/scoring_kaldi/best_wer 指示了最小WER的解码结果,如下为文件内容%WER 42.17 [ 53854 / 127698, 2824 ins, 8597 del, 42433 sub ] exp/mono/decode_dev/wer_10_0.0 # 10 代表 LM-weight for lattice rescoring (默认从7-17) # 0.0 代表 word_ins_penalty (默认0.0 0.5 1.0)
exp/mono/decode_dev/scoring_kaldi/best_cer 指示了最小CER的解码结果,如下为文件内容
%WER 32.97 [ 67698 / 205341, 1153 ins, 5041 del, 61504 sub ] exp/mono/decode_dev/cer_10_0.0 # 解释同上
exp/mono/decode_dev/scoring_kaldi/penalty_0.0/10.txt 即代表了最好的以WER为标准的解码结果
exp/mono/decode_dev/scoring_kaldi/penalty_0.0/10.chars.txt 即代表了最好的以CER为标准的解码结果 -
arpa语言模型格式,arpa这里的概率用的是 l o g 10 x log_{10}{x} log10x,fst上用的是 − l n x -ln{x} −lnx
常用命令记录
- 参考语音识别:模型文件介绍之FST[kaldi]
# 1) fstprint:打印fst为文本格式 # 参数有—isymbols和—osymbols分别表示输入符号表和输出符号表,这两个参数可以省略 # 例子如下: fstprint G.fst G.txt fstprint --isymbols=phones.txt --osymbols=words.txt L.fst L.txt # fstdraw+graphviz:将fst绘成图(需要安装graphviz才可以使用dot命令来画图) fstdraw --isymbols=phones.txt --osymbols=words.txt L.fst fstdraw --isymbols=phones.txt --osymbols=words.txt HCLG.fst # 可以加上graphviz来画成pdf fstdraw --isymbols=phones.txt --osymbols=words.txt L.fst | dot -Tps | ps2pdf - L.pdf fstdraw --isymbols=words.txt --osymbols=words.txt G.fst | dot -Tps | ps2pdf - G.pdf # 注意画G.fst时 输入输出符号应为word
-
top命令查看CPU情况
top -bn 1 -i -c top -c # 实时监控 top -u $user # 查看特定user的进程
- ngram语言模型输出结果解释
第一行 文件 heldout 的基本信息:200 句,3083 个单词,0 个未登录词;$ ngram -lm data/local/lm/srilm/srilm.o3g.kn.gz -ppl data/local/lm/srilm/heldout file data/local/lm/srilm/heldout: 200 sentences, 3083 words, 0 OOVs 0 zeroprobs, logprob= -6910.93 ppl= 127.37 ppl1= 174.432
第二行 为评分的基本情况:无 0 概率;logP(T)=-6910.93,ppl==127.37, ppl1= 174.432,均为混淆度。其公式稍有不同,如下:
p p l = 1 0 − l o g P ( T ) / S e n + W o r d ; p p l 1 = 1 0 − l o g P ( T ) / W o r d ppl=10^{-{logP(T)}/{Sen+Word}}; ppl1=10^{-{logP(T)}/Word} ppl=10−logP(T)/Sen+Word; ppl1=10−logP(T)/Word
其中 S e n 和 W o r d 分别代表句子和单词数 . 其中 Sen 和 Word 分别代表句子和单词数. 其中Sen和Word分别代表句子和单词数.
- irstlm github
irstlm手动安装
这里要声明IRSTLM的安装路径:
irstlm的工具脚本都在bin中# download example wget -c https://sourceforge.net/projects/irstlm/files/irstlm/examples/irstlm-sampledata-20110916.zip # add env export IRSTLM=$userpath/tools/irstlm export PATH=$PATH:$IRSTLM/bin:/$IRSTLM/bin/$MACHTYPE
-
python设置gpu
os.environ["CUDA_VISIBLE_DEVICES"] = "6"
- Shell脚本字符串匹配及日常命令工具 - 用法总结(技巧指南)
如下所示line=egs/hi_mia/h6/data/kws/train/SPEECHDATA/wav/SV0001/SV0001_2_02_F0661.wav echo $line # output: egs/hi_mia/h6/data/kws/train/SPEECHDATA/wav/SV0001/SV0001_2_02_F0661.wav line_p1=${line##*/} echo $line_p1 # output: SV0001_2_02_F0661.wav echo ${line_p1%.*} # output: SV0001_2_02_F0661
-
展示nnet3模型文件
src/nnet3bin/nnet3-am-copy --binary=false exp/nnet3/tdnn/final.mdl exp/nnet3/tdnn/final.mdl.txt
-
展示神经网络loss
steps/nnet3/report/generate_plots.py grep Overall exp/nnet3/tdnn_1b_kws/log/compute_prob_*.100.log
-
sox截取音频
截取1-6秒的音频出来
sox audio1.wav audio1_0003_sil.wav trim 1 5
sox audio1.wav audio1_0003_sil.wav trim 1 =6
-
batch normalization
model.train() model.eval()主要用于通知dropout层和BN层在train和validation/test模式间切换:
在train模式下,dropout网络层会按照设定的参数p设置保留激活单元的概率(保留概率=p); BN层会继续计算数据的mean和var等参数并更新。
在eval模式下,dropout层会让所有的激活单元都通过,而BN层会停止计算和更新mean和var,直接使用在训练阶段已经学出的mean和var值