🌍 跨越语言的桥梁:PengChengStarling 项目的奇妙旅程

在这个全球化的时代,语言不再是沟通的障碍,而是连接不同文化和思想的桥梁。随着人工智能技术的飞速发展,自动语音识别(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 meeting22.9922.67
越南语gigaspeech2-vi test17.947.09
日语reazonspeech test16.313.34
泰语gigaspeech2-th test20.4417.39
印尼语gigaspeech2-id test20.0320.54
阿拉伯语mgb2 test30.324.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 模型结构

训练多语言 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 带来的更多惊喜与突破!

🔗 参考文献

  1. Yang, B. , Du, Y., Xiang, Y., Hou, Y., Deng, J., & Chen, X. (2024). PengChengStarling. GitHub. 链接
  2. Icefall Documentation. (n.d.). Retrieved from icefall.readthedocs.io
  3. Hugging Face. (n.d.). Retrieved from huggingface.co
  4. Lhotse Documentation. (n.d.). Retrieved from lhotse.readthedocs.io
  5. Sherpa ONNX Multilingual. (n.d.). Retrieved from github.com

发表评论

Only people in my network can comment.
人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 知差(chai)网 🐾 DeepracticeX 社区 🐾 老薛主机 🐾 智柴论坛 🐾