初始化项目,由ModelHub XC社区提供模型
Model: dysata/Wav2Vec2-Ru-Child 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
|
||||||
130
README.md
Normal file
130
README.md
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
---
|
||||||
|
language:
|
||||||
|
- ru
|
||||||
|
license: mit
|
||||||
|
library_name: transformers
|
||||||
|
pipeline_tag: automatic-speech-recognition
|
||||||
|
tags:
|
||||||
|
- wav2vec2
|
||||||
|
- speech
|
||||||
|
- russian
|
||||||
|
- children
|
||||||
|
- ctc
|
||||||
|
- forced-alignment
|
||||||
|
- pronunciation
|
||||||
|
- phonetics
|
||||||
|
datasets:
|
||||||
|
- dysata/rwords
|
||||||
|
model-index:
|
||||||
|
- name: Wav2Vec2-Ru-Child
|
||||||
|
results: []
|
||||||
|
---
|
||||||
|
|
||||||
|
# Wav2Vec2-Ru-Child
|
||||||
|
|
||||||
|
Модель автоматического распознавания речи (ASR) для русского языка, дообученная на записях детского чтения.
|
||||||
|
|
||||||
|
## Model Details
|
||||||
|
|
||||||
|
### Architecture
|
||||||
|
|
||||||
|
- **Base model:** wav2vec2-large
|
||||||
|
- **Architecture:** `Wav2Vec2ForCTC`
|
||||||
|
- **Hidden size:** 1024
|
||||||
|
- **Layers:** 24 transformer layers
|
||||||
|
- **Attention heads:** 16
|
||||||
|
- **Parameters:** ~317M
|
||||||
|
- **Vocabulary:** 37 токенов (33 буквы русского алфавита + 4 служебных)
|
||||||
|
- **CTC loss:** mean reduction
|
||||||
|
|
||||||
|
### Intended Use
|
||||||
|
|
||||||
|
Модель предназначена для:
|
||||||
|
- Распознавания русской детской речи
|
||||||
|
- Forced alignment (выравнивание текста по аудио на уровне букв)
|
||||||
|
- Анализа произношения — выявление ошибок в детском чтении
|
||||||
|
- Классификации качества произношения отдельных звуков (например, звука "Р")
|
||||||
|
|
||||||
|
## How to Use
|
||||||
|
|
||||||
|
### Speech Recognition
|
||||||
|
|
||||||
|
```python
|
||||||
|
import torch
|
||||||
|
import librosa
|
||||||
|
from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC
|
||||||
|
|
||||||
|
processor = Wav2Vec2Processor.from_pretrained("dysata/Wav2Vec2-Ru-Child")
|
||||||
|
model = Wav2Vec2ForCTC.from_pretrained("dysata/Wav2Vec2-Ru-Child")
|
||||||
|
|
||||||
|
audio, sr = librosa.load("audio.wav", sr=16000)
|
||||||
|
|
||||||
|
processed = processor([audio], sampling_rate=16000,
|
||||||
|
return_tensors="pt", padding="longest")
|
||||||
|
|
||||||
|
with torch.no_grad():
|
||||||
|
logits = model(processed.input_values,
|
||||||
|
attention_mask=processed.attention_mask).logits
|
||||||
|
|
||||||
|
predicted_ids = torch.argmax(logits, dim=-1)
|
||||||
|
transcription = processor.decode(predicted_ids[0])
|
||||||
|
print(transcription)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Forced Alignment
|
||||||
|
|
||||||
|
Модель может использоваться для побуквенного выравнивания эталонного текста по аудио через CTC forced alignment (trellis + backtrack + merge_repeats). Это позволяет определить временные границы каждой буквы в записи.
|
||||||
|
|
||||||
|
### Hidden States для классификации
|
||||||
|
|
||||||
|
```python
|
||||||
|
with torch.no_grad():
|
||||||
|
outputs = model(processed.input_values,
|
||||||
|
attention_mask=processed.attention_mask,
|
||||||
|
output_hidden_states=True, return_dict=True)
|
||||||
|
last_hidden_state = outputs.hidden_states[-1] # [batch, frames, 1024]
|
||||||
|
```
|
||||||
|
|
||||||
|
Вектора последнего скрытого слоя (1024-мерные) могут быть использованы как признаки для классификации качества произношения отдельных звуков.
|
||||||
|
|
||||||
|
## Training
|
||||||
|
|
||||||
|
Модель дообучена на записях детского чтения на русском языке. Аудиозаписи преобразованы в формат WAV 16 кГц и вручную оттранскрибированы.
|
||||||
|
|
||||||
|
## Technical Specifications
|
||||||
|
|
||||||
|
| Parameter | Value |
|
||||||
|
|---|---|
|
||||||
|
| Sample rate | 16 kHz |
|
||||||
|
| Feature extractor | 7-layer CNN |
|
||||||
|
| Transformer layers | 24 |
|
||||||
|
| Hidden size | 1024 |
|
||||||
|
| Vocab size | 37 |
|
||||||
|
| Precision | float32 |
|
||||||
|
| Format | Safetensors |
|
||||||
|
|
||||||
|
## Vocabulary
|
||||||
|
|
||||||
|
Алфавит модели: `<pad>`, `<s>`, `</s>`, `<unk>`, `|` (разделитель слов), а-я (33 буквы русского алфавита).
|
||||||
|
|
||||||
|
## Limitations
|
||||||
|
|
||||||
|
- Модель обучена на детской речи и может показывать худшие результаты на взрослой речи
|
||||||
|
- Только русский язык
|
||||||
|
- Оптимальное качество на записях в формате WAV 16 кГц
|
||||||
|
|
||||||
|
## Citation
|
||||||
|
|
||||||
|
```bibtex
|
||||||
|
@misc{wav2vec2-ru-child,
|
||||||
|
author = {Павел Рудич},
|
||||||
|
title = {Wav2Vec2-Ru-Child: Russian Children's Speech Recognition Model},
|
||||||
|
year = {2025},
|
||||||
|
publisher = {Hugging Face},
|
||||||
|
url = {https://huggingface.co/dysata/Wav2Vec2-Ru-Child}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Funding
|
||||||
|
|
||||||
|
Фонд содействия инновациям (fasie).
|
||||||
4
added_tokens.json
Normal file
4
added_tokens.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"[PAD]": 38,
|
||||||
|
"[UNK]": 37
|
||||||
|
}
|
||||||
116
config.json
Normal file
116
config.json
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
{
|
||||||
|
"_name_or_path": "./model6m",
|
||||||
|
"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.0,
|
||||||
|
"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": true,
|
||||||
|
"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.0,
|
||||||
|
"feat_quantizer_dropout": 0.0,
|
||||||
|
"final_dropout": 0.0,
|
||||||
|
"hidden_act": "gelu",
|
||||||
|
"hidden_dropout": 0.0,
|
||||||
|
"hidden_size": 1024,
|
||||||
|
"initializer_range": 0.02,
|
||||||
|
"intermediate_size": 4096,
|
||||||
|
"layer_norm_eps": 1e-05,
|
||||||
|
"layerdrop": 0.0,
|
||||||
|
"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.05,
|
||||||
|
"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.49.0",
|
||||||
|
"use_weighted_layer_sum": false,
|
||||||
|
"vocab_size": 37,
|
||||||
|
"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:9f5b304a55228829a041a5aac128708c195d9c5280e6ab80ab6b7d217a6e6cba
|
||||||
|
size 1261959180
|
||||||
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.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": "<s>",
|
||||||
|
"lstrip": true,
|
||||||
|
"normalized": false,
|
||||||
|
"rstrip": true,
|
||||||
|
"single_word": false,
|
||||||
|
"special": false
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"content": "</s>",
|
||||||
|
"lstrip": true,
|
||||||
|
"normalized": false,
|
||||||
|
"rstrip": true,
|
||||||
|
"single_word": false,
|
||||||
|
"special": false
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"content": "<unk>",
|
||||||
|
"lstrip": true,
|
||||||
|
"normalized": false,
|
||||||
|
"rstrip": true,
|
||||||
|
"single_word": false,
|
||||||
|
"special": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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": "|"
|
||||||
|
}
|
||||||
39
vocab.json
Normal file
39
vocab.json
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"</s>": 2,
|
||||||
|
"<pad>": 0,
|
||||||
|
"<s>": 1,
|
||||||
|
"<unk>": 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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user