|
--- |
|
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} |
|
} |
|
``` |
|
|