🚀 xls-r-300m-km 语音识别模型
本模型是基于Transformer架构的语音识别模型,在openslr数据集上微调了facebook/wav2vec2-xls-r-300m模型,可用于高棉语的自动语音识别任务。
🚀 快速开始
本模型是 facebook/wav2vec2-xls-r-300m 在 openslr 数据集上的微调版本。它在评估集上取得了以下结果:
- 损失:0.3281
- 字错率(Wer):0.3462
OpenSLR “测试” 集(自划分 10%)评估结果(运行 ./eval.py)
- 字错率(WER):0.3216977389924633
- 字符错误率(CER):0.08653361193169537
使用语言模型在 OpenSLR “测试” 集(自划分 10%)的评估结果(运行 ./eval.py)
- 字错率(WER):0.257040856802856
- 字符错误率(CER):0.07025001801282513
✨ 主要特性
- 小数据集表现良好:尽管仅使用约4小时的录音数据进行训练,但模型性能不错。
- 支持语言模型:可结合语言模型进一步提升识别效果。
📦 安装指南
为支持语言模型,需在 HuggingFace Transformers 基础上安装以下库:
pip install pyctcdecode
pip install https://github.com/kpu/kenlm/archive/master.zip
💻 使用示例
基础用法
使用 HuggingFace 的 pipeline,可实现从原始音频输入到文本输出的端到端处理:
from transformers import pipeline
pipe = pipeline(model="vitouphy/wav2vec2-xls-r-300m-khmer")
output = pipe("sound_file.wav", chunk_length_s=10, stride_length_s=(4, 2))
高级用法
更自定义的方式来预测音素:
from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC
import librosa
import torch
processor = Wav2Vec2Processor.from_pretrained("vitouphy/wav2vec2-xls-r-300m-khmer")
model = Wav2Vec2ForCTC.from_pretrained("vitouphy/wav2vec2-xls-r-300m-khmer")
speech_array, sampling_rate = librosa.load("sound_file.wav", sr=16_000)
inputs = processor(speech_array, sampling_rate=16_000, return_tensors="pt", padding=True)
with torch.no_grad():
logits = model(inputs.input_values, attention_mask=inputs.attention_mask).logits
predicted_ids = torch.argmax(logits, axis=-1)
predicted_sentences = processor.batch_decode(predicted_ids)
print(predicted_sentences)
📚 详细文档
预期用途和限制
本模型使用的数据仅约4小时的录音:
- 数据按 80/10/10 划分,训练时长仅 3.2 小时,数据量非常小。
- 尽管如此,模型性能不错,小数据集能有此表现很有趣,你可尝试使用。
- 模型的局限性:
- 对稀有字符(如 ឬស្សី ឪឡឹក)识别效果不佳。
- 要求语音清晰、发音准确。
- 增加数据以覆盖更多词汇和字符,可能有助于提升系统性能。
训练过程
训练超参数
训练过程中使用了以下超参数:
- 学习率(learning_rate):5e-05
- 训练批次大小(train_batch_size):8
- 评估批次大小(eval_batch_size):8
- 随机种子(seed):42
- 梯度累积步数(gradient_accumulation_steps):4
- 总训练批次大小(total_train_batch_size):32
- 优化器(optimizer):Adam,β=(0.9, 0.999),ε=1e-08
- 学习率调度器类型(lr_scheduler_type):线性
- 学习率调度器热身步数(lr_scheduler_warmup_steps):1000
- 训练轮数(num_epochs):100
- 混合精度训练(mixed_precision_training):Native AMP
训练结果
训练损失 |
轮数 |
步数 |
验证损失 |
字错率(Wer) |
5.0795 |
5.47 |
400 |
4.4121 |
1.0 |
3.5658 |
10.95 |
800 |
3.5203 |
1.0 |
3.3689 |
16.43 |
1200 |
2.8984 |
0.9996 |
2.01 |
21.91 |
1600 |
1.0041 |
0.7288 |
1.6783 |
27.39 |
2000 |
0.6941 |
0.5989 |
1.527 |
32.87 |
2400 |
0.5599 |
0.5282 |
1.4278 |
38.35 |
2800 |
0.4827 |
0.4806 |
1.3458 |
43.83 |
3200 |
0.4429 |
0.4532 |
1.2893 |
49.31 |
3600 |
0.4156 |
0.4330 |
1.2441 |
54.79 |
4000 |
0.4020 |
0.4040 |
1.188 |
60.27 |
4400 |
0.3777 |
0.3866 |
1.1628 |
65.75 |
4800 |
0.3607 |
0.3858 |
1.1324 |
71.23 |
5200 |
0.3534 |
0.3604 |
1.0969 |
76.71 |
5600 |
0.3428 |
0.3624 |
1.0897 |
82.19 |
6000 |
0.3387 |
0.3567 |
1.0625 |
87.66 |
6400 |
0.3339 |
0.3499 |
1.0601 |
93.15 |
6800 |
0.3288 |
0.3446 |
1.0474 |
98.62 |
7200 |
0.3281 |
0.3462 |
框架版本
- Transformers 4.17.0.dev0
- Pytorch 1.10.2+cu102
- Datasets 1.18.2.dev0
- Tokenizers 0.11.0
📄 许可证
本项目采用 Apache-2.0 许可证。