语言:
- 高棉语
许可证: Apache-2.0
标签:
- 自动语音识别
- OpenSLR
- 鲁棒语音事件
- 高棉语
- 训练生成
- HF-ASR排行榜
模型索引:
- 名称: xls-r-300m-km
结果:
- 任务:
名称: 语音识别
类型: 自动语音识别
数据集:
名称: OpenSLR km
类型: openslr
参数: km
指标:
- 名称: 测试WER
类型: wer
值: 25.7
- 名称: 测试CER
类型: cer
值: 7.03
- 任务:
名称: 自动语音识别
类型: 自动语音识别
数据集:
名称: 鲁棒语音事件 - 开发数据
类型: speech-recognition-community-v2/dev_data
参数: km
指标:
- 名称: 测试WER
类型: wer
值: 25.7
- 名称: 测试CER
类型: cer
值: 7.03
该模型是基于OpenSLR数据集对facebook/wav2vec2-xls-r-300m进行微调的版本。
在评估集上取得了以下结果:
- 损失: 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
安装
在HuggingFace Transformers基础上安装以下库以支持语言模型。
pip install pyctcdecode
pip install https://github.com/kpu/kenlm/archive/master.zip
使用方法
方法1: 使用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))
方法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小时,非常非常少。
- 尽管如此,其表现并不算太差。对于如此小的数据集来说,实际上相当有趣。您可以尝试一下。
- 其限制在于:
- 罕见字符,例如:ឬស្សី ឪឡឹក
- 语音需要清晰明确。
- 更多数据覆盖更多词汇和字符可能有助于改进该系统。
训练过程
训练超参数
训练期间使用了以下超参数:
- 学习率: 5e-05
- 训练批次大小: 8
- 评估批次大小: 8
- 随机种子: 42
- 梯度累积步数: 4
- 总训练批次大小: 32
- 优化器: Adam,参数为betas=(0.9,0.999)和epsilon=1e-08
- 学习率调度器类型: 线性
- 学习率预热步数: 1000
- 训练轮数: 100
- 混合精度训练: 原生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