语言: 泰语
数据集:
- 共同语音
标签:
- 音频
- 自动语音识别
- hf-asr排行榜
- 鲁棒语音事件
- 语音
- xlsr微调
许可证: cc-by-sa-4.0
模型索引:
- 名称: XLS-R-53 - 泰语
结果:
- 任务:
名称: 自动语音识别
类型: automatic-speech-recognition
数据集:
名称: 共同语音7
类型: mozilla-foundation/common_voice_7_0
参数: th
指标:
- 名称: 测试WER
类型: wer
值: 0.9524
- 名称: 测试SER
类型: ser
值: 1.2346
- 名称: 测试CER
类型: cer
值: 0.1623
- 任务:
名称: 自动语音识别
类型: automatic-speech-recognition
数据集:
名称: 鲁棒语音事件 - 开发数据
类型: speech-recognition-community-v2/dev_data
参数: sv
指标:
- 名称: 测试WER
类型: wer
值: null
- 名称: 测试SER
类型: ser
值: null
- 名称: 测试CER
类型: cer
值: null
wav2vec2-large-xlsr-53-th
在泰语共同语音7.0上微调wav2vec2-large-xlsr-53
在我们的博客上阅读更多
我们基于Fine-tuning Wav2Vec2 for English ASR使用共同语音语料库7.0的泰语示例微调了wav2vec2-large-xlsr-53。笔记本和脚本可以在vistec-ai/wav2vec2-large-xlsr-53-th找到。预训练模型和处理器可以在airesearch/wav2vec2-large-xlsr-53-th找到。
robust-speech-event
在eval.py
中添加syllable_tokenize
、word_tokenize
(PyThaiNLP)和deepcut分词器,来自robust-speech-event
> python eval.py --model_id ./ --dataset mozilla-foundation/common_voice_7_0 --config th --split test --log_outputs --thai_tokenizer newmm/syllable/deepcut/cer
共同语音7“test”上的评估结果:
|
WER PyThaiNLP 2.3.1 |
WER deepcut |
SER |
CER |
仅分词 |
0.9524% |
2.5316% |
1.2346% |
0.1623% |
清洗规则和分词 |
TBD |
TBD |
TBD |
TBD |
使用
#加载预训练处理器和模型
processor = Wav2Vec2Processor.from_pretrained("airesearch/wav2vec2-large-xlsr-53-th")
model = Wav2Vec2ForCTC.from_pretrained("airesearch/wav2vec2-large-xlsr-53-th")
#重采样至16_000的函数
def speech_file_to_array_fn(batch,
text_col="sentence",
fname_col="path",
resampling_to=16000):
speech_array, sampling_rate = torchaudio.load(batch[fname_col])
resampler=torchaudio.transforms.Resample(sampling_rate, resampling_to)
batch["speech"] = resampler(speech_array)[0].numpy()
batch["sampling_rate"] = resampling_to
batch["target_text"] = batch[text_col]
return batch
#获取2个示例作为样本输入
test_dataset = test_dataset.map(speech_file_to_array_fn)
inputs = processor(test_dataset["speech"][:2], sampling_rate=16_000, return_tensors="pt", padding=True)
#推理
with torch.no_grad():
logits = model(inputs.input_values,).logits
predicted_ids = torch.argmax(logits, dim=-1)
print("预测:", processor.batch_decode(predicted_ids))
print("参考:", test_dataset["sentence"][:2])
>> 预测: ['และ เขา ก็ สัมผัส ดีบุก', 'คุณ สามารถ รับทราบ เมื่อ ข้อความ นี้ ถูก อ่าน แล้ว']
>> 参考: ['และเขาก็สัมผัสดีบุก', 'คุณสามารถรับทราบเมื่อข้อความนี้ถูกอ่านแล้ว']
数据集
共同语音语料库7.0包含133验证小时的泰语(总计255小时)数据,大小为5GB。我们使用pythainlp.tokenize.word_tokenize
进行预分词。我们使用@tann9949在notebooks/cv-preprocess.ipynb
中描述的清洗规则预处理数据集。然后我们按照ekapolc/Thai_commonvoice_split中的描述进行去重和分割,以1)避免共同语音语料库7.0中清洗后随机分割导致的数据泄露,2)保留大部分数据用于训练集。数据集加载脚本为scripts/th_common_voice_70.py
。您可以将此脚本与train_cleand.tsv
、validation_cleaned.tsv
和test_cleaned.tsv
一起使用,以获得与我们相同的分割。最终数据集如下:
DatasetDict({
train: Dataset({
features: ['path', 'sentence'],
num_rows: 86586
})
test: Dataset({
features: ['path', 'sentence'],
num_rows: 2502
})
validation: Dataset({
features: ['path', 'sentence'],
num_rows: 3027
})
})
训练
我们在单个V100 GPU上使用以下配置进行微调,并选择验证损失最低的检查点。微调脚本为scripts/wav2vec2_finetune.py
# 创建模型
model = Wav2Vec2ForCTC.from_pretrained(
"facebook/wav2vec2-large-xlsr-53",
attention_dropout=0.1,
hidden_dropout=0.1,
feat_proj_dropout=0.0,
mask_time_prob=0.05,
layerdrop=0.1,
gradient_checkpointing=True,
ctc_loss_reduction="mean",
pad_token_id=processor.tokenizer.pad_token_id,
vocab_size=len(processor.tokenizer)
model.freeze_feature_extractor()
training_args = TrainingArguments(
output_dir="../data/wav2vec2-large-xlsr-53-thai",
group_by_length=True,
per_device_train_batch_size=32,
gradient_accumulation_steps=1,
per_device_eval_batch_size=16,
metric_for_best_model='wer',
evaluation_strategy="steps",
eval_steps=1000,
logging_strategy="steps",
logging_steps=1000,
save_strategy="steps",
save_steps=1000,
num_train_epochs=100,
fp16=True,
learning_rate=1e-4,
warmup_steps=1000,
save_total_limit=3,
report_to="tensorboard")
评估
我们使用PyThaiNLP 2.3.1和deepcut分词的WER以及CER在测试集上进行基准测试。我们还测量了使用TNC ngrams进行拼写校正时的性能。评估代码可以在notebooks/wav2vec2_finetuning_tutorial.ipynb
中找到。基准测试在test-unique
分割上进行。
|
WER PyThaiNLP 2.3.1 |
WER deepcut |
CER |
从头开始的Kaldi |
23.04 |
|
7.57 |
无拼写校正的我们 |
13.634024 |
8.152052 |
2.813019 |
有拼写校正的我们 |
17.996397 |
14.167975 |
5.225761 |
Google Web Speech API※ |
13.711234 |
10.860058 |
7.357340 |
Microsoft Bing Speech API※ |
12.578819 |
9.620991 |
5.016620 |
Amazon Transcribe※ |
21.86334 |
14.487553 |
7.077562 |
NECTEC AI for Thai Partii API※ |
20.105887 |
15.515631 |
9.551027 |
※ API未使用共同语音7.0数据进行微调
许可证
cc-by-sa 4.0
致谢