openspeech-fork:基于 PyTorch-Lightning 与 Hydra 的端到端语音识别框架项目

我修改了部分代码,使得此项目可运行于python3.12, pytorch,2.6.0+cu124, 仅运行python3 ./openspeech_cli/hydra_train.py即可,配置文件在openspeech/configs/train.yaml

Branch1Tags0

🤗 为 OpenSpeech 贡献代码 🤗


OpenSpeech 提供了各种 ASR 建模论文的参考实现以及三种语言的食谱,用于执行自动语音识别任务。我们的目标是让 ASR 技术更易于每个人使用。

OpenSpeech 得益于两个强大的库——PyTorch-LightningHydra。上述两个库中提供了多种功能,包括多 GPU 和 TPU 训练、混合精度以及分层配置管理等。

我们非常感谢任何形式的反馈或贡献。欢迎对小的 issuse 如错误修复、文档改进进行处理。对于重要的贡献和新功能,请在相应的 issuse 中与协作者讨论。

新功能

目录

OpenSpeech 是什么?

OpenSpeech 是一个用于制作端到端语音识别器的框架。端到端(E2E)自动语音识别(ASR)是基于神经网络的语音识别领域中的一种新兴范式,它具有多种优势。传统的“混合”ASR 系统,由声学模型、语言模型和发音模型组成,需要分别训练这些组件,每个组件都可能很复杂。

例如,声学模型的训练是一个多阶段的模型训练和语音声学特征序列与输出标签序列时间对齐的过程。相比之下,端到端 ASR 是一种单一集成的方法,具有更简单的训练管道,并且模型在低音频帧率下运行。这减少了训练时间、解码时间,并允许与自然语言理解等下游处理进行联合优化。

由于这些优势,许多端到端语音识别相关的开源项目已经出现。但是,其中许多都是基于基本的 PyTorch 或 Tensorflow,很难使用混合精度、多节点训练和 TPU 训练等功能。然而,有了 PyTorch-Lighting 等框架,这些功能可以轻松使用。因此,我们创建了一个引入 PyTorch-Lightning 和 Hydra 的语音识别框架,以便轻松使用这些高级功能。

为什么我应该使用 OpenSpeech?

  1. PyTorch-Lighting 基础框架。
    • 多种功能:混合精度、多节点训练、TPU 训练等。
    • 模型变得与硬件无关
    • 因为 Lightning 处理了棘手的工程问题,所以犯的错误更少
    • Lightning 与许多流行的机器学习工具集成。
  2. 著名 ASR 模型的易用性实验。
    • 支持 20 多种模型,并且持续更新。
    • 对于教育者和实践者来说入门门槛低。
    • 为希望进行各种实验的研究人员节省时间。
  3. 提供了最广泛使用的语言英语、中文和韩语的食谱。
    • LibriSpeech - 在 ASR 任务中最广泛使用的 1,000 小时英语数据集。
    • AISHELL-1 - 170 小时的中文普通话语音语料库。
    • KsponSpeech - 1,000 小时的韩语开放域对话语音。
  4. 根据需要轻松定制模型或新的数据集:
    • 提供了支持的模型的默认超参数,但可以轻松调整。
    • 通过组合已经提供的模块,轻松创建自定义模型。
    • 如果要使用新的数据集,只需定义 pl.LightingDataModuleTokenizer 类。
  5. 音频处理
    • 可以轻松使用代表性音频特征,如频谱图、Mel-频谱图、滤波器组和 MFCC。
    • 提供了多种增强功能,包括 SpecAugment、噪声注入和音频拼接。

为什么我不应该使用 OpenSpeech?

  • 此框架提供了训练 ASR 模型的代码,但不提供预训练模型的 API。
  • 此框架不提供预训练模型。

模型架构

我们支持以下所有模型。请注意,模型的实现重要概念与之一致,但实现的细节可能会有所不同。

  1. 百度研究院发布的 DeepSpeech2 配套论文《Deep Speech 2: End-to-End Speech Recognition in English and Mandarin》(英文与普通话端到端语音识别),作者为 Dario Amodei, Rishita Anubhai, Eric Battenberg, Carl Case, Jared Casper, Bryan Catanzaro, Jingdong Chen, Mike Chrzanowski, Adam Coates, Greg Diamos, Erich Elsen, Jesse Engel, Linxi Fan, Christopher Fougner, Tony Han, Awni Hannun, Billy Jun, Patrick LeGresley, Libby Lin, Sharan Narang, Andrew Ng, Sherjil Ozair, Ryan Prenger, Jonathan Raiman, Sanjeev Satheesh, David Seetapun, Shubho Sengupta, Yi Wang, Zhiqian Wang, Chong Wang, Bo Xiao, Dani Yogatama, Jun Zhan, Zhenyao Zhu。

  2. 多伦多大学发布的 RNN-Transducer 配套论文《Sequence Transduction with Recurrent Neural Networks》(递归神经网络序列转换),作者为 Alex Graves。

  3. 亚琛工业大学发布的 LSTM Language Model 配套论文《LSTM Neural Networks for Language Modeling》(长短期记忆神经网络语言模型),作者为 Martin Sundermeyer, Ralf Schluter, 和 Hermann Ney。

  4. 卡内基梅隆大学与谷歌大脑发布的 Listen Attend Spell 配套论文《Listen, Attend and Spell》(听、关注、拼写),作者为 William Chan, Navdeep Jaitly, Quoc V. Le, Oriol Vinyals。

  5. 波兰弗罗茨瓦夫大学、雅各布斯大学和蒙特利尔大学发布的 Location-aware attention based Listen Attend Spell 配套论文《Attention-Based Models for Speech Recognition》(基于注意力的语音识别模型),作者为 Jan Chorowski, Dzmitry Bahdanau, Dmitriy Serdyuk, Kyunghyun Cho, Yoshua Bengio。

  6. 三菱电机研究实验室和麻省理工学院、卡内基梅隆大学发布的 Deep CNN Encoder with Joint CTC-Attention Listen Attend Spell 配套论文《Advances in Joint CTC-Attention based End-to-End Speech Recognition with a Deep CNN Encoder and RNN-LM》(基于深度CNN编码器和RNN-LM的联合CTC-注意力端到端语音识别的进展),作者为 Takaaki Hori, Shinji Watanabe, Yu Zhang, William Chan。

  7. 谷歌发布的 Multi-head attention based Listen Attend Spell 配套论文《State-of-the-art Speech Recognition With Sequence-to-Sequence Models》(基于序列到序列模型的最新语音识别技术),作者为 Chung-Cheng Chiu, Tara N. Sainath, Yonghui Wu, Rohit Prabhavalkar, Patrick Nguyen, Zhifeng Chen, Anjuli Kannan, Ron J. Weiss, Kanishka Rao, Ekaterina Gonina, Navdeep Jaitly, Bo Li, Jan Chorowski, Michiel Bacchiani。

  8. 中国科学院大学和自动化研究所发布的 Speech-Transformer 配套论文《Speech-Transformer: A No-Recurrence Sequence-to-Sequence Model for Speech Recognition》(用于语音识别的无循环序列到序列模型),作者为 Linhao Dong, Shuang Xu, Bo Xu。

  9. Facebook AI Research发布的 VGG-Transformer 配套论文《Transformers with convolutional context for ASR》(具有卷积上下文的变换器用于自动语音识别),作者为 Abdelrahman Mohamed, Dmytro Okhonko, Luke Zettlemoyer。

  10. NTT通信科学实验室、早稻田大学、语言与语音处理中心、约翰霍普金斯大学发布的 Transformer with CTC 配套论文《Improving Transformer-based End-to-End Speech Recognition with Connectionist Temporal Classification and Language Model Integration》(通过连接主义时间分类和语言模型集成改进基于变换器的端到端语音识别),作者为 Shigeki Karita, Nelson Enrique Yalta Soplin, Shinji Watanabe, Marc Delcroix, Atsunori Ogawa, Tomohiro Nakatani。

  11. NTT公司发布的 Joint CTC-Attention based Transformer 配套论文《Self-Distillation for Improving CTC-Transformer-based ASR Systems》(自蒸馏以改进基于CTC-变换器的自动语音识别系统),作者为 Takafumi Moriya, Tsubasa Ochiai, Shigeki Karita, Hiroshi Sato, Tomohiro Tanaka, Takanori Ashihara, Ryo Masumura, Yusuke Shinohara, Marc Delcroix。

  12. 亚马逊网络服务发布的 Transformer Language Model 配套论文《Language Models with Transformers》(带有变换器的语言模型),作者为 Chenguang Wang, Mu Li, Alexander J. Smola。

  13. 英伟达和纽约大学发布的 Jasper 配套论文《Jasper: An End-to-End Convolutional Neural Acoustic Model》(Jasper:一种端到端卷积神经网络声学模型),作者为 Jason Li, Vitaly Lavrukhin, Boris Ginsburg, Ryan Leary, Oleksii Kuchaiev, Jonathan M. Cohen, Huyen Nguyen, Ravi Teja Gadde。

  14. 英伟达、伊利诺伊大学和圣彼得堡大学发布的 QuartzNet 配套论文《QuartzNet: Deep Automatic Speech Recognition with 1D Time-Channel Separable Convolutions》(QuartzNet:具有一维时间通道可分离卷积的深度自动语音识别),作者为 Samuel Kriman, Stanislav Beliaev, Boris Ginsburg, Jocelyn Huang, Oleksii Kuchaiev, Vitaly Lavrukhin, Ryan Leary, Jason Li, Yang Zhang。

  15. Facebook AI发布的 Transformer Transducer 配套论文《Transformer-Transducer: End-to-End Speech Recognition with Self-Attention》(带有自注意力的端到端语音识别),作者为 Ching-Feng Yeh, Jay Mahadeokar, Kaustubh Kalgaonkar, Yongqiang Wang, Duc Le, Mahaveer Jain, Kjell Schubert, Christian Fuegen, Michael L. Seltzer。

  16. 西北工业大学、波尔多大学、约翰霍普金斯大学、人类数据实验室、京都大学、NTT公司和上海交通大学发布的 Conformer with CTC 配套论文《Recent Developments on ESPNET Toolkit Boosted by Conformer》(由Conformer增强的ESPNET工具包的最新进展),作者为 Pengcheng Guo, Florian Boyer, Xuankai Chang, Tomoki Hayashi, Yosuke Higuchi, Hirofumi Inaguma, Naoyuki Kamo, Chenda Li, Daniel Garcia-Romero, Jiatong Shi, Jing Shi, Shinji Watanabe, Kun Wei, Wangyou Zhang, Yuekai Zhang。

  17. IBM Research AI发布的 Conformer with LSTM Decoder 配套论文《On the limit of English conversational speech recognition》(关于英语对话语音识别的极限),作者为 Zoltán Tüske, George Saon, Brian Kingsbury。

  18. 谷歌发布的 ContextNet 配套论文《ContextNet: Improving Convolutional Neural Networks for Automatic Speech Recognition with Global Context》(ContextNet:通过全局上下文改善卷积神经网络自动语音识别),作者为 Wei Han, Zhengdong Zhang, Yu Zhang, Jiahui Yu, Chung-Cheng Chiu, James Qin, Anmol Gulati, Ruoming Pang, Yonghui Wu。

  19. 伯克利大学发布的 Squeezeformer 配套论文《Squeezeformer: An Efficient Transformer for Automatic Speech Recognition》(Squeezeformer:一种用于自动语音识别的高效变换器),作者为 Sehoon Kim, Amir Gholami, Albert Shaw, Nicholas Lee, Karttikeya Mangalam, Jitendra Malik, Michael W. Mahoney, Kurt Keutzer。

开始使用

我们使用 Hydra 来控制所有的训练配置。 如果您不熟悉 Hydra,我们建议您访问 Hydra 官网。 通常,Hydra 是一个开源框架,通过提供创建动态分层配置的能力,简化了研究应用的开发。 如果您想了解我们如何使用 Hydra,我们建议您阅读 这里

支持的数据集

我们支持 LibriSpeechKsponSpeechAISHELL-1

LibriSpeech 是一个包含大约 1,000 小时 16kHz 读取英语语音的语料库,由 Vassil Panayotov 在 Daniel Povey 的协助下准备而成。这些数据来源于阅读 LibriVox 项目中的有声读物,并且已经被仔细地分段和对齐。

Aishell 是北京壳壳科技有限公司发布的开源汉语普通话语音语料库。邀请了来自中国不同口音区域的 400 人参与录音,录音在安静的室内环境进行,使用高保真麦克风,并下采样至 16kHz。

KsponSpeech 是一个大规模的韩语自发语音语料库。这个语料库包含由约 2,000 名母语韩语者在清洁环境中说的 969 小时通用开放域对话语音。所有数据都是通过记录两个人自由交谈各种话题的对话,并手动转录语音而构建的。要开始训练,必须提前准备好 KsponSpeech 数据集。要下载 KsponSpeech,您需要从 AI Hub 获取许可。

清单文件

  • 声学模型清单文件格式:
LibriSpeech/test-other/8188/269288/8188-269288-0052.flac        ▁ANNIE ' S ▁MANNER ▁WAS ▁VERY ▁MYSTERIOUS       4039 20 5 531 17 84 2352
LibriSpeech/test-other/8188/269288/8188-269288-0053.flac        ▁ANNIE ▁DID ▁NOT ▁MEAN ▁TO ▁CONFIDE ▁IN ▁ANYONE ▁THAT ▁NIGHT ▁AND ▁THE ▁KIND EST ▁THING ▁WAS ▁TO ▁LEAVE ▁HER ▁A LONE    4039 99 35 251 9 4758 11 2454 16 199 6 4 323 200 255 17 9 370 30 10 492
LibriSpeech/test-other/8188/269288/8188-269288-0054.flac        ▁TIRED ▁OUT ▁LESLIE ▁HER SELF ▁DROPP ED ▁A SLEEP        1493 70 4708 30 115 1231 7 10 1706
LibriSpeech/test-other/8188/269288/8188-269288-0055.flac        ▁ANNIE ▁IS ▁THAT ▁YOU ▁SHE ▁CALL ED ▁OUT        4039 34 16 25 37 208 7 70
LibriSpeech/test-other/8188/269288/8188-269288-0056.flac        ▁THERE ▁WAS ▁NO ▁REPLY ▁BUT ▁THE ▁SOUND ▁OF ▁HURRY ING ▁STEPS ▁CAME ▁QUICK ER ▁AND ▁QUICK ER ▁NOW ▁AND ▁THEN ▁THEY ▁WERE ▁INTERRUPTED ▁BY ▁A ▁GROAN     57 17 56 1368 33 4 489 8 1783 14 1381 133 571 49 6 571 49 82 6 76 45 54 2351 44 10 3154
LibriSpeech/test-other/8188/269288/8188-269288-0057.flac        ▁OH ▁THIS ▁WILL ▁KILL ▁ME ▁MY ▁HEART ▁WILL ▁BREAK ▁THIS ▁WILL ▁KILL ▁ME 299 46 71 669 50 41 235 71 977 46 71 669 50
...
...

训练示例

您可以使用如下方式,轻松地训练LibriSpeech数据集:

  • 示例1:在GPU上,使用filter-bank特征训练conformer-lstm模型。
$ python3 ./openspeech_cli/hydra_train.py \
    dataset=librispeech \
    dataset.dataset_download=True \
    dataset.dataset_path=$DATASET_PATH \
    dataset.manifest_file_path=$MANIFEST_FILE_PATH \
    tokenizer=libri_subword \
    model=conformer_lstm \
    audio=fbank \
    lr_scheduler=warmup_reduce_lr_on_plateau \
    trainer=gpu \
    criterion=cross_entropy

您可以直接使用如下方式训练KsponSpeech数据集:

  • 示例2:在TPU上,使用mel-spectrogram特征训练listen-attend-spell模型:
$ python3 ./openspeech_cli/hydra_train.py \
    dataset=ksponspeech \
    dataset.dataset_path=$DATASET_PATH \
    dataset.manifest_file_path=$MANIFEST_FILE_PATH \
    dataset.test_dataset_path=$TEST_DATASET_PATH \
    dataset.test_manifest_dir=$TEST_MANIFEST_DIR \
    tokenizer=kspon_character \
    model=listen_attend_spell \
    audio=melspectrogram \
    lr_scheduler=warmup_reduce_lr_on_plateau \
    trainer=tpu \
    criterion=cross_entropy

您可以直接使用AISHELL-1数据集进行训练,如下所示:

  • 示例3:在GPU上使用FP16训练带有mfcc特征的quartznet模型:
$ python3 ./openspeech_cli/hydra_train.py \
    dataset=aishell \
    dataset.dataset_path=$DATASET_PATH \
    dataset.dataset_download=True \
    dataset.manifest_file_path=$MANIFEST_FILE_PATH \
    tokenizer=aishell_character \
    model=quartznet15x5 \
    audio=mfcc \
    lr_scheduler=warmup_reduce_lr_on_plateau \
    trainer=gpu-fp16 \
    criterion=ctc

评估示例

  • 示例1:评估 listen_attend_spell 模型:
$ python3 ./openspeech_cli/hydra_eval.py \
    audio=melspectrogram \
    eval.dataset_path=$DATASET_PATH \
    eval.checkpoint_path=$CHECKPOINT_PATH \
    eval.manifest_file_path=$MANIFEST_FILE_PATH \
    model=listen_attend_spell \
    tokenizer=kspon_character \
    tokenizer.vocab_path=$VOCAB_FILE_PATH \
  • 示例2:评估 listen_attend_spellconformer_lstm 模型组合的效果:
$ python3 ./openspeech_cli/hydra_eval.py \
    audio=melspectrogram \
    eval.model_names=(listen_attend_spell, conformer_lstm) \
    eval.dataset_path=$DATASET_PATH \
    eval.checkpoint_paths=($CHECKPOINT_PATH1, $CHECKPOINT_PATH2) \
    eval.ensemble_weights=(0.3, 0.7) \
    eval.ensemble_method=weighted \
    eval.manifest_file_path=$MANIFEST_FILE_PATH

KsponSpeech 目录结构

  • dataset.dataset_path:$BASE_PATH/KsponSpeech
$BASE_PATH/KsponSpeech
├── KsponSpeech_01
├── KsponSpeech_02
├── KsponSpeech_03
├── KsponSpeech_04
└── KsponSpeech_05

数据集测试路径: $基础路径/KsponSpeech_eval

$BASE_PATH/KsponSpeech_eval
├── eval_clean
└── eval_other

dataset.test_manifest_dir: $BASE_PATH/KsponSpeech_scripts 翻译为中文:

数据集测试清单目录:$BASE_PATH/KsponSpeech_scripts

$BASE_PATH/KsponSpeech_scripts
├── eval_clean.trn
└── eval_other.trn

语言模型训练示例

语言模型训练仅需准备以下格式的数据:

openspeech is a framework for making end-to-end speech recognizers.
end to end automatic speech recognition is an emerging paradigm in the field of neural network-based speech recognition that offers multiple benefits.
because of these advantages, many end-to-end speech recognition related open sources have emerged.
...
...

请注意,您需要使用与声学模型相同的词汇。

  • 示例:训练 lstm_lm 模型:
$ python3 ./openspeech_cli/hydra_lm_train.py \
    dataset=lm \
    dataset.dataset_path=../../../lm.txt \
    tokenizer=kspon_character \
    tokenizer.vocab_path=../../../labels.csv \
    model=lstm_lm \
    lr_scheduler=tri_stage \
    trainer=gpu \
    criterion=perplexity

安装指南

本项目推荐使用 Python 3.7 或更高版本。 我们建议为该项目创建一个新的虚拟环境(使用 virtual env 或 conda)。

先决条件

  • numpy: 执行 pip install numpy(如安装 Numpy 时遇到问题,请参考此处)。
  • pytorch: 参考您的环境选择合适的版本,访问PyTorch 官网进行安装。
  • librosa: 执行 conda install -c conda-forge librosa(如安装 librosa 时遇到问题,请参考此处)。
  • torchaudio: 执行 pip install torchaudio==0.6.0(如安装 torchaudio 时遇到问题,请参考此处)。
  • sentencepiece: 执行 pip install sentencepiece(如安装 sentencepiece 时遇到问题,请参考此处)。
  • pytorch-lightning: 执行 pip install pytorch-lightning(如安装 pytorch-lightning 时遇到问题,请参考此处)。
  • hydra: 执行 pip install hydra-core --upgrade(如安装 hydra 时遇到问题,请参考此处)。
  • warp-rnnt: 参考安装warp-rnnt 页面中的库。
  • ctcdecode: 参考安装ctcdecode 页面中的库。

从 PyPI 安装

您可以通过 PyPI 安装 OpenSpeech。

pip install openspeech-core

从源代码安装

目前我们仅支持使用 setuptools 从源代码进行安装。请检出源代码,并执行以下命令:

$ ./install.sh

安装 Apex(适用于 16 位训练)

为了加快训练速度,请安装 NVIDIA 的 apex 库:

$ git clone https://github.com/NVIDIA/apex
$ cd apex

# ------------------------
# OPTIONAL: on your cluster you might need to load CUDA 10 or 9
# depending on how you installed PyTorch

# see available modules
module avail

# load correct CUDA before install
module load cuda-10.0
# ------------------------

# make sure you've loaded a cuda version > 4.0 and < 7.0
module load gcc-6.1.0

$ pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

故障排除与贡献

如果您有任何疑问、错误报告或功能请求,请在 Github创建一个问题

我们欢迎任何形式的反馈或贡献。请随时处理诸如错误修复、文档改进等小问题。对于重大贡献和新功能的添加,请在相应的问题中与协作者们讨论。

代码风格

我们遵循 PEP-8 代码风格指南。特别是文档字符串的风格对于生成文档至关重要。

许可

本项目遵循 MIT 许可 - 请查看 LICENSE.md 文件了解详细信息。

引用

如果您在学术工作中使用本系统,请引用以下内容:

@GITHUB{2021-OpenSpeech,
  author       = {Kim, Soohwan and Ha, Sangchun and Cho, Soyoung},
  author email = {sh951011@gmail.com, seomk9896@gmail.com, soyoung.cho@kaist.ac.kr}
  title        = {OpenSpeech: Open-Source Toolkit for End-to-End Speech Recognition},
  howpublished = {\url{https://github.com/openspeech-team/openspeech}},
  docs         = {\url{https://openspeech-team.github.io/openspeech}},
  year         = {2021}
}

当然,请您提供需要翻译的文本内容,我会按照您的要求进行翻译。

Introduction

我修改了部分代码,使得此项目可运行于python3.12, pytorch,2.6.0+cu124, 仅运行python3 ./openspeech_cli/hydra_train.py即可,配置文件在openspeech/configs/train.yaml

Customize my domain

Downloads

0

Total downloads (including clone, pull, ZIP & release downloads), updated by T+1.

Languages

Python99.88%
Shell0.12%