pytorch使用pytorch-kaldi实现ASR语音识别
pytorch使用pytorch-kaldi实现ASR语音识别
Song • 10986 次浏览 • 0 个回复 • 2018年09月17日
pytorch-kaldi
是开发最先进的DNN/RNN
混合语音识别系统的公共存储库。DNN
部分由pytorch
管理,而特征提取,标签计算和解码使用kaldi
工具包执行。前面我们已经介绍了Linux/Windos搭建安装Kaldi环境实现ASR语音识别
介绍:
该项目发布了一系列代码和实用程序,以开发最先进的DNN/RNN
混合语音识别系统。DNN/RNN
部分在pytorch
中实现,而特征提取,对齐和解码使用Kaldi
工具包执行。提供的系统的当前版本具有以下功能:
- 支持不同类型的
NN
(例如,MLP,RNN,LSTM,GRU,最小GRU,轻GRU)[1,2,3] - 支持
recurrent dropout
- 支持
batch
和图层规范化 - 支持单向/双向
RNN
- 支持
residual/skip
连接 - 支持双正则化[4]
python2/python3
兼容性- 多
gpu
训练 - recovery/saving checkpoints
- 可与
kaldi
轻松对接。
所提供的解决方案专为标准机器和HPC
集群上的大规模语音识别实验而设计。
先决条件:
- 必须是
Linux
(我们在Ubuntu 17.04
和各种版本的Debian
上进行了测试)。 我们建议在
GPU
机器上运行代码。确保安装了cuda
库(https://developer.nvidia.com/cuda-downloads)并且正常工作。我们在`cuda 9.0,9.1和
8.0上测试了我们的系统。确保安装了
python(代码使用
python 2.7和
python 3.6进行测试)。建议使用
Anaconda`(https://anaconda.org/anaconda/python)。如果没有安装
pytorch
,请先安装(http://pytorch.org/)。我们在`pytorch 0.3.0和
pytorch 0.3.1上测试了我们的代码。较旧版本的
pytorch可能会出现错误。要检查安装,请键入
python,然后在进入控制台后输入
import torch`。确保一切都很好。请安装Kaldi(http://kaldi-asr.org/)。正如安装过程中建议的那样,不要忘记将Kaldi二进制文件的路径添加到`$HOME/.bashrc`中。作为检查安装的第一个测试,打开`bash shell
,键入
copy-feats`并确保没有出现错误。- 从
kaldi-io-for-python
项目安装kaldi-io
软件包(https://github.com/vesis84/kaldi-io-for-python)。它提供了`kaldi`和`python`之间的简单接口。要安装它:- 1、克隆代码
git clone https://github.com/vesis84/kaldi-io-for-python.git
- 2、添加
export PYTHONPATH=$PYTHONPATH:<kaldi-io-dir>
到$HOME/.bashrc
和其来源
- 1、克隆代码
输入python -c "import kaldi_io"
以检查包是否已正确安装。您可以在https://github.com/vesis84/kaldi-io-for-python上找到更多信息(包括一些读写测试)。
RNN
模型的实现根据训练句的长度对训练句进行排序。这允许系统在形成微型机时最小化零填充的需要。使用sox
提取每个句子的持续时间。请确保已安装(仅在create_chunk.sh
中生成功能列表时使用)
pytorch-kaldi源码环境:
cd pytorch-kaldi
source ./env.sh
如何运行TIMIT实验:
尽管代码可以很容易地适应任何语音数据集,但在文档的以下部分中,我们提供了一个基于流行的TIMIT
数据集的示例。
1、运行TIMIT
的Kaldi s5
基线。此步骤对于计算稍后用于训练pytorch MLP
的特征和标签是必要的。尤其是:
- 转到
$ KALDI_ROOT/egs/timit/s5
然后在path.sh
之前运行run.sh
脚本。 - 确保一切正常。
- 请使用
local/nnet/run_dnn.sh
运行Karel
的DNN
基线。 - 不要忘记使用以下命令计算test和dev数据的对齐方式。如果您想使用tri3对齐方式,请键入:
steps/align_fmllr.sh --nj 4 data/dev data/lang exp/tri3 exp/tri3_ali_devsteps/align_fmllr.sh --nj 4 data/test data/lang exp/tri3 exp/tri3_ali_test
如果您想使用dnn alignments(如建议的那样),请输入:
steps/nnet/align.sh --nj 4 data-fmllr-tri3/dev data/lang exp/dnn4_pretrain-dbn_dnn exp/dnn4_pretrain-dbn_dnn_ali_devsteps/nnet/align.sh --nj 4 data-fmllr-tri3/test data/lang exp/dnn4_pretrain-dbn_dnn exp/dnn4_pretrain-dbn_dnn_ali_test
2、将功能列表拆分为块。
- 转到
pytorch-kaldi
文件夹。 create_chunks.sh
脚本首先对kaldi
特征列表进行清洗或排序(根据句子长度),然后将其拆分为一定数量的块。混合列表可能适用于前馈DNN
,而排序列表可用于RNN
(用于最小化形成微缩位时零填充的需要)。该代码还计算每个发言者和每个句子的CMVN
。
对于清洗mfcc
功能运行:
./create_chunks.sh $KALDI_ROOT/egs/timit/s5/data/train mfcc_shu 5 train 0
./create_chunks.sh $KALDI_ROOT/egs/timit/s5/data/dev mfcc_shu 1 dev 0
./create_chunks.sh $KALDI_ROOT/egs/timit/s5/data/test mfcc_shu 1 test 0
对于有序的mfcc
功能运行:
./create_chunks.sh $KALDI_ROOT/egs/timit/s5/data/train mfcc_ord 5 train 1
./create_chunks.sh $KALDI_ROOT/egs/timit/s5/data/dev mfcc_ord 1 dev 1
./create_chunks.sh $KALDI_ROOT/egs/timit/s5/data/test mfcc_ord 1 test 1
注意:每个训练块应包含大约1小时的语音。对于100小时的较大训练数据集,您应该使用:
./create_chunks.sh $KALDI_ROOT/egs/your_dataset/data/train mfcc_ord 100 train 1
3、设置配置文件。
- 进入
cfg
文件夹 - 打开配置文件(例如,
TIMIT_MLP.cfg,TIMIT_GRU.cfg
)并根据您的路径修改它: tr_fea_scp
包含使用create_chunks.sh
创建的功能列表。tr_fea_opts
允许用户轻松添加规范化,衍生物和其他类型的特征处理。tr_lab_folder
是包含对齐(标签)的kaldi
文件夹。tr_lab_opts
允许用户派生依赖于上下文的电话目标(当设置为ali-to-pdf
时)或单声道目标(当设置为ali-to-phone --per-frame
时)。- 请修改
dev
和测试数据的路径。 - 您可以根据需要随意修改
DNN
架构和其他优化参数。 - 所需的
count_file
用于在馈送解码器之前规范化DNN
后验。该归一化步骤对于HMM-DNN
语音识别是至关重要的。事实上,DNN提供后验概率,而HMM
是与可能性一起工作的生成模型。为了得出所需的可能性,可以简单地将后验除以先验概率。计数文件包含上述先验,通过简单计算电话状态得出。如果运行完整的TIMIT s5
配方(包括DNN
部分),则会在此处自动创建计数文件:
$KALDI_ROOT/egs/timit/s5/exp/dnn4_pretrain-dbn_dnn/ali_train_pdf.counts
否则,您可以使用以下命令临时创建:
alidir=/home/mirco/kaldi-trunk/egs/timit/s5/exp/tri3_ali (change it with your own path)num_pdf=$(hmm-info $alidir/final.mdl | awk '/pdfs/{print $4}')
labels_tr_pdf="ark:ali-to-pdf $alidir/final.mdl \"ark:gunzip -c $alidir/ali.*.gz |\" ark:- |"analyze-counts --verbose=1 --binary=false --counts-dim=$num_pdf "$labels_tr_pdf" ali_train_pdf.counts
- 使用
use_cuda=1
选项在GPU
上运行代码(强烈建议)。 - 使用
save_gpumem = 0
选项来保存gpu
内存。代码会慢一点(大约10-15%
),但它可以节省gpu
内存。 - 有关所有可能选项的更详细说明,请参阅
config_description.cfg
。
4、运行实验。
键入以下命令以运行DNN
训练:
./run_exp.sh cfg/baselines/TIMIT_MLP.cfg
或者
./run_exp.sh cfg/baselines/TIMIT_GRU.cfg
要检查可能出现的错误,请大家看看到log.log保存到在CFG文件中指定的输出文件夹(out_folder)文件。请注意,run_exp.sh是一个执行完整ASR实验(训练,转发和解码步骤)的bash脚本。如果一切正常,您应该在输出文件夹中找到以下文件:
- 文件
res.res
总结了各个时期的训练和评估表现。查看exp/our_results
,了解运行代码时应该获得的结果。 - 包含语音识别结果的文件夹
decode_test
。如果您输入./RESULTS
,您应该能够看到每个实验的错误率(PER%
)。 .pkl
模型是用于语音解码的最终模型。.info
文件报告每个训练块的损失和错误性能。log.log
文件包含训练过程中可能发生的错误。
添加自定义DNN模型
可以轻松编写自己的自定义DNN
模型并将其插入neural_nets.py
。与已经实现的模型类似,用户必须编写初始化DNN
参数的init
方法和forward
方法。正向方法应该输入当前特征x
和相应的lab
标签。它必须在输出端提供处理过的小批量的损失,误差和后验概率。创建自定义DNN
后,应以这种方式将新模型导入run_nn_single_ep.py
文件:
from neural_nets import mydnn as ann
如果模型是RNN
模型,则正确设置标签rnn = 1
并且如果它是前馈DNN
则rnn = 0
也是很重要的。请注意,RNN
和前馈模型基于不同的特征处理(对于RNN
模型,功能是根据其长度排序的,对于前馈DNN
,功能是shuffled
的。)
项目地址:mravanelli/pytorch-kaldi
原创文章,转载请注明 :pytorch使用pytorch-kaldi实现ASR语音识别 - pytorch中文网
原文出处: https://ptorch.com/news/208.html
问题交流群 :168117787
pytorch使用pytorch-kaldi实现ASR语音识别相关推荐
- python语音识别库kaldi_pytorch使用pytorch-kaldi实现ASR语音识别 - pytorch中文网
pytorch-kaldi是开发最先进的DNN/RNN混合语音识别系统的公共存储库.DNN部分由pytorch管理,而特征提取,标签计算和解码使用kaldi工具包执行.前面我们已经介绍了Linux/W ...
- Linux/Windos搭建安装Kaldi环境实现ASR语音识别
Linux/Windos搭建安装Kaldi环境实现ASR语音识别 Song • 5910 次浏览 • 0 个回复 • 2018年08月26日 Kaldi是一个强大的语音识别工具库(ASR),主要由Da ...
- Pytorch Note1 Pytorch介绍
Pytorch Note1 Pytorch介绍 PyTorch的诞生 常见的深度学习框架简介 为什么选择PyTorch 总结一下Pytorch的特点 Python 优先 命令式体验 快速精益 安装 全 ...
- 1.0 深度学习回顾与PyTorch简介 - PyTorch学习笔记
P1 深度学习回顾与PyTorch简介 视频课程地址:点我 fly~~~ 本节课主要偏向于NLP,因为作者本人是做NLP方向NLP 预训练三种模型: BERT OpenAI GPT ELMo [NLP ...
- 【0基础入门Pytorch】Pytorch的简介与安装(Windows)
任务内容: Pytorch简介 Pytorch的安装步骤 1. Pytorch简介 PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序.它主要由Facebook ...
- 【Pytorch】| Pytorch中softmax的dim的详细总结
[Pytorch]| Pytorch中softmax的dim的详细总结 关于softmax的理解 一维向量:dim=0和dim=-1结果相同,dim=1和dim=2会报错 二维张量:dim=1和dim ...
- [Pytorch框架] PyTorch 中文手册
PyTorch 中文手册 书籍介绍 这是一本开源的书籍,目标是帮助那些希望和使用PyTorch进行深度学习开发和研究的朋友快速入门. 由于本人水平有限,在写此教程的时候参考了一些网上的资料,在这里对他 ...
- ASR 语音识别(VOSK)API资源/DEMO
jiaying系列 网页版演示地址:ai.moneymeeting.club ASR 语音识别(VOSK)API资源/DEMO 注:VOSK将下线,改为NEMO,请移步:https://blog.cs ...
- 基于kaldi的在线语音识别
本文是基于kaldi的在线语音识别,使用b/s架构进行在线识别.适用于刚刚接触的小白. 开发环境:jdk-1.8,Ubuntu16.04,Eclipse. 开发过程: 1.准备必须的文件 如果你想要实 ...
最新文章
- 链表问题5——反转部分单向链表
- [转] Python 爬虫的工具列表 附Github代码下载链接
- [机器学习收藏] TensorFlow初学者必须了解的55个经典案例
- SharePoint 2010 技术参数(整理)
- android 文字反转_多文字共享信息系统
- 可视化排班管理_小白经理的思考日记-可视化看板和走动管理
- php刷新父页面,layui: 子iframe关闭/传值/刷新父页面
- Oracle分页查询语句(一)
- 基于差分整合移动平均自回归模型(ARIMA)的时序数据滚动预测建模与网格调参优化实战
- 数学建模-二胎政策对中国人口的影响
- chipgenius芯片精灵v4|chipgenius芯片精灵 usb检测工具绿色版v4.00.1024下载
- JAVA中关于除数为0
- ImageWatch详细教程
- win8 cn_windows_8_x86_dvd_915414.iso 安装密钥
- 顺芯ES8374单声道codec音频解码芯片,集成功放IC
- select 检索数据
- 基金经理做场外期权的法律风险分析
- leveldb 详解
- 红色荧光染料AF 594活性酯,Alexa Fluor 594 NHS ester,CAS:295348-87-7
- 注册表编辑器被改这样恢复