Files
Wav2Vec2-Ru-Child/README.md

131 lines
4.2 KiB
Markdown
Raw Normal View History

---
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).