在这个全球化的时代,语言不再是沟通的障碍,而是连接不同文化和思想的桥梁。随着人工智能技术的飞速发展,自动语音识别(ASR)系统的应用也日益广泛。今天,我们将深入探讨一个令人兴奋的项目——PengChengStarling,它不仅是一个多语言 ASR 系统开发工具包,更是一个为不同语言之间架起沟通桥梁的先锋。
🚀 PengChengStarling 的起源:从冰山一角到全面发展
PengChengStarling 项目是基于 icefall 项目 发展而来的。与原始的 icefall 相比,PengChengStarling 在多个方面进行了优化,特别是针对 ASR 任务的特定需求。首先,它抛弃了传统的基于配方的方法,采用了更灵活的设计,将参数配置与功能代码解耦。这种设计使得统一的代码库能够支持多种语言的 ASR 任务,极大地提高了系统的可扩展性。
此外,PengChengStarling 还将语言 ID 集成到 RNN-Transducer 架构中,这一创新显著提升了多语言 ASR 系统的性能。这一切的努力,都是为了让机器能够更好地理解和处理人类的语言。
🎤 多语言流式 ASR 模型的构建
为了验证 PengChengStarling 的能力,团队开发了一个支持 八种 语言的多语言流式 ASR 模型。这些语言包括中文、英语、俄语、越南语、日语、泰语、印尼语和阿拉伯语。每种语言的训练数据约为 2000 小时,主要来源于开放数据集。令人振奋的是,该模型在 六种 语言的流式 ASR 性能上,达到了与 Whisper-Large v3 相媲美甚至更优的表现,而其模型体积仅为 Whisper-Large v3 的 20%。
以下是模型在不同语言上的性能对比:
语言 | 测试集 | Whisper-Large v3 | 我们的模型 |
---|---|---|---|
中文 | wenetspeech test meeting | 22.99 | 22.67 |
越南语 | gigaspeech2-vi test | 17.94 | 7.09 |
日语 | reazonspeech test | 16.3 | 13.34 |
泰语 | gigaspeech2-th test | 20.44 | 17.39 |
印尼语 | gigaspeech2-id test | 20.03 | 20.54 |
阿拉伯语 | mgb2 test | 30.3 | 24.37 |
通过这些数据,我们可以看到,PengChengStarling 不仅在性能上取得了突破,同时在推理速度上也实现了 7 倍 的提升,相较于 Whisper-Large v3,展现了其卓越的效率。
🛠️ 安装与准备:开启你的 ASR 之旅
在开始使用 PengChengStarling 之前,首先需要进行安装。详细的安装说明可以参考 icefall 文档。一旦安装测试成功,PengChengStarling 就可以投入使用,开启你的 ASR 探索之旅。
📊 数据准备:为训练奠定基础
在训练过程开始之前,首先需要将原始数据预处理为所需的输入格式。这通常涉及到在 zipformer/prepare.py
中适应 make_*_list
方法,以生成 data.list
文件。完成后,脚本将为每个数据集生成相应的 cuts 和 fbank 特征,这些特征将作为 PengChengStarling 的输入数据。
配置脚本的参数通过位于 config_data
目录中的 YAML 文件进行。一旦你为数据集准备好 YAML 文件,可以使用以下命令运行脚本:
export CUDA_VISIBLE_DEVICES="0"
python zipformer/prepare.py --config-file config_data/<your_dataset_config>.yaml
📝 BPE 训练:多语言转录的基础
为了使多语言 ASR 模型能够生成多种语言的转录,必须在来自不同语言的文本数据上训练 BPE 模型。由于转录嵌入在 cuts 中,可以使用所有目标语言的训练 cuts 来训练 BPE 模型。
训练 BPE 模型的脚本位于 zipformer/prepare_bpe.py
。运行脚本之前,需要在 YAML 文件中配置参数,并将其放置在 config_bpe
目录中。请注意,langtags 参数应覆盖所有目标语言。对于中文、日语和泰语等非空格分隔语言,必须在 BPE 训练之前进行分词,以协助处理。一旦为 BPE 模型准备好 YAML 文件,可以使用以下命令运行脚本:
python zipformer/prepare_bpe.py --config-file config_bpe/<your_bpe_config>.yaml
🏗️ 模型训练与微调:构建你的 ASR 模型
我们采用了以 Zipformer 为编码器的 Transducer 架构来构建多语言 ASR 模型。为了减轻跨语言干扰问题,我们通过在解码器中将 <SOS>
标记替换为相应的 <langtag>
来明确指定目标语言。
训练多语言 ASR 模型的脚本位于 zipformer/train.py
。在运行脚本之前,需要在 YAML 格式中配置训练参数。配置参数分为六个部分:记录相关、数据相关、训练相关、微调相关、模型相关和解码相关。每个部分都包括活动参数和默认参数。活动参数通常会根据具体训练设置而变化,而默认参数通常保持不变。
设置好参数后,可以开始训练,命令如下:
export CUDA_VISIBLE_DEVICES="0,1,2,3,4,5,6,7"
python zipformer/train.py --config-file config_train/<your_train_config>.yaml
要微调模型,只需将 do_finetune
参数设置为 true
。这将加载预训练的检查点,并使用指定的微调数据集进行微调。请注意,微调对数据和学习率非常敏感。为了在特定领域提高性能,确保训练数据的分布与测试集一致,并使用适当的学习率。由于微调使用与训练相同的配置文件,因此可以使用相同的命令执行微调过程。
📈 评估与导出:验证模型的能力
一旦训练过程完成,就需要在测试集上评估多语言 ASR 模型的性能。评估使用与训练相同的配置文件。对于流式模型,可以使用以下命令进行评估:
export CUDA_VISIBLE_DEVICES="0"
python zipformer/streaming_decode.py \
--epoch 43 \
--avg 15 \
--config-file config_train/<your_train_config>.yaml
如果评估了多个检查点,可以通过运行 local/get_best_results.py
获取最佳结果。要导出具有最佳结果的检查点以进行微调(例如,epoch 43,avg 15),可以使用以下命令:
python zipformer/export.py \
--epoch 43 \
--avg 15 \
--config-file config_train/<your_train_config>.yaml
要将最佳检查点导出为 ONNX 格式以进行部署,可以使用以下命令:
python zipformer/export-onnx-streaming.py \
--epoch 43 \
--avg 15 \
--config-file config_train/<your_train_config>.yaml
有关部署 ONNX 检查点的更多信息,请参考这个 仓库。
📚 结语:为未来铺路
PengChengStarling 项目不仅是一个技术创新的典范,更是推动多语言沟通的有力工具。通过不断的优化与发展,我们相信,这一项目将为全球范围内的语言交流带来革命性的变化。无论是学术研究、商业应用,还是日常交流,PengChengStarling 都将成为我们理解和连接世界的重要工具。
在未来的日子里,让我们共同期待 PengChengStarling 带来的更多惊喜与突破!
🔗 参考文献
- Yang, B. , Du, Y., Xiang, Y., Hou, Y., Deng, J., & Chen, X. (2024). PengChengStarling. GitHub. ✅链接
- Icefall Documentation. (n.d.). Retrieved from icefall.readthedocs.io
- Hugging Face. (n.d.). Retrieved from huggingface.co
- Lhotse Documentation. (n.d.). Retrieved from lhotse.readthedocs.io
- Sherpa ONNX Multilingual. (n.d.). Retrieved from github.com