ESPnet运行中文ASR示例 您所在的位置:网站首页 opensmile安装教程 ESPnet运行中文ASR示例

ESPnet运行中文ASR示例

2023-10-19 10:29| 来源: 网络整理| 查看: 265

ESPnet简介 ESPnet是一个端到端语音处理工具包。主要侧重于端到端语音识别和端到端语音合成。ESPnet使用Chaine和PyTorch作为主要的深度学习引擎,并且还遵循Kaldi风格的数据处理、特征提取/格式化和配方(recipe,Kaldi的处理方式),以提供用于语音识别和其他语音处理实验的完整设置。

拉取Docker image Docker image已预安装ESPnet的依赖Kaldi。ESPnet使用Conda环境来安装Python及其信赖。

git pull espnet/espnet:200~gpu-cuda10.0-cudnn7-u18

也可以不使用Docker image,有两种方式:

从源码编译安装ESPnet,这时得自己编译安装Kaldi与Warp-CTC 使用ESPnet预编译的二进制Kaldi与ESPnet 下载预训练中文ASR模型 官方提供了使用Aishell数据集的中文预训练ASR模型。

| Task | CER (%) | WER (%) | Pretrained model | | ----------- | :----: | :----: | :----: | | Aishell dev | 6.0 | N/A | [link](https://github.com/espnet/espnet/blob/master/egs/aishell/asr1/RESULTS.md#transformer-result-default-transformer-with-initial-learning-rate--10-and-epochs--50) | | Aishell test | 6.7 | N/A | same as above |

克隆ESPnet源码 git clone [email protected]:espnet/espnet 预训练模型放入egs/aishell目录中 ├── conf │ ├── decode.yaml │ └── train.yaml ├── data │ └── train_sp │ └── cmvn.ark └── exp ├── train_rnnlm_pytorch_lm │ ├── model.json │ └── rnnlm.model.best └── train_sp_pytorch_train_pytorch_transformer_lr1.0 └── results ├── model.json └── model.last10.avg.best 启动容器 一分部源码目录需要映射进容器中使用,这里是参考egs/aishell/asr1/run.sh的内容。

docker run -it --rm \ -v /home/ubuntu/jack/espnet/egs:/espnet/egs \ -v /home/ubuntu/jack/espnet/espnet:/espnet/espnet \ -v /home/ubuntu/jack/espnet/test:/espnet/test \ -v /home/ubuntu/jack/espnet/utils:/espnet/utils \ -v /home/ubuntu/jack/espnet/demo_asr:/espnet/demo_asr \ --workdir /espnet/demo_asr/ \ espnet/espnet:gpu-cuda10.0-cudnn7-u18 \ /bin/bash

运行中文ASR识别示例 预训练的中文ASR模型包含语言模型。使用的是transformer模型架构。此Demo没有使用语言模型。

随机挑选一个Aishell训练集中的音频文件作示例:BAC009S0730W0125.wav。

import json import torch import argparse from espnet.bin.asr_recog import get_parser from espnet.nets.pytorch_backend.e2e_asr_transformer import E2E import os import scipy.io.wavfile as wav from python_speech_features import fbank filename = os.path.join(os.path.dirname(__file__), 'BAC009S0730W0125.wav') sample_rate, waveform = wav.read(filename) fbank = fbank(waveform,samplerate=16000,winlen=0.025,winstep=0.01, nfilt=86,nfft=512,lowfreq=0,highfreq=None,preemph=0.97) root = "espnet/egs/aishell/asr1" root = os.path.join(os.path.dirname(__file__), '../..', root) model_dir = root + "/exp/train_sp_pytorch_train_pytorch_transformer_lr1.0/results" # load model with open(model_dir + "/model.json", "r") as f: idim, odim, conf = json.load(f) model = E2E(idim, odim, argparse.Namespace(**conf)) model.load_state_dict(torch.load(model_dir + "/model.last10.avg.best"), strict=False) model.cpu().eval() # load tocken_list token_list = conf['char_list'] # recognize speech parser = get_parser() args = parser.parse_args(["--beam-size", "2", "--ctc-weight", "1.0", "--result-label", "out.json", "--model", ""]) result = model.recognize(fbank, args, token_list) s = "".join(conf["char_list"][y] for y in result[0]["yseq"]).replace("", "").replace("", " ").replace("", "") print("prediction: ", s)

ESPNet实现ASR包含以下流程: image.png 数据准备:下载数据与解压缩数据;

特征提取:使用Kaldi(Kaldi也是个开源ASR工具)来提取语音特征,输出为80维的FBank特征,加上3维的pitch特征,总共83维。然后进行均值归一化,让网络更容易对语音特征进行学习;

转换数据格式:将中间数据转化为JSON格式;

语言模型的训练:语言模型使用的RNN-LM模型,其中RNN-LM训练有无字的字符序列水平知识。尽管注意解码器暗含像等式中一样包含语言模型。 RNN-LM概率用于与解码器网络一起预测输出标签。基于注意力的解码器会先学会使用LM。此外,RNN-LM可以与编码器一起训练解码器网络

声学模型的训练:使用字典、训练集和测试集,基于CTC模型、Attention的架构和Transformer的解码器进行声学部分的训练;

识别与打分:联合Transformer模型、CTC模型和RNN语言模型进行打分:

识别结果! image.png

image.png



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有