wav2vec2-mbart50-ru / README.md
bond005's picture
Update README.md
e6ff511
---
language: ru
datasets:
- bond005/sberdevices_golos_10h_crowd
- bond005/sberdevices_golos_100h_farfield
- common_voice
- bond005/sova_rudevices
- bond005/rulibrispeech
metrics:
- wer
- cer
tags:
- audio
- automatic-speech-recognition
- speech
- common_voice
- SberDevices/Golos
- sova_rudevices
- rulibrispeech
license: apache-2.0
widget:
- example_title: test sound with Russian speech
src: https://huggingface.co/bond005/wav2vec2-mbart50-ru/resolve/main/test_sound.wav
model-index:
- name: Wav2Vec2-mBART-50 for speech-to-text in Russian 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: 13.204
- name: Test CER
type: cer
value: 4.157
- 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: 17.681
- name: Test CER
type: cer
value: 6.773
- 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: 14.693
- name: Test CER
type: cer
value: 5.765
- task:
name: Speech Recognition
type: automatic-speech-recognition
dataset:
name: Sova RuDevices
type: sova_rudevices
args: ru
metrics:
- name: Test WER
type: wer
value: 22.727
- name: Test CER
type: cer
value: 9.183
- task:
name: Speech Recognition
type: automatic-speech-recognition
dataset:
name: Russian Librispeech
type: rulibrispeech
args: ru
metrics:
- name: Test WER
type: wer
value: 32.540
- name: Test CER
type: cer
value: 10.369
---
# Wav2Vec2-mBART-50-Ru
Wav2Vec2-mBART-50-Ru is a speech-sequence-to-text-sequence model, which can convert an input audio with Russian speech into a text with punctuation, capitalization and so on.
Wav2Vec2-mBART-50-Ru is the [SpeechEncoderDecoderModel](https://huggingface.co/docs/transformers/model_doc/speech-encoder-decoder), which was initialized with [Wav2Vec2-Large-Ru-Golos](https://huggingface.co/bond005/wav2vec2-large-ru-golos) as the encoder and [mBART-large-50](https://huggingface.co/facebook/mbart-large-50) as the decoder. After its initialization the model was fine-tuned using the training parts of several annotated speech corpora:
- [the 10 hours crowd subset of SberDevices Golos](https://huggingface.co/datasets/bond005/sberdevices_golos_10h_crowd)
- [the 100 hours farfield subset of SberDevices Golos](https://huggingface.co/datasets/bond005/sberdevices_golos_100h_farfield)
- [the Russian subset of Common Voice 6.0](https://huggingface.co/datasets/common_voice)
- [Sova RuDevices](https://huggingface.co/datasets/bond005/sova_rudevices)
- 15% part of the training subset of [Russian Librispeech](https://huggingface.co/datasets/bond005/rulibrispeech)
CommonVoice 6.0 contains "rich" text annotations with punctuation and capitalization, but other speech corpora includes plain texts only. Therefore, text annotations of these corpora were riched automatically using the [Silero text enhancement model](https://github.com/snakers4/silero-models#text-enhancement).
## 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 torch
from datasets import load_dataset
from datasets.features import Audio
from transformers import SpeechEncoderDecoderModel, Wav2Vec2Processor
LANG_ID = "ru"
MODEL_ID = "bond005/wav2vec2-mbart50-ru"
SAMPLES = 30
num_processes = max(1, os.cpu_count())
processor = Wav2Vec2Processor.from_pretrained(MODEL_ID)
model = SpeechEncoderDecoderModel.from_pretrained(MODEL_ID)
test_dataset = load_dataset("common_voice", LANG_ID, split=f"test[:{SAMPLES}]")
if test_dataset.features['audio'].sampling_rate != 16_000:
test_dataset = test_dataset.cast_column(
'audio',
Audio(sampling_rate=16_000)
)
audio_data = [test_dataset[i]['audio']['array'] for i in range(SAMPLES)]
processed = processor(audio_data, sampling_rate=16_000,
return_tensors="pt", padding='longest')
with torch.no_grad():
predicted_ids = model.generate(**processed)
predicted_sentences = processor.batch_decode(
predicted_ids,
num_processes=num_processes,
skip_special_tokens=True
)
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: Сразу же она легла в постель.
----------------------------------------------------------------------------------------------------
Reference: Сейчас я сделаю заявление в своем национальном качестве.
Prediction: Сейчас я сделаю заявление в своем национальном качестве.
----------------------------------------------------------------------------------------------------
Reference: Что там сейчас происходит в Твиттере?
Prediction: Что там сейчас происходит в Твиттере?
----------------------------------------------------------------------------------------------------
Reference: Ну хорошо, что револьвер был заряжен холостыми.
Prediction: Ну хорошо, что Револьвер был заряжен холостыми.
----------------------------------------------------------------------------------------------------
Reference: А потом дальше может проходить работа такая.
Prediction: А потом дальше может проходить работа такая.
----------------------------------------------------------------------------------------------------
Reference: Из Microsoft написали что на текущий момент у них нет открытых вакансий.
Prediction: Из моих красотов написали, что на текущий момент у них нет открытых вакансий.
----------------------------------------------------------------------------------------------------
Reference: Мы добились многого, но сейчас не время терять набранную динамику.
Prediction: Мы добились многого, но сейчас не время терять набранную динамику.
----------------------------------------------------------------------------------------------------
Reference: Мы внимательно проанализировали документ и содержащиеся в нем выводы и рекомендации.
Prediction: Мы внимательно проанализировали документ, содержащийся в нем, выводы рекомендаций.
----------------------------------------------------------------------------------------------------
Reference: А сейчас слово имеет представитель Соединенных Штатов Америки.
Prediction: А сейчас слово имеет представитель Соединенных Штатов Америки.
----------------------------------------------------------------------------------------------------
Reference: Обстоятельства изменились, и мы должны учитывать это.
Prediction: Обстоятельно изменились и мы должны учитывать это.
----------------------------------------------------------------------------------------------------
Reference: На этом принципе основывается и наша позиция по Фолклендским островам.
Prediction: На этом принципе основывается и наша позиция по Фолклендским островам.
```
The Google Colab version of [this script](https://colab.research.google.com/drive/1VlTrsc9d9wyzLPAWagpXLzoDLn2PRvZA?usp=sharing) is available too.
## Evaluation
This model was evaluated on the test subsets of [SberDevices Golos](https://huggingface.co/datasets/SberDevices/Golos), [Common Voice 6.0](https://huggingface.co/datasets/common_voice) (Russian part), and [Sova RuDevices](https://huggingface.co/datasets/bond005/sova_rudevices).
The evaluation script [wav2vec2_mbart50_ru_eval](https://www.kaggle.com/code/bond005/wav2vec2-mbart50-ru-eval) is available for checking and reproducibility.
## Citation
If you want to cite this model you can use this:
```bibtex
@misc{bondarenko2023-wav2vec2-mbart50-ru,
title={Wav2Vec2-mBART-50 for speech-to-text in Russian by Ivan Bondarenko},
author={Bondarenko, Ivan},
publisher={Hugging Face},
journal={Hugging Face Hub},
howpublished={\url{https://huggingface.co/bond005/wav2vec2-mbart50-ru}},
year={2023}
}
```