初始化项目,由ModelHub XC社区提供模型
Model: SiangLao/xlsr-53-lao-asr Source: Original Platform
This commit is contained in:
35
.gitattributes
vendored
Normal file
35
.gitattributes
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.arrow filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bin filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ftz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.h5 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.joblib filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.model filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.npy filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.npz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.onnx filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ot filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.parquet filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pb filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pickle filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pkl filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pt filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pth filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.rar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
||||||
|
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tflite filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.wasm filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zst filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
||||||
80
README.md
Normal file
80
README.md
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
---
|
||||||
|
language: lo
|
||||||
|
license: apache-2.0
|
||||||
|
tags:
|
||||||
|
- automatic-speech-recognition
|
||||||
|
- speech
|
||||||
|
- audio
|
||||||
|
- lao
|
||||||
|
- wav2vec2
|
||||||
|
- xlsr
|
||||||
|
datasets:
|
||||||
|
- SiangLao/lao-asr-thesis-dataset
|
||||||
|
metrics:
|
||||||
|
- cer
|
||||||
|
base_model:
|
||||||
|
- facebook/wav2vec2-large-xlsr-53
|
||||||
|
library_name: transformers
|
||||||
|
---
|
||||||
|
|
||||||
|
# XLSR-53 Lao ASR
|
||||||
|
|
||||||
|
Fine-tuned XLSR-53 model for Lao automatic speech recognition, achieving 16.22% CER on test data.
|
||||||
|
|
||||||
|
## Model Details
|
||||||
|
|
||||||
|
This model is fine-tuned from [facebook/wav2vec2-large-xlsr-53](https://huggingface.co/facebook/wav2vec2-large-xlsr-53) using the SiangLao/lao-asr-thesis-dataset.
|
||||||
|
|
||||||
|
### Training Configuration
|
||||||
|
- **Epochs**: 15
|
||||||
|
- **Batch Size**: 16
|
||||||
|
- **Learning Rate**: 1e-4
|
||||||
|
- **Training Date**: June 3, 2025
|
||||||
|
- **Vocabulary Size**: 55 Lao characters + special tokens
|
||||||
|
|
||||||
|
### Performance
|
||||||
|
|
||||||
|
| Split | CER | Loss |
|
||||||
|
|-------|-----|------|
|
||||||
|
| Test | 16.22% | 0.419 |
|
||||||
|
| Validation | 16.52% | 0.487 |
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```python
|
||||||
|
from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
|
||||||
|
import torch
|
||||||
|
import librosa
|
||||||
|
|
||||||
|
# Load model and processor
|
||||||
|
model = Wav2Vec2ForCTC.from_pretrained("SiangLao/xlsr-53-lao-asr")
|
||||||
|
processor = Wav2Vec2Processor.from_pretrained("SiangLao/xlsr-53-lao-asr")
|
||||||
|
|
||||||
|
# Load audio (must be 16kHz)
|
||||||
|
audio, sr = librosa.load("audio.wav", sr=16000)
|
||||||
|
|
||||||
|
# Process audio
|
||||||
|
inputs = processor(audio, sampling_rate=16000, return_tensors="pt")
|
||||||
|
|
||||||
|
# Generate prediction
|
||||||
|
with torch.no_grad():
|
||||||
|
logits = model(**inputs).logits
|
||||||
|
predicted_ids = torch.argmax(logits, dim=-1)
|
||||||
|
transcription = processor.batch_decode(predicted_ids)[0]
|
||||||
|
|
||||||
|
# Clean transcription
|
||||||
|
transcription = transcription.replace("<unk>", " ").strip()
|
||||||
|
|
||||||
|
print(transcription)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Citation
|
||||||
|
```bibtex
|
||||||
|
@thesis{naovalath2025lao,
|
||||||
|
title={Lao Automatic Speech Recognition using Transfer Learning},
|
||||||
|
author={Souphaxay Naovalath and Sounmy Chanthavong},
|
||||||
|
advisor={Dr. Somsack Inthasone},
|
||||||
|
school={National University of Laos, Faculty of Natural Sciences, Computer Science Department},
|
||||||
|
year={2025}
|
||||||
|
}
|
||||||
|
```
|
||||||
4
added_tokens.json
Normal file
4
added_tokens.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"</s>": 56,
|
||||||
|
"<s>": 55
|
||||||
|
}
|
||||||
116
config.json
Normal file
116
config.json
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
{
|
||||||
|
"activation_dropout": 0.0,
|
||||||
|
"adapter_attn_dim": null,
|
||||||
|
"adapter_kernel_size": 3,
|
||||||
|
"adapter_stride": 2,
|
||||||
|
"add_adapter": false,
|
||||||
|
"apply_spec_augment": true,
|
||||||
|
"architectures": [
|
||||||
|
"Wav2Vec2ForCTC"
|
||||||
|
],
|
||||||
|
"attention_dropout": 0.1,
|
||||||
|
"bos_token_id": 1,
|
||||||
|
"classifier_proj_size": 256,
|
||||||
|
"codevector_dim": 768,
|
||||||
|
"contrastive_logits_temperature": 0.1,
|
||||||
|
"conv_bias": true,
|
||||||
|
"conv_dim": [
|
||||||
|
512,
|
||||||
|
512,
|
||||||
|
512,
|
||||||
|
512,
|
||||||
|
512,
|
||||||
|
512,
|
||||||
|
512
|
||||||
|
],
|
||||||
|
"conv_kernel": [
|
||||||
|
10,
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
2,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"conv_stride": [
|
||||||
|
5,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"ctc_loss_reduction": "mean",
|
||||||
|
"ctc_zero_infinity": false,
|
||||||
|
"diversity_loss_weight": 0.1,
|
||||||
|
"do_stable_layer_norm": true,
|
||||||
|
"eos_token_id": 2,
|
||||||
|
"feat_extract_activation": "gelu",
|
||||||
|
"feat_extract_dropout": 0.0,
|
||||||
|
"feat_extract_norm": "layer",
|
||||||
|
"feat_proj_dropout": 0.1,
|
||||||
|
"feat_quantizer_dropout": 0.0,
|
||||||
|
"final_dropout": 0.0,
|
||||||
|
"gradient_checkpointing": false,
|
||||||
|
"hidden_act": "gelu",
|
||||||
|
"hidden_dropout": 0.1,
|
||||||
|
"hidden_size": 1024,
|
||||||
|
"initializer_range": 0.02,
|
||||||
|
"intermediate_size": 4096,
|
||||||
|
"layer_norm_eps": 1e-05,
|
||||||
|
"layerdrop": 0.1,
|
||||||
|
"mask_channel_length": 10,
|
||||||
|
"mask_channel_min_space": 1,
|
||||||
|
"mask_channel_other": 0.0,
|
||||||
|
"mask_channel_prob": 0.0,
|
||||||
|
"mask_channel_selection": "static",
|
||||||
|
"mask_feature_length": 10,
|
||||||
|
"mask_feature_min_masks": 0,
|
||||||
|
"mask_feature_prob": 0.0,
|
||||||
|
"mask_time_length": 10,
|
||||||
|
"mask_time_min_masks": 2,
|
||||||
|
"mask_time_min_space": 1,
|
||||||
|
"mask_time_other": 0.0,
|
||||||
|
"mask_time_prob": 0.075,
|
||||||
|
"mask_time_selection": "static",
|
||||||
|
"model_type": "wav2vec2",
|
||||||
|
"num_adapter_layers": 3,
|
||||||
|
"num_attention_heads": 16,
|
||||||
|
"num_codevector_groups": 2,
|
||||||
|
"num_codevectors_per_group": 320,
|
||||||
|
"num_conv_pos_embedding_groups": 16,
|
||||||
|
"num_conv_pos_embeddings": 128,
|
||||||
|
"num_feat_extract_layers": 7,
|
||||||
|
"num_hidden_layers": 24,
|
||||||
|
"num_negatives": 100,
|
||||||
|
"output_hidden_size": 1024,
|
||||||
|
"pad_token_id": 0,
|
||||||
|
"proj_codevector_dim": 768,
|
||||||
|
"tdnn_dilation": [
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3,
|
||||||
|
1,
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"tdnn_dim": [
|
||||||
|
512,
|
||||||
|
512,
|
||||||
|
512,
|
||||||
|
512,
|
||||||
|
1500
|
||||||
|
],
|
||||||
|
"tdnn_kernel": [
|
||||||
|
5,
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
1,
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"torch_dtype": "float32",
|
||||||
|
"transformers_version": "4.52.4",
|
||||||
|
"use_weighted_layer_sum": false,
|
||||||
|
"vocab_size": 57,
|
||||||
|
"xvector_output_dim": 512
|
||||||
|
}
|
||||||
3
model.safetensors
Normal file
3
model.safetensors
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:b0e780c6fa0a9d4409d479f379a3d5829a3f32949973c2365234bd6e04909834
|
||||||
|
size 1262041180
|
||||||
10
preprocessor_config.json
Normal file
10
preprocessor_config.json
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"do_normalize": true,
|
||||||
|
"feature_extractor_type": "Wav2Vec2FeatureExtractor",
|
||||||
|
"feature_size": 1,
|
||||||
|
"padding_side": "right",
|
||||||
|
"padding_value": 0,
|
||||||
|
"processor_class": "Wav2Vec2Processor",
|
||||||
|
"return_attention_mask": true,
|
||||||
|
"sampling_rate": 16000
|
||||||
|
}
|
||||||
6
special_tokens_map.json
Normal file
6
special_tokens_map.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"bos_token": "<s>",
|
||||||
|
"eos_token": "</s>",
|
||||||
|
"pad_token": "<pad>",
|
||||||
|
"unk_token": "<unk>"
|
||||||
|
}
|
||||||
49
tokenizer_config.json
Normal file
49
tokenizer_config.json
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
"added_tokens_decoder": {
|
||||||
|
"0": {
|
||||||
|
"content": "<pad>",
|
||||||
|
"lstrip": true,
|
||||||
|
"normalized": false,
|
||||||
|
"rstrip": true,
|
||||||
|
"single_word": false,
|
||||||
|
"special": false
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"content": "<unk>",
|
||||||
|
"lstrip": true,
|
||||||
|
"normalized": false,
|
||||||
|
"rstrip": true,
|
||||||
|
"single_word": false,
|
||||||
|
"special": false
|
||||||
|
},
|
||||||
|
"55": {
|
||||||
|
"content": "<s>",
|
||||||
|
"lstrip": false,
|
||||||
|
"normalized": false,
|
||||||
|
"rstrip": false,
|
||||||
|
"single_word": false,
|
||||||
|
"special": true
|
||||||
|
},
|
||||||
|
"56": {
|
||||||
|
"content": "</s>",
|
||||||
|
"lstrip": false,
|
||||||
|
"normalized": false,
|
||||||
|
"rstrip": false,
|
||||||
|
"single_word": false,
|
||||||
|
"special": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bos_token": "<s>",
|
||||||
|
"clean_up_tokenization_spaces": false,
|
||||||
|
"do_lower_case": false,
|
||||||
|
"eos_token": "</s>",
|
||||||
|
"extra_special_tokens": {},
|
||||||
|
"model_max_length": 1000000000000000019884624838656,
|
||||||
|
"pad_token": "<pad>",
|
||||||
|
"processor_class": "Wav2Vec2Processor",
|
||||||
|
"replace_word_delimiter_char": " ",
|
||||||
|
"target_lang": null,
|
||||||
|
"tokenizer_class": "Wav2Vec2CTCTokenizer",
|
||||||
|
"unk_token": "<unk>",
|
||||||
|
"word_delimiter_token": "|"
|
||||||
|
}
|
||||||
57
training_results.json
Normal file
57
training_results.json
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
"experiment_info": {
|
||||||
|
"model_name": "facebook/wav2vec2-large-xlsr-53",
|
||||||
|
"model_description": "XLSR-53",
|
||||||
|
"dataset_name": "h3llohihi/lao-asr-thesis-dataset",
|
||||||
|
"training_date": "2025-06-03 19:11:56",
|
||||||
|
"vocab_size": 55,
|
||||||
|
"primary_metric": "cer"
|
||||||
|
},
|
||||||
|
"training_config": {
|
||||||
|
"dataset_name": "h3llohihi/lao-asr-thesis-dataset",
|
||||||
|
"gradient_accumulation": 1,
|
||||||
|
"weight_decay": 0.01,
|
||||||
|
"warmup_steps": 400,
|
||||||
|
"num_epochs": 15,
|
||||||
|
"max_steps": -1,
|
||||||
|
"eval_steps": 250,
|
||||||
|
"save_steps": 500,
|
||||||
|
"logging_steps": 50,
|
||||||
|
"early_stopping_patience": 6,
|
||||||
|
"dataloader_workers": 8,
|
||||||
|
"use_fp16": false,
|
||||||
|
"gradient_checkpointing": true,
|
||||||
|
"label_smoothing": 0.0,
|
||||||
|
"primary_metric": "cer",
|
||||||
|
"secondary_metric": "wer",
|
||||||
|
"logs_dir": "./logs",
|
||||||
|
"model_name": "facebook/wav2vec2-large-xlsr-53",
|
||||||
|
"description": "XLSR-53",
|
||||||
|
"output_dir": "./lao-asr-xlsr-53",
|
||||||
|
"batch_size": 16,
|
||||||
|
"learning_rate": 0.0001
|
||||||
|
},
|
||||||
|
"results": {
|
||||||
|
"validation": {
|
||||||
|
"cer": 0.16520911038806443,
|
||||||
|
"wer": 1.0,
|
||||||
|
"loss": 0.48708805441856384
|
||||||
|
},
|
||||||
|
"test": {
|
||||||
|
"cer": 0.16219106723220977,
|
||||||
|
"wer": 0.9958333333333333,
|
||||||
|
"loss": 0.41934534907341003
|
||||||
|
},
|
||||||
|
"dev": {
|
||||||
|
"cer": 0.10665818490245971,
|
||||||
|
"wer": 0.975,
|
||||||
|
"loss": 0.1934221088886261
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"training_metrics": {
|
||||||
|
"final_loss": 1.7461039689566584,
|
||||||
|
"training_time": 12829.0071,
|
||||||
|
"samples_per_second": 4.499,
|
||||||
|
"total_steps": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
57
vocab.json
Normal file
57
vocab.json
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
" ": 2,
|
||||||
|
"<pad>": 0,
|
||||||
|
"<unk>": 1,
|
||||||
|
"ກ": 3,
|
||||||
|
"ຂ": 4,
|
||||||
|
"ຄ": 5,
|
||||||
|
"ງ": 6,
|
||||||
|
"ຈ": 7,
|
||||||
|
"ຊ": 8,
|
||||||
|
"ຍ": 9,
|
||||||
|
"ດ": 10,
|
||||||
|
"ຕ": 11,
|
||||||
|
"ຖ": 12,
|
||||||
|
"ທ": 13,
|
||||||
|
"ນ": 14,
|
||||||
|
"ບ": 15,
|
||||||
|
"ປ": 16,
|
||||||
|
"ຜ": 17,
|
||||||
|
"ຝ": 18,
|
||||||
|
"ພ": 19,
|
||||||
|
"ຟ": 20,
|
||||||
|
"ມ": 21,
|
||||||
|
"ຢ": 22,
|
||||||
|
"ຣ": 23,
|
||||||
|
"ລ": 24,
|
||||||
|
"ວ": 25,
|
||||||
|
"ສ": 26,
|
||||||
|
"ຫ": 27,
|
||||||
|
"ອ": 28,
|
||||||
|
"ຮ": 29,
|
||||||
|
"ະ": 30,
|
||||||
|
"ັ": 31,
|
||||||
|
"າ": 32,
|
||||||
|
"ຳ": 33,
|
||||||
|
"ິ": 34,
|
||||||
|
"ີ": 35,
|
||||||
|
"ຶ": 36,
|
||||||
|
"ື": 37,
|
||||||
|
"ຸ": 38,
|
||||||
|
"ູ": 39,
|
||||||
|
"ົ": 40,
|
||||||
|
"ຼ": 41,
|
||||||
|
"ຽ": 42,
|
||||||
|
"ເ": 43,
|
||||||
|
"ແ": 44,
|
||||||
|
"ໂ": 45,
|
||||||
|
"ໃ": 46,
|
||||||
|
"ໄ": 47,
|
||||||
|
"ໆ": 48,
|
||||||
|
"່": 49,
|
||||||
|
"້": 50,
|
||||||
|
"໋": 51,
|
||||||
|
"ໍ": 52,
|
||||||
|
"ໜ": 53,
|
||||||
|
"ໝ": 54
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user