🌍 跨越语言的桥梁: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

发表评论

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