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