由于数据资源有限,为代表性不足的语言构建有效的自动语音识别(automatic speech recognition,ASR)模型面临独特的挑战。
在本文中,我将讨论准备数据集、配置模型和有效训练模型的最佳实践。我还将讨论评估指标和遇到的挑战。通过遵循这些实践,您可以在数据资源有限的情况下,以机密方式为 Georgian 语或任何其他语言开发自己的高质量 ASR 模型。
查找和丰富乔治亚语言数据资源
Mozilla Common Voice (MCV) 是一项旨在实现更具包容性语音技术的开源计划,可提供各种 Georgian 语音数据。
乔治亚语的 MCV 数据集大约包括:
- 76.38 小时的经验证训练数据
- 19.82 小时的经验证的开发 (开发) 数据
- 20.46 小时的验证测试数据。
这些经过验证的数据总计约为 116.6 小时,对于训练稳健的自动语音识别(ASR)模型而言,这些数据仍然很小。适合此类模型的数据集从 250 小时开始算起。有关更多信息,请参阅示例:使用 Mozilla Common Voice Dataset 训练世界语自动语音识别(ASR)模型。
为了克服这一限制,我加入了 MCV 数据集中的未经验证的数据,该数据集包含 63.47 小时的数据。这些未经验证的数据可能需要更加准确或清洁,因此在将其用于训练之前,需要进行额外的处理以确保其质量。我在本文中详细解释了这种额外的数据处理。所有提到的数据都在预处理后的几个小时内完成。
乔治亚语言的一个有趣的方面是其单院性,因为它没有明显的大写字母和小写字母。这使得文本标准化变得更加简单,有可能会提高自动语音识别(ASR)性能。
选择 FastConformer 混合传感器 CTC BPE
- 提高速度性能:FastConformer 是 Conformer 模型的优化版本,具有 8 倍深度可分离卷积下采样,降低计算复杂性。
- 提高准确性:该模型在多任务设置中进行训练,其中包含联合传感器和CTC解码器损失函数,可提高语音识别和转录准确性。
- 稳健性:多任务设置可增强对输入数据中变化和噪声的弹性。
- 通用性:此解决方案将结合捕获远程依赖项的 Conformer 模块与适用于实时应用的高效操作,从而能够处理更广泛的自动语音识别任务以及不同程度的复杂性和难度。
微调模型参数可确保准确的转录和更好的用户体验,即使在处理小型数据集时也是如此。
为 ASR 模型构建乔治亚语言数据
为乔治亚语言构建稳健的 ASR 模型需要仔细的数据准备和训练。本节将介绍如何准备和清理高质量数据,其中包括集成其他数据源和为乔治亚语言创建自定义分词器。同时,本节还将介绍训练模型以获得最佳结果的不同方法。在整个过程中,我们专注于检查和改进模型。所有步骤将在下文中详细介绍。
- 处理数据
- 添加数据
- 创建分词器
- 训练模型
- 合并数据
- 评估性能
- 平均检查点数
- 评估模型
处理数据
要创建清单文件,请使用/NVIDIA/NeMo-speech-data-processor 储存库。在dataset-configs
→Georgian
→MCV
文件夹,你可以找到config.yaml处理数据处理的文件。
将数据转换为 NeMo 格式
提取所有数据并将其转换为未来处理所需的 NeMo 格式。在 SDP 中,每个处理器按顺序工作,因此后续处理器需要使用 NeMo 格式进行处理。
替换不受支持的角色
某些不受支持的字符和标点符号将替换为同等的受支持版本(表 1)。
不受支持的角色 | 替换 |
! | . |
… | . |
; | , |
“:\“”;„“-/ | 空格 |
大量空格 | 空格 |
丢弃非乔治亚数据
删除不包含任何格鲁吉亚字母的数据。这一点至关重要,因为未经验证的数据通常包含仅带有标点符号或空文本的文本。
按支持的字母表过滤数据
删除任何包含不在支持的字母表中的符号的数据,仅保留带有乔治亚字母和支持的标点符号的数据[?.,]
.
按字符和出现的单词进行筛选
完成 SDE 分析后,字符率异常(超过 18)和字率异常(0.3 < word_rate < 2.67)的数据将被丢弃。
按持续时间筛选
丢弃持续时间超过 18 秒的任何数据,因为 MCV 中的典型音频持续时间不到此值。
如需详细了解如何使用NeMo-speech-data-processor
请参阅/NVIDIA/NeMo-speech-data-processorGitHub 库和乔治亚数据集文档。以下命令运行config.yaml
SDP 中的文件:
python main.py --config-path=dataset_configs/georgian/mcv/ --config-name=config.yaml
添加数据
我还从 FLEURS 数据集中整合了以下数据:
- 3.20 小时的训练数据
- 0.84 小时的开发数据
- 1.89 小时的测试数据
我们应用了相同的预处理步骤,以确保一致性和质量。对于 FLEURS Georgian 数据,请使用相同的配置文件,但请自行下载。
创建分词器
数据处理完成后,创建包含词汇表的分词器。我测试了两种不同的分词器:
- Google 的字节对编码 (BPE) 分词器
- 适用于 Transformer 的词块编码分词器
BPE 分词器产生了更好的结果。分词器已集成到使用以下命令创建的 NeMo 架构中:
python <NEMO_ROOT>/scripts/tokenizers/process_asr_text_tokenizer.py \
--manifest=<path to train manifest files, seperated by commas>
OR
--data_file=<path to text data, seperated by commas> \
--data_root="<output directory>" \
--vocab_size=1024 \
--tokenizer=spe \
--no_lower_case \
--spe_type=unigram\
--spe_character_coverage=1.0 \
--log
运行此命令会在输出目录中生成两个文件夹:
text_corpus
tokenizer_spe_unigram_1024
在训练期间,必须输入第二个文件夹的路径。
训练模型
下一步是模型训练。我训练了FastConformer混合传感器CTC BPE模型。配置文件位于以下文件夹中:
<NEMO_ROOT>/examples/asr/conf/fastconformer/hybrid_transducer_ctc/fastconformer_hybrid_transducer_ctc_bpe.yaml
从因其大型数据集和出色性能而选择的英语模型checkpoint stt_en_fastconformer_hybrid_large_pc.nemo 开始训练。将该checkpoint添加到配置文件中:
name: "FastConformer-Hybrid-Transducer-CTC-BPE"
init_from_nemo_model:
model0:
path: '<path_to_the_checkpoint>/stt_en_fastconformer_hybrid_large_pc.nemo'
exclude: ['decoder','joint']
通过调用以下命令训练模型,找到性能最佳的命令,然后设置最终参数:
python <NEMO_ROOT>/examples/asr/asr_hybrid_transducer_ctc/speech_to_text_hybrid_rnnt_ctc_bpe.py\
--config-path=<path to dir of configs>
--config-name=<name of config without .yaml>) \
model.train_ds.manifest_filepath=<path to train manifest> \
model.validation_ds.manifest_filepath=<path to val/test manifest> \
model.tokenizer.dir=<path to directory of tokenizer> (not full path to the vocab file!)>\
model.tokenizer.type=bpe \
合并数据
该模型使用各种数据组合进行训练:
- MCV-Train:训练数据长达 76.28 小时
- MCV-Development:19.5 小时
- MCV-Test:20.4 小时
- MCV-Other: (未经验证的数据)
- Fleur-Train:3.20 小时
- Fleur- Development:0.84 小时
- Fleur-Test:1.89 小时
由于训练、开发、测试之间的百分比比率较小,因此在某些训练中,我将开发数据添加到训练数据中。
训练期间的数据组合包括以下内容:
- MCV-Train
- MCV-Train/Dev
- MCV-Train/Dev/Other
- MCV-Train/Other
- MCV-Train/Dev-Fleur-Train/Dev
- MCV-Train/Dev/Other-Fleur-Train/Dev
评估性能
在各种 MCV 子集上训练的 CTC 和 RNN-T 模型表明,加入其他数据 (MCV-Train/Dev/Other) 可以改善 WER,值越低表示性能越好。这突出了使用扩展数据集时模型的可靠性。
在各种 Mozilla Common Voice (MCV) 子集上训练的 CTC 和 RNN-T 模型表明,当纳入其他数据(MCV-Train/Dev/Other)时,Google FLEURS 数据集上的 WER 得到改善。较低的 WER 值表示性能更好,这突出了模型在扩展数据集方面的可靠性和稳定性。
该模型使用了大约 3.20 小时的 FLEURS 训练数据、0.84 小时的开发数据和 1.89 小时的测试数据进行训练,但仍然取得了值得称道的结果。
求均检查点
借助 NeMo 架构,您可以使用以下命令对训练期间保存的检查点求取平均值,以提高模型的性能:
find . -name '/checkpoints/*.nemo' | grep -v -- "-averaged.nemo" | xargs scripts/checkpoint_averaging/checkpoint_averaging.py <Path to the folder with checkpoints and nemo file>/file.nemo
最佳参数
表 2 列出了具有最佳性能数据集 MCV-Train/Dev/Other FLEUR-Train/Dev 模型的最佳参数。
参数 | 价值 |
训练次数 | 150 |
精度 | 32 |
分词器 | Spe-unigram-bpe |
词汇量 | 1024 |
标点符号 | ?,. |
最小学习率 | 2e-4 |
最高学习率 | 6e-3 |
优化器 | Adam |
批量大小 | 32 |
累积 Grad 批量 | 4 |
GPU 数量 | 8 |
评估模型
在 8 个 GPU 和 1 个节点上训练模型需要大约 163 个小时的训练数据 18 个小时。
评估会考虑带有和不带有标点符号的场景,以全面评估模型的性能。
取得令人印象深刻的结果后,我训练了一个 FastConformer 混合传感器 CTC BPE 流模型,以进行实时转录。该模型具有 5.6 秒的延迟和 1.04 秒的延迟。我使用与前面描述的模型相同的参数从英语流模型检查点启动训练。表 2 比较了两个不同的 FastConformer 与 Seamless 和 Whisper 的结果。
与 MetaAI 无缝对比
在 Mozilla Common Voice 和 Google FLEURS 数据集上,使用 CTC 的 FastConformer 和 FastConformer 串流在几乎所有指标(word error rate(WER)、character error rate(CER)和 punctuation error rates)上的表现优于 Seamless 和 Whisper Large V3。Seamless 和 Whisper 不支持 CTC-WER。
结束语
FastConformer 作为乔治亚语言的高级 ASR 模型脱颖而出,与 MetaAI 在 MCV 数据集上的 Seamless 和在所有数据集上的 Whisper large V3 相比,实现了更低的 WER 和 CER。该模型的稳健架构和有效的数据预处理驱动了其惊人的性能,使其成为在乔治亚语等代表性不足的语言中进行实时语音识别的可靠选择。
FastConformer 能够适应各种数据集并针对资源受限的环境进行优化,这凸显了其在各种 ASR 场景中的实际应用。尽管使用相对少量的 FLEURS 数据进行训练,但 FastConformer 的效率和鲁棒性值得称道。
对于从事低资源语言ASR项目的人员来说,FastConformer是一个值得考虑的强大工具。它在Georgian ASR中的出色性能表明它在其他语言中也具有卓越的潜力。
通过将 FastConformer 前沿模型集成到您的项目中,探索其功能并提升您的自动语音识别解决方案。在评论中分享您的经验和结果,为自动语音识别技术的进步做出贡献。