bond005's picture
Update README.md
98eef82
|
raw
history blame
9.73 kB
---
language: ru
datasets:
- SberDevices/Golos
- common_voice
metrics:
- wer
- cer
tags:
- audio
- automatic-speech-recognition
- speech
- common_voice
- SberDevices/Golos
license: apache-2.0
model-index:
- name: XLSR Wav2Vec2 Russian with Language Model by Ivan Bondarenko
results:
- task:
name: Speech Recognition
type: automatic-speech-recognition
dataset:
name: Sberdevices Golos (crowd)
type: SberDevices/Golos
args: ru
metrics:
- name: Test WER
type: wer
value: 7.42
- name: Test CER
type: cer
value: 1.85
- task:
name: Speech Recognition
type: automatic-speech-recognition
dataset:
name: Sberdevices Golos (farfield)
type: SberDevices/Golos
args: ru
metrics:
- name: Test WER
type: wer
value: 16.08
- name: Test CER
type: cer
value: 5.27
- task:
name: Automatic Speech Recognition
type: automatic-speech-recognition
dataset:
name: Common Voice ru
type: common_voice
args: ru
metrics:
- name: Test WER
type: wer
value: 29.75
- name: Test CER
type: cer
value: 8.15
---
# Wav2Vec2-Large-Ru-Golos-With-LM
Fine-tuned [facebook/wav2vec2-large-xlsr-53](https://huggingface.co/facebook/wav2vec2-large-xlsr-53) on Russian using the [Sberdevices Golos](https://huggingface.co/datasets/SberDevices/Golos). The language model is based on [the Russian National Corpus](https://ruscorpora.ru/), and this model includes unigrams, bigrams and trigrams.
## Usage
When using this model, make sure that your speech input is sampled at 16kHz.
You can use this model by writing your own inference script:
```python
import os
import warnings
import librosa
import nltk
import numpy as np
import torch
from datasets import load_dataset
from transformers import Wav2Vec2ForCTC, Wav2Vec2ProcessorWithLM
LANG_ID = "ru"
MODEL_ID = "bond005/wav2vec2-large-ru-golos-with-lm"
SAMPLES = 20
nltk.download('punkt')
num_processes = max(1, os.cpu_count())
test_dataset = load_dataset("common_voice", LANG_ID, split=f"test[:{SAMPLES}]")
processor = Wav2Vec2ProcessorWithLM.from_pretrained(MODEL_ID)
model = Wav2Vec2ForCTC.from_pretrained(MODEL_ID)
# Preprocessing the datasets.
# We need to read the audio files as arrays
def speech_file_to_array_fn(batch):
speech_array, sampling_rate = librosa.load(batch["path"], sr=16_000)
prepared_sentence = ' '.join(list(filter(
lambda it: it.isalpha(),
nltk.wordpunct_tokenize(batch["sentence"].lower().replace('ё', 'е'))
)))
batch["speech"] = np.asarray(speech_array, dtype=np.float32)
batch["sentence"] = prepared_sentence
return batch
with warnings.catch_warnings():
warnings.simplefilter("ignore")
test_dataset = test_dataset.map(speech_file_to_array_fn, num_proc=num_processes)
inputs = processor(test_dataset["speech"], 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_sentences = processor.batch_decode(
logits=logits.numpy(),
num_processes=num_processes
).text
with warnings.catch_warnings():
warnings.simplefilter("ignore")
for i, predicted_sentence in enumerate(predicted_sentences):
print("-" * 100)
print("Reference:", test_dataset[i]["sentence"])
print("Prediction:", predicted_sentence)
```
```text
----------------------------------------------------------------------------------------------------
Reference: я беру маленький кусочек бумажки
Prediction: либерман чик сочи бумажки
----------------------------------------------------------------------------------------------------
Reference: о потерях пока не сообщается
Prediction: о потерях пока не сообщается оооо
----------------------------------------------------------------------------------------------------
Reference: ваша воля
Prediction: ваша воля
----------------------------------------------------------------------------------------------------
Reference: мы высоко ценим ее роль в этом отношении
Prediction: урс ока цене не роль в этом отношении
----------------------------------------------------------------------------------------------------
Reference: вот это вызывало у нас жуткое отторжение
Prediction: от это вызвал у нас жутко отторжения
----------------------------------------------------------------------------------------------------
Reference: он положил ей букет на книгу
Prediction: он положил букет на книгу
----------------------------------------------------------------------------------------------------
Reference: ну и положу обиделась женя
Prediction: ну я положу обиделась женя
----------------------------------------------------------------------------------------------------
Reference: благодарю представителя австралии за ее заявление
Prediction: богатырю представитель австралии зае заявления
----------------------------------------------------------------------------------------------------
Reference: для меня это не было неожиданностью
Prediction: дай мне это не было неожиданностью
----------------------------------------------------------------------------------------------------
Reference: поздняя ночь
Prediction: поздняя ночь
----------------------------------------------------------------------------------------------------
Reference: тем не менее нужно вновь вычленить некоторые элементы наших политических установок
Prediction: тем не менее нужно мыслить снег корыэлементанажихпалиотических установок
----------------------------------------------------------------------------------------------------
Reference: мы не можем позволить себе упустить эту возможность
Prediction: мы не можем под болить чи опустить эту возможность
----------------------------------------------------------------------------------------------------
Reference: в предстоящие месяцы суд примет решение по ордеру на арест министра обороны хусейна
Prediction: в предстоящие месяцы суд примет решение по ордеру на арест министра обороны хусейна
----------------------------------------------------------------------------------------------------
Reference: валерия живет в старом панельном доме советских времен
Prediction: валерия живето в старом панель тона советских времян
----------------------------------------------------------------------------------------------------
Reference: я вернусь скоро
Prediction: я вернусь скоро
----------------------------------------------------------------------------------------------------
Reference: слово предоставляется его превосходительству принцу зайду
Prediction: слово предоставляется его превосходительство принцу зайду
----------------------------------------------------------------------------------------------------
Reference: ну конечно тебе бы этого хотелось
Prediction: ну конечно тебе этого хотелось
----------------------------------------------------------------------------------------------------
Reference: общественные объединения равны перед законом
Prediction: общественные объединения равны перед законом
----------------------------------------------------------------------------------------------------
Reference: ну что же нету этики эстетики
Prediction: ну что же не то натеки невротики
----------------------------------------------------------------------------------------------------
Reference: сразу же она легла в постель
Prediction: сразу же она легла в пасти
```
The Google Colab version of [this script](https://colab.research.google.com/drive/1SnQmrt6HmMNV-zK-UCPajuwl1JvoCqbX?usp=sharing) is available too.
## Evaluation
This model was evaluated on the test subsets of [SberDevices Golos](https://huggingface.co/datasets/SberDevices/Golos) and [Common Voice 6.0](https://huggingface.co/datasets/common_voice) (Russian part), but it was trained on the train subset of SberDevices Golos only.
## Citation
If you want to cite this model you can use this:
```bibtex
@misc{bondarenko2022wav2vec2-large-ru-golos,
title={XLSR Wav2Vec2 Russian with 3-gram Language Model by Ivan Bondarenko},
author={Bondarenko, Ivan},
publisher={Hugging Face},
journal={Hugging Face Hub},
howpublished={\url{https://huggingface.co/bond005/wav2vec2-large-ru-golos-with-lm}},
year={2022}
}
```