The PyTorch-Kaldi Speech Recognition Toolkit
PDF: https://arxiv.org/pdf/1811.07453.pdf
代码: https://github.com/mravanelli/pytorch-kaldi
文档: http://fancyerii.github.io/books/pytorch-kaldi/
Kaldi目前是最受欢迎的ASR工具包。使用C++和各种脚本来实现最先进的语音识别系统, Kaldi包括一全套使用方法,涵盖了所有最流行的语音语料库。但是Kaldi并不是一个通用的深度学习框架,如果要用深度神经网络来替代GMM的声学模型,就得自己用C++代码实现神经网络的训练与预测,比较容易出错。
PyTorch-Kaldi项目的重点是在弥合Kaldi和PyTorch之间的间隙。我们的工具包在PyTorch中实现声学模型,同时使用Kaldi执行特征提取,标签/对齐计算和解码,使其适合开发最先进的DNN-HMM语音识别器。 PyTorch-Kaldi本身支持多种DNN,CNN和RNN模型。还支持深度学习模型,声学特征和标签之间的组合,从而能够使用复杂的神经架构。
2 PyTorch-Kaldi 结构
主要脚本run_exp.py是用python编写的,用于管理ASR系统中涉及的所有阶段,包括特征和标签提取,训练,验证,解码和评分。
主脚本将INI格式中的配置文件作为输入,它由几部分组成。
- [Exp] 部分指定了一些高级信息,例如用于实验的文件夹,训练时期的数量,随机种子。它还允许用户指定是否必须在CPU,GPU或多个GPU上进行实验。
- [dataset] 部分表示,它用于指定有关要素和标签的信息,包括存储它们的路径,上下文窗口的特征以及必须分割语音数据集的块数。
- [architechure] 部分定义神经网络模型,
- [model] 部分定义这些神经网络的组合方式。
- 后一部分开发了一种由run_exp.py脚本自动解释的简单元语言。
- [decoding] 部分中定义解码参数的配置文件
- 使用Kaldi原生提供的C++库(例如,compute-mfcc-feats,compute-fbank-feats,compute-plp-feats)执行特征提取,有效地提取最流行的语音识别特征。
- 计算出的系数存储在二进制存档(扩展名为.ark)中,
- 使用kaldi-io实用程序导入到python环境中。
- 通过函数load-chunk处理这些特征,该函数执行上下文窗口组合,移动以及均值和方差归一化。
- PyTorch-Kaldi可以管理多个特征流。
- 用于训练声学模型的主要标签源自语音特征与音素状态序列之间的强制对齐过程,而这种序列是由Kaldi用语音决策树计算的且依赖于上下文。
- 为了实现多任务学习,PyTorch-Kaldi支持多个标签。
PyTorch-Kaldi自动将整个数据集拆分为多个块,这些块由从完整语料库中随机抽样的标签和特征组成。然后将每个块存储到GPU或CPU存储器中并由神经训练算法run_nn.py运行处理。该工具包在每个时期动态地组成不同的块。然后从它们中获得一组小批量的数据集。小批量集合由少数用于梯度计算和参数优化的训练样例组成。
小批量集的聚集方式很大程度上取决于神经网络的类型。对于前馈模型,小批量集由随机移动特征和从块中采样的标签组成。对于周期性网络,小批量集合必须由完整的句子组成。然而,不同的句子可能具有不同的持续时间,使得制作相同大小的小批量集合需要零扩充。 PyTorch-Kaldi根据它们的长度按升序对语音序列进行排序(即,首先处理短句)。这种方法最大限度地减少了零扩充的需要,并证明有助于避免批量标准化统计数据的可能偏差。
2-5 DNN acoustic modeling每个小批量集由PyTorch实现的神经网络来处理,该神经网络将特征作为输入,并将依赖于上下文的音素状态上的一组后验概率作为输出。该代码旨在轻松插入自定义模型。可以通过在neural_nets.py中添加新类来简单地定义新模型。该类必须由通过初始化指定参数的初始化方法,以及定义要执行的计算的正向方法组成。
2-6 Decoding and Scoring在基于反馈HMM的Kaldi解码器之前,由神经网络产生的声学后验概率被它们的先验概率归一化了。解码器将声学分数与由n-gram语言模型导出的语言概率合并,并尝试使用波束搜索算法检索在语音信号中发出的单词序列。使用NIST SCTK评分工具包计算最终的字错误率(WER)分数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)