PyTorch-Kaldi 深度学习语音识别开源软件

论文:Ravanelli M (Mirco Ravanelli), Parcollet T, Bengio Y. The Pytorch-kaldi Speech Recognition Toolkit. ICASSP 2019 - 2019 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2019: 6465–6469.

GitHub:https://github.com/mravanelli/pytorch-kaldi

SpeechBrain 是 PyTorch-Kaldi 的进阶版,使用 All-in-One PyTorch 的模式。

语音识别与说话人识别的区别:相比较说话人识别,语音识别的流程更加复杂,额外需要内容相关的标签和解码方法。

文章目录

  • PyTorch-Kaldi 深度学习语音识别开源软件
    • 摘要
    • 引言
    • PyTorch-Kaldi 项目
      • 配置文件
      • 特征
      • 标签
      • 分块与小批量组成
      • 神经网络声学建模
      • 解码与评分
    • 实验设计
    • 基准性能
    • 参考文献
      • 语料
      • 模型
      • 开源软件

摘要

Kaldi 是 C++ 实现的语音识别软件,缺少像 Python 的简单与灵活。PyTorch-Kaldi 旨在构建 Kaldi 与 PyTorch 之间的联系,充分利用 Kaldi 高效性与 PyTorch 灵活性。PyTorch-Kaldi 除了建立 Kaldi 与 PyTorch 之间的联系,还嵌入了非常有用的功能,用于开发最新的语音识别器。程序易于加入自定义的声学模型,包含初始化方法和预执行的模型。PyTorch-Kaldi 支持多个特征和标签流、神经网络组合的建模。程序已公开发布在 Github,适用于运行在本地和高性能计算集群上。

引言

近十年,自动语音识别(Automatic Speech Recognition, ASR)迎来了飞速的发展。深度学习技术开始克服传统高斯混合模型(Gaussian Mixture Models, GMMs)的不足,在众多数据集上表现出优异的性能,例如 TIMIT、AMI、DIRHA、CHiME、Babel 和 Aspire。

语音识别开源软件的发展,诸如 HTK、Julius、CMU-Sphinx、RWTH-ASR、LIA-ASR 和 2011 年以后的 Kaldi,极大地推进了 ASR 的发展,为研究的进行和应用的开发提供了便利。

Kaldi 是目前非常流行的 ASR 工具,它提供一系列 C++ 库。

深度学习框架,例如 Theano、TensorFlow、CNTK 和 PyTorch,为 ASR 机器学习系统的发展提供了帮助。这些软件提供了灵活的神经网络设计模式和大量的深度学习应用。

PyTorch 是 Python 语音的 GPU 加速软件,自动梯度工具使其是用于高效地深度学习应用开发。

PyTorch-Kaldi 建立了 Kaldi 与 PyTorch 之间的桥梁。该软件使用 PyTorch 执行声学建模,使用 Kaldi 执行特征提取、标签/对齐、编码等,是用于 DNN-HMM 框架的 ASR 系统。

PyTorch-Kaldi 能够部署在本地机器和高性能计算机上,支持多 GPU 训练、恢复策略、自动数据分块。

PyTorch-Kaldi 项目

PyTorch-Kaldi 是 Python 语言开发的基于 Kaldi 和 PyTorch 的 ASR 工具。类似地,PyKaldi 是 Kaldi 的 Python 包装,未提供神经网络建模方法;ESPnet 仅支持 ASR 端到端建模,训练的设计需要非常细心。

Fig. 1 描述了 PyTorch-Kaldi 的框架,Kaldi 执行特征提取与语音解码,PyTorch 执行神经网络建模与后处理。主要脚本 run_exp.py 管理 ASR 系统所有的组成成分,包括:特征与标签提取、训练、验证、解码和评分。

配置文件

配置文件采用 INI 格式,用于 run_exp.py:

  1. [Exp]:高层次信息,例如文件夹、训练的次数、随机种子、执行 CPU/GPU/多 GPUs 等;

  2. [dataset*]:特征与标签的信息(存储的路径、上下文窗口的特效、语音数据划分的 chunks 数量)等;

  3. [architecture*]:神经网络模型的描述;

  4. [model]:神经网络如何结合;

  5. [decoding]:定义解码参数;

  6. 其他。

该项目采用 *.cfg 文件定义配置文件,例如

# Source: https://github.com/mravanelli/pytorch-kaldi/blob/e06682f9b23ca453b2c3fc35bc474e0617a6cc80/cfg/TIMIT_baselines/TIMIT_MLP_mfcc_basic.cfg
[cfg_proto]
cfg_proto = proto/global.proto
cfg_proto_chunk = proto/global_chunk.proto[exp]
seed = 1234
use_cuda = True
multi_gpu = False[dataset1]
data_name = TIMIT_tr
n_chunks = 5[dataset2]
data_name = TIMIT_dev
n_chunks = 1[dataset3]
data_name = TIMIT_test
n_chunks = 1[data_use]
train_with = TIMIT_tr
valid_with = TIMIT_dev
forward_with = TIMIT_test[batches]
batch_size_train = 128
max_seq_length_train = 1000[architecture1]
arch_name = MLP_layers1[model]
model_proto = proto/model.proto[forward]
forward_out = out_dnn1[decoding]
decoding_script_folder = kaldi_decoding_scripts/

特征

特征模块由 Kaldi 实现,主要功能是提取特征,提供多个特征流的管理功能

  1. 计算系数,存储为 ark,例如 mfcc、fbank、plp;
  2. kaldi-io 实现 chunk 读取;
  3. 执行上下文窗口合成,混洗以及均值和方差归一化。

标签

标签主要用于神经网络声学建模,来自于 Kaldi 计算的语音特征和内容相关音素状态的序列。该模块可提供多标签,支持多任务学习。例如联合训练内容相关和内容无关的目标,执行单音正则化;语音增加和语音识别联合训练;合作网络深度学习。

分块与小批量组成

分块与小批量合成,由 core.pyrun_nn 函数实现:

  1. 数据划分为多块,每块由标签和特征组成;

  2. 每块存入 cpu 或者 GPU,

  3. 训练阶段,动态地组合不同的块形成小批量数据,其中小批量由少量的样本组成。

训练时的组合方法因网络结构而异:

  1. 前馈网络的小批量:从块中随机采样的、混序的特征与标签组成;

  2. 循环网络的小批量:由完整的句子组成,不同时长的句子进行零补长,形成相同长度。

PyTorch-Kaldi 对句子进行增序排列(有助于最小化零补长,减少对 batch normalization statistics 影响)。

神经网络声学建模

DNN 声学建模,包含前馈网络和训练网络,由 neural_networks.py 实现:

  1. 自定义模型:nn.Module,初始化方法,前向方法;

  2. 预训练模型:MLPs、CNN、RNN、LSTM、GRU、Light GRU、twin-regularized RNNs、SincNet。

解码与评分

编码与评分:

  1. 神经网络输出的概率先经过先验归一化,

  2. HMM 编码器利用 n-gram 语言模型进行评分估计,

  3. beam搜索提取文字序列,

  4. NIST SCTK 评分工具箱计算 Word-Error-Rate (WER) 得分。

实验设计

语料与任务:

  1. 语料:TIMIT、DIRHA-English、WSJ、CHiME 4、ET-real、DT-real、LibriSpeech。

  2. 任务:标准音素识别任务、远距离说话场景、四种噪声环境(公交、咖啡厅、住宅区、街道拥堵)。

神经网络设定:

  1. 特征:MFCC、fbanks、fMLLR,25 ms frame,10 ms hop;

  2. 前馈模型权重初始化 Glorot 策略 [38],循环模型权重初始化正交矩阵 [39];

  3. 前馈连接 batch normalization,循环结构 dropout 正则技术;

  4. 优化器 RMSprop,24 epochs;

  5. 学习速率变化:性能相对改进低于 0.1% 之后学习速率减少一半;

  6. 超参数调试:学习速率、隐藏层数量、隐藏层单元数、dropout 因子、twin 正则项参数。

基准性能

实验使用的数据集有 4 个:TIMIT、DIRHA、CHiME 与 LibriSpeech。表 1-4 描述了 TIMIT 数据集上的性能,表 5 对比了其他三个数据集的性能。性能评价指标:PER (Phone Error Rate) 与 WER (Word Error Rate)。结论如下:

  1. 表 1 中 fMLLR 特征性能最佳,得益于说话人自适应过程,Li-GRU 减少 GRU 33% 计算量,且优于 GRU。
  2. 表 2 Incr. Seq. Length 鼓励学习短期依赖,然后再学习长期依赖。
  3. 表 3 表明特征组合和模型组合实现了 TIMIT 最好的公开性能。
  4. 表 4 测试在原始信号或者 FBANK 上的性能,SincNet 优于 CNN。
  5. 表 5 表明 Li-GRU 实现了最优的性能,相比较 CHiME 的 Kaldi 18.1% WER 与 ESPNet 44.99% WER;相比较 Librispeech 的 Kaldi 6.5%。
表 1. 不同网络结构在 TIMIT 测试集上的性能 PER(%)
模型/特征 MFCC FBANK fMLLR
MLP 18.2 18.7 16.7
RNN 17.7 17.2 15.9
LSTM 15.1 14.3 14.5
GRU 16.0 15.2 14.9
Li-GRU 15.3 14.9 14.2
表 2. 四种模型逐步增加技术之后在 TIMIT 测试集上的性能 PER(%)
技术/模型 RNN LSTM GRU Li-GRU
Baseline 16.5 16.0 16.6 16.3
+ Incr. Seq. Length (从 1s 语音开始,逐步增加(两倍/epoch)裁剪的语音长度) 16.6 15.3 16.1 15.4
+ Recurrent Dropout 16.4 15.1 15.4 14.5
+ Batch Normalization 16.0 14.8 15.3 14.4
+ Monophone Reg. (两个 softmax 分类器,估计内容相关的状态和预测单音目标) 15.9 14.5 14.9 14.2
表 3. 特征组合和模型组合在 TIMIT 测试集上的性能 PER(%)
结构 特征 PER (%)
Li-GRU fMLLR 14.2
MLP+Li-GRU+MLP MFCC+FBANK+fMLLR 13.8
表 4. CNN 与 SincNet 在 TIMIT 测试集上的性能 PER(%)
模型 特征 PER (%)
CNN FBANK 18.3
CNN Raw waveform 18.1
SincNet Raw waveform 17.2
表 5. 不同网络结构在 DIRHA, CHiME, 与 LibriSpeech (100h) 数据集上的性能 WER(%)
模型/数据 DIRHA CHiME LibriSpeech
MLP 26.1 18.7 6.5
LSTM 24.8 15.5 6.4
GRU 24.8 15.2 6.3
Li-GRU 23.9 14.6 6.2

参考文献

语料

  1. Ravanelli M, Cristoforetti L, Gretter R, et al. The DIRHA-ENGLISH corpus and related tasks for distant-speech recognition in domestic environments. 2015 IEEE Workshop on Automatic Speech Recognition and Understanding, ASRU 2015 - Proceedings. 2016.
  2. Barker J, Marxer R, Vincent E, et al. The third “CHiME” speech separation and recognition challenge: Dataset, task and baselines. 2015 IEEE Workshop on Automatic Speech Recognition and Understanding, ASRU 2015 - Proceedings. 2016.
  3. 有噪声的语料: Ravanelli M, Svaizer P, Omologo M. Realistic multi-microphone data simulation for distant speech recognition. Proceedings of the Annual Conference of the International Speech Communication Association, INTERSPEECH, 2016, 08-12-September-2016: 2786–2790.

模型

  1. Li-GRU: Ravanelli M, Brakel P, Omologo M, et al. Light Gated Recurrent Units for Speech Recognition. IEEE Transactions on Emerging Topics in Computational Intelligence, 2018.
  2. Ravanelli M, Bengio Y. Speaker Recognition from Raw Waveform with SincNet. 2018 IEEE Spoken Language Technology Workshop (SLT). IEEE, 2018: 1021–1028.

开源软件

  1. Ravanelli M, Parcollet T, Bengio Y. The Pytorch-kaldi Speech Recognition Toolkit. ICASSP 2019 - 2019 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2019: 6465–6469.
  2. Can D, Martinez V R, Papadopoulos P, et al. Pykaldi: A python wrapper for kaldi. ICASSP, IEEE International Conference on Acoustics, Speech and Signal Processing - Proceedings. 2018, 2018-April: 5889–5893.
  3. Watanabe S, Hori T, Karita S, et al. ESPNet: End-to-end speech processing toolkit. Proceedings of the Annual Conference of the International Speech Communication Association, INTERSPEECH. 2018, 2018-Septe: 2207–2211.
  4. Povey D, Boulianne G, Burget L, et al. The Kaldi speech recognition toolkit. IEEE 2011 Workshop on Automatic Speech Recognition and Understanding. 2011(January).

作者信息:

  • CSDN:https://blog.csdn.net/i_love_home?viewmode=contents

  • Github:https://github.com/mechanicalsea

2019级同济大学博士研究生 王瑞 rwang@tongji.edu.cn

研究方向:说话人识别、说话人分离

PyTorch-Kaldi 深度学习语音识别开源软件相关推荐

  1. PyTorch核心贡献者开源书:《使用PyTorch进行深度学习》完整版现已发布!

    来源|新智元 [导读]<使用PyTorch进行深度学习>一书的完整版现已发布!教你如何使用PyTorch创建神经网络和深度学习系统,内含图解与代码,操作易上手. 由Luca Antiga. ...

  2. 阿里深度学习框架开源了!无缝对接TensorFlow、PyTorch

    阿里巴巴内部透露将开源内部深度学习框架 X-DeepLearning的计划,这是业界首个面向广告.推荐.搜索等高维稀疏数据场景的深度学习开源框架,可以与TensorFlow.PyTorch 和 MXN ...

  3. DL框架之PyTorch:深度学习框架PyTorch的简介、安装、使用方法之详细攻略

    DL框架之PyTorch:PyTorch的简介.安装.使用方法之详细攻略 DL框架之PyTorch:深度学习框架PyTorch的简介.安装.使用方法之详细攻略 目录 PyTorch的简介 1.pyto ...

  4. ElasticDL:首个基于 TensorFlow 实现弹性深度学习的开源系统

    9 月 11 日,蚂蚁金服开源了 ElasticDL 项目,据悉这是业界首个基于 TensorFlow 实现弹性深度学习的开源系统. Google Brain 成员 Martin Wicke 此前在公 ...

  5. 浪潮科大讯飞Altera用OpenCL实现FPGA深度学习语音识别加速方案

    11月17日,在正在举行的2015全球超级计算大会(SC15)上,浪潮联合全球可编程逻辑芯片巨头Altera,以及中国最大的智能语音技术提供商科大讯飞,共同发布了一套面向深度学习.基于AlteraAr ...

  6. 免费现场课程:使用PyTorch进行深度学习

    Are you interested in learning about Deep Learning? We are hosting a free 6-week live course on our ...

  7. 【项目实战课】从零掌握安卓端Pytorch原生深度学习模型部署

    欢迎大家来到我们的项目实战课,本期内容是<从零掌握安卓端Pytorch原生深度学习模型部署>.所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的实战 ...

  8. Pytorch:深度学习中pytorch/torchvision版本和CUDA版本最正确版本匹配、对应版本安装之详细攻略

    Pytorch:深度学习中pytorch/torchvision版本和CUDA版本最正确版本匹配.对应版本安装之详细攻略 目录 深度学习中pytorch/torchvision版本和CUDA版本最正确 ...

  9. PyTorch入门-深度学习回顾和PyTorch简介

    一.神经网络的复习 1.深度学习 2.神经网络 3.激活函数 4.前向神经网络 5.卷积神经网络 6.循环神经网络 二.用PyTorch构建深度学习模型 深度学习模型框架 TensorFlow ay/ ...

最新文章

  1. android毛玻璃效果,Android 中实现毛玻璃效果
  2. 你需要学好知识图谱----用AI技术连接世界
  3. java常用的统计_(OJ)Java常用类-统计数字次数
  4. 算法岗百里挑一热爆了,全球AI大厂薪酬大起底
  5. Python爬虫技巧!网站有反爬?我们有selenium!
  6. 51Nod-1062 序列中最大的数【序列计算+打表】
  7. 大学计算机应用技术基础实践教程答案,【最新资料】大学计算机基础实践教程习题答案.doc...
  8. Mysql 定时备份操作
  9. TortoiseSVN的设置
  10. python编程工时计算_python 两个时间段过滤求交集(工时计算)
  11. Ubuntu系统 -- 初始化配置与基础操作
  12. php mysql购物车代码_php购物车实现代码实例汇总
  13. jmeter调用Python脚本(java调用Python程序)阶段一(可实现版)
  14. ps中怎么把人物的腿给p长
  15. 古代常见文学常识汇总
  16. 机器学习相关学习视频
  17. 微信支付之 内网穿透
  18. Mysql-8.0.29-源码编译安装
  19. 推荐系统概述推荐系统算法简介
  20. C语言中预编译/预处理的使用

热门文章

  1. [图形学] Killzone: Shadow Fall 中的体积光效果
  2. 山东涛雒镇万亩水稻 国稻种芯·中国水稻节:日照迎来收割季
  3. 十二个一的朝堂江湖大梦
  4. 甘肃省甘南藏族自治州谷歌卫星地图下载
  5. 「EOJ」3185 双阶乘的质因数个数
  6. Tableau8——数据操作
  7. B站左程云算法视频笔记05
  8. 企业风控如何搭建四大体系,实现全局防控?
  9. 如何查看Outlook搜索出的邮件所在的文件夹
  10. 全网最通俗的条件随机场CRF