模型简介
模型特点
模型能力
使用案例
🚀 Wav2vec2-xls-r-1b用于芬兰语自动语音识别
本声学模型是 facebook/wav2vec2-xls-r-1b 针对芬兰语自动语音识别(ASR)任务的微调版本。该模型使用了 275.6 小时的芬兰语转录语音数据进行微调。Wav2Vec2 XLS - R 在 这篇论文 中被提出,并首次在 此页面 发布。
本仓库还包含了在解码阶段与声学模型一起使用的芬兰语 KenLM 语言模型。
注意:此模型与 aapot/wav2vec2-xlsr-1b-finnish-lm-v2 模型完全相同,只是将该模型复制/迁移到了这个 Finnish - NLP
Hugging Face 组织中。
✨ 主要特性
- 基于大规模多语言预训练模型 Wav2Vec2 XLS - R 进行微调,适用于芬兰语自动语音识别任务。
- 包含芬兰语 KenLM 语言模型,可在解码阶段辅助声学模型。
📦 安装指南
文档未提供安装步骤,故跳过此章节。
💻 使用示例
基础用法
可查看本仓库中的 run-finnish-asr-models.ipynb 笔记本,以获取如何使用此模型的详细示例。
📚 详细文档
模型描述
Wav2Vec2 XLS - R 是 Facebook AI 推出的用于语音的大规模多语言预训练模型。它在 436000 小时的无标签语音数据上进行预训练,这些数据包括 VoxPopuli、MLS、CommonVoice、BABEL 和 VoxLingua107。该模型使用 wav2vec 2.0 目标函数,支持 128 种语言。
你可以从 这篇博客 和 这篇论文 中了解更多关于该预训练模型的信息。
此模型是预训练模型(10 亿参数变体)针对芬兰语 ASR 任务的微调版本。
预期用途与限制
预期用途
你可以将此模型用于芬兰语 ASR(语音转文本)任务。
限制和偏差
- 此模型使用的音频样本最大长度为 20 秒,因此该模型很可能在类似长度的短音频上效果最佳。不过,你也可以尝试使用更长的音频,看看效果如何。如果你在处理非常长的音频文件时遇到内存不足的错误,可以使用 这篇博客文章 中介绍的音频分块方法。
- 用于微调的绝大多数数据来自芬兰议会数据集,因此该模型可能无法很好地泛化到非常不同的领域,例如带有方言的日常芬兰语口语等。此外,数据集的音频往往以成年男性为主,因此该模型在处理儿童和女性的语音时可能效果不佳。
- 解码阶段使用的芬兰语 KenLM 语言模型是使用音频转录文本数据和芬兰语维基百科的一个子集进行训练的。因此,解码器的语言模型可能无法很好地泛化到非常不同的语言,例如带有方言的日常口语(因为维基百科主要包含正式的芬兰语)。为你的领域语言训练自己的 KenLM 语言模型并在解码中使用可能会更有益。
训练数据
此模型使用了来自以下数据集的 275.6 小时芬兰语转录语音数据进行微调:
数据集 | 时长 | 占总时长的百分比 |
---|---|---|
Common Voice 7.0 芬兰语训练 + 评估 + 其他分割 | 9.70 小时 | 3.52 % |
芬兰议会会议 2 | 0.24 小时 | 0.09 % |
VoxPopuli 芬兰语 | 21.97 小时 | 7.97 % |
CSS10 芬兰语 | 10.32 小时 | 3.74 % |
阿尔托大学芬兰议会 ASR 语料库 | 228.00 小时 | 82.73 % |
芬兰广播语料库 | 5.37 小时 | 1.95 % |
数据集经过筛选,只包含最长 20 秒的音频样本。
训练过程
此模型是在 Hugging Face 组织的 鲁棒语音挑战活动 期间进行训练的。训练在由 OVHcloud 赞助的 Tesla V100 GPU 上完成。
训练脚本由 Hugging Face 提供,可在 此处 获取。我们仅修改了其数据加载部分以适配自定义数据集。
对于 KenLM 语言模型的训练,我们遵循了 Hugging Face 提供的 博客文章教程。5 - 元 KenLM 的训练数据包括音频训练数据的文本转录以及清理后的 芬兰语维基百科(2021 年 8 月)数据集的 100000 个随机样本。
训练超参数
训练期间使用了以下超参数:
- 学习率:5e - 05
- 训练批次大小:32
- 评估批次大小:8
- 随机种子:42
- 优化器:8 位 Adam,β=(0.9, 0.999),ε = 1e - 08
- 学习率调度器类型:线性
- 学习率调度器热身步数:500
- 训练轮数:10
- 混合精度训练:原生自动混合精度(Native AMP)
预训练的 facebook/wav2vec2-xls-r-1b
模型使用以下超参数进行初始化:
- 注意力丢弃率:0.094
- 隐藏层丢弃率:0.047
- 特征投影丢弃率:0.04
- 时间掩码概率:0.082
- 层丢弃率:0.041
- 激活丢弃率:0.055
- CTC 损失缩减方式:“均值”
训练结果
训练损失 | 轮数 | 步数 | 验证损失 | 字错误率(WER) |
---|---|---|---|---|
0.7778 | 0.17 | 500 | 0.2851 | 0.3572 |
0.5506 | 0.34 | 1000 | 0.1595 | 0.2130 |
0.6569 | 0.5 | 1500 | 0.1458 | 0.2046 |
0.5997 | 0.67 | 2000 | 0.1374 | 0.1975 |
0.542 | 0.84 | 2500 | 0.1390 | 0.1956 |
0.4815 | 1.01 | 3000 | 0.1266 | 0.1813 |
0.6982 | 1.17 | 3500 | 0.1441 | 0.1965 |
0.4522 | 1.34 | 4000 | 0.1232 | 0.1822 |
0.4655 | 1.51 | 4500 | 0.1209 | 0.1702 |
0.4069 | 1.68 | 5000 | 0.1149 | 0.1688 |
0.4226 | 1.84 | 5500 | 0.1121 | 0.1560 |
0.3993 | 2.01 | 6000 | 0.1091 | 0.1557 |
0.406 | 2.18 | 6500 | 0.1115 | 0.1553 |
0.4098 | 2.35 | 7000 | 0.1144 | 0.1560 |
0.3995 | 2.51 | 7500 | 0.1028 | 0.1476 |
0.4101 | 2.68 | 8000 | 0.1129 | 0.1511 |
0.3636 | 2.85 | 8500 | 0.1025 | 0.1517 |
0.3534 | 3.02 | 9000 | 0.1068 | 0.1480 |
0.3836 | 3.18 | 9500 | 0.1072 | 0.1459 |
0.3531 | 3.35 | 10000 | 0.0928 | 0.1367 |
0.3649 | 3.52 | 10500 | 0.1042 | 0.1426 |
0.3645 | 3.69 | 11000 | 0.0979 | 0.1433 |
0.3685 | 3.85 | 11500 | 0.0947 | 0.1346 |
0.3325 | 4.02 | 12000 | 0.0991 | 0.1352 |
0.3497 | 4.19 | 12500 | 0.0919 | 0.1358 |
0.3303 | 4.36 | 13000 | 0.0888 | 0.1272 |
0.3323 | 4.52 | 13500 | 0.0888 | 0.1277 |
0.3452 | 4.69 | 14000 | 0.0894 | 0.1279 |
0.337 | 4.86 | 14500 | 0.0917 | 0.1289 |
0.3114 | 5.03 | 15000 | 0.0942 | 0.1313 |
0.3099 | 5.19 | 15500 | 0.0902 | 0.1239 |
0.3079 | 5.36 | 16000 | 0.0871 | 0.1256 |
0.3293 | 5.53 | 16500 | 0.0861 | 0.1263 |
0.3123 | 5.7 | 17000 | 0.0876 | 0.1203 |
0.3093 | 5.86 | 17500 | 0.0848 | 0.1226 |
0.2903 | 6.03 | 18000 | 0.0914 | 0.1221 |
0.297 | 6.2 | 18500 | 0.0841 | 0.1185 |
0.2797 | 6.37 | 19000 | 0.0858 | 0.1165 |
0.2878 | 6.53 | 19500 | 0.0874 | 0.1161 |
0.2974 | 6.7 | 20000 | 0.0835 | 0.1173 |
0.3051 | 6.87 | 20500 | 0.0835 | 0.1178 |
0.2941 | 7.04 | 21000 | 0.0852 | 0.1155 |
0.258 | 7.21 | 21500 | 0.0832 | 0.1132 |
0.2778 | 7.37 | 22000 | 0.0829 | 0.1110 |
0.2751 | 7.54 | 22500 | 0.0822 | 0.1069 |
0.2887 | 7.71 | 23000 | 0.0819 | 0.1103 |
0.2509 | 7.88 | 23500 | 0.0787 | 0.1055 |
0.2501 | 8.04 | 24000 | 0.0807 | 0.1076 |
0.2399 | 8.21 | 24500 | 0.0784 | 0.1052 |
0.2539 | 8.38 | 25000 | 0.0772 | 0.1075 |
0.248 | 8.55 | 25500 | 0.0772 | 0.1055 |
0.2689 | 8.71 | 26000 | 0.0763 | 0.1027 |
0.2855 | 8.88 | 26500 | 0.0756 | 0.1035 |
0.2421 | 9.05 | 27000 | 0.0771 | 0.0998 |
0.2497 | 9.22 | 27500 | 0.0756 | 0.0971 |
0.2367 | 9.38 | 28000 | 0.0741 | 0.0974 |
0.2473 | 9.55 | 28500 | 0.0739 | 0.0982 |
0.2396 | 9.72 | 29000 | 0.0756 | 0.0991 |
0.2602 | 9.89 | 29500 | 0.0737 | 0.0975 |
框架版本
- Transformers 4.17.0.dev0
- Pytorch 1.10.2 + cu102
- Datasets 1.18.3
- Tokenizers 0.11.0
评估结果
评估使用了 Common Voice 7.0 芬兰语测试集、Common Voice 9.0 芬兰语测试集 以及 FLEURS ASR 芬兰语测试集。
此模型的训练数据包含 Common Voice 7.0 的训练集,但我们较新的 Finnish - NLP/wav2vec2 - base - fi - voxpopuli - v2 - finetuned
和 Finnish - NLP/wav2vec2 - large - uralic - voxpopuli - v2 - finnish
模型包含 Common Voice 9.0 的数据,因此我们对两个版本的 Common Voice 都进行了测试。注意:Common Voice 似乎没有完全固定测试集,因此 Common Voice 9.0 的一些训练示例可能出现在 Common Voice 7.0 的测试集中,反之亦然。因此,在使用不同版本 Common Voice 训练的模型之间,Common Voice 测试结果的比较并不完全准确,但这种比较仍然有一定的意义。
Common Voice 7.0 测试
要评估此模型,请运行本仓库中的 eval.py
脚本:
python3 eval.py --model_id Finnish-NLP/wav2vec2-xlsr-1b-finnish-lm-v2 --dataset mozilla-foundation/common_voice_7_0 --config fi --split test
此模型(表格中的第五行)与我们的其他模型及其参数数量相比,取得了以下字错误率(WER)和字符错误率(CER)结果:
模型 | 模型参数 | 带语言模型的 WER | 不带语言模型的 WER | 带语言模型的 CER | 不带语言模型的 CER |
---|---|---|---|---|---|
Finnish - NLP/wav2vec2 - base - fi - voxpopuli - v2 - finetuned | 9500 万 | 5.85 | 13.52 | 1.35 | 2.44 |
Finnish - NLP/wav2vec2 - large - uralic - voxpopuli - v2 - finnish | 3 亿 | 4.13 | 9.66 | 0.90 | 1.66 |
Finnish - NLP/wav2vec2 - xlsr - 300m - finnish - lm | 3 亿 | 8.16 | 17.92 | 1.97 | 3.36 |
Finnish - NLP/wav2vec2 - xlsr - 1b - finnish - lm | 10 亿 | 5.65 | 13.11 | 1.20 | 2.23 |
Finnish - NLP/wav2vec2 - xlsr - 1b - finnish - lm - v2 | 10 亿 | 4.09 | 9.73 | 0.88 | 1.65 |
Common Voice 9.0 测试
要评估此模型,请运行本仓库中的 eval.py
脚本:
python3 eval.py --model_id Finnish-NLP/wav2vec2-xlsr-1b-finnish-lm-v2 --dataset mozilla-foundation/common_voice_9_0 --config fi --split test
此模型(表格中的第五行)与我们的其他模型及其参数数量相比,取得了以下字错误率(WER)和字符错误率(CER)结果:
模型 | 模型参数 | 带语言模型的 WER | 不带语言模型的 WER | 带语言模型的 CER | 不带语言模型的 CER |
---|---|---|---|---|---|
Finnish - NLP/wav2vec2 - base - fi - voxpopuli - v2 - finetuned | 9500 万 | 5.93 | 14.08 | 1.40 | 2.59 |
Finnish - NLP/wav2vec2 - large - uralic - voxpopuli - v2 - finnish | 3 亿 | 4.13 | 9.83 | 0.92 | 1.71 |
Finnish - NLP/wav2vec2 - xlsr - 300m - finnish - lm | 3 亿 | 7.42 | 16.45 | 1.79 | 3.07 |
Finnish - NLP/wav2vec2 - xlsr - 1b - finnish - lm | 10 亿 | 5.35 | 13.00 | 1.14 | 2.20 |
Finnish - NLP/wav2vec2 - xlsr - 1b - finnish - lm - v2 | 10 亿 | 3.72 | 8.96 | 0.80 | 1.52 |
FLEURS ASR 测试
要评估此模型,请运行本仓库中的 eval.py
脚本:
python3 eval.py --model_id Finnish-NLP/wav2vec2-xlsr-1b-finnish-lm-v2 --dataset google/fleurs --config fi_fi --split test
此模型(表格中的第五行)与我们的其他模型及其参数数量相比,取得了以下字错误率(WER)和字符错误率(CER)结果:
模型 | 模型参数 | 带语言模型的 WER | 不带语言模型的 WER | 带语言模型的 CER | 不带语言模型的 CER |
---|---|---|---|---|---|
Finnish - NLP/wav2vec2 - base - fi - voxpopuli - v2 - finetuned | 9500 万 | 13.99 | 17.16 | 6.07 | 6.61 |
Finnish - NLP/wav2vec2 - large - uralic - voxpopuli - v2 - finnish | 3 亿 | 12.44 | 14.63 | 5.77 | 6.22 |
Finnish - NLP/wav2vec2 - xlsr - 300m - finnish - lm | 3 亿 | 17.72 | 23.30 | 6.78 | 7.67 |
Finnish - NLP/wav2vec2 - xlsr - 1b - finnish - lm | 10 亿 | 20.34 | 16.67 | 6.97 | 6.35 |
Finnish - NLP/wav2vec2 - xlsr - 1b - finnish - lm - v2 | 10 亿 | 12.11 | 14.89 | 5.65 | 6.06 |
团队成员
- Aapo Tanskanen,Hugging Face 个人资料,领英个人资料
- Rasmus Toivanen,Hugging Face 个人资料,领英个人资料
如有更多细节需求,请随时联系我们 🤗
📄 许可证
本项目采用 Apache 2.0 许可证。



