NVIDIA NeMo — создание пользовательской модели распознавания речи

Введение

NVIDIA NeMo — это набор инструментов для диалогового ИИ. Инструментарий представляет собой ускоритель, который помогает исследователям и практикам экспериментировать со сложными архитектурами нейронных сетей. Обработка речи (распознавание и синтез) и обработка естественного языка являются важными возможностями платформы. Поскольку это исходит от NVIDIA, доступна полная поддержка графического процессора. Фреймворк использует PyTorch как фреймворк глубокого обучения.

В этой записной книжке мы попробуем создать автоматическое распознавание речи (ASR). В этом уроке мы будем использовать набор данных LibriSpeech.

Настраивать

Для этого эксперимента необходимо следующее программное обеспечение: Ubuntu 16.04 Anaconda 4.7.11 NeMo — https://github.com/NVIDIA/NeMo Kaladi — https://github.com/kaldi-asr/kaldi Следуйте инструкциям из программное обеспечение для запуска кода. Убедитесь, что у вас установлен PyTorch с поддержкой графического процессора. Спецификация оборудования Требуется не менее шести гигабайт оперативной памяти графического процессора.

Данные

LibriSpeech — это открытый набор данных для распознавания речи. Мы можем скачать данные отсюда http://www.openslr.org/12. Для этого урока мы используем набор данных dev-clean — http://www.openslr.org/resources/12/dev-clean.tar.gz. Чтобы упростить обучение при очень малой площади графического процессора, мы выбрали данные из папок dev-clean/84/121123/84 и dev-clean/84/121550/.

Речевые файлы хранятся в формате .flac, и для работы NeMo их необходимо преобразовать в формат «.wav». Для обучения NeMo требуется файл «манифеста». Файл «манифеста» содержит путь к «.wav» (записи речи), продолжительность речи и стенограммы для каждой записи.

Чтобы упростить жизнь, мы создали утилиту для конвертации «.flac» в «.wav» и файлы метаданных.

from wavconvert import create_nemo_manifest

Создать файл манифеста обучения

flac_path = "/home/jaganadhg/AI_RND/nvidianemo/LibriSpeech/dev-clean/84/121550/"
meta_apth = "meta_train.json"

create_nemo_manifest(flac_path,
    meta_apth)
flac_path = "/home/jaganadhg/AI_RND/nvidianemo/LibriSpeech/dev-clean/84/121123/"
meta_apth = "meta_val.json"

create_nemo_manifest(flac_path,
    meta_apth)

Обучение модели

Давайте перейдем к построению модели. Мы поговорим о БПФ, спектре и языковых моделях позже. Утилитный скрипт создается для абстрагирования процесса. В качестве базовой модели используется модель QuartzNet15x5. Результаты распознавания речи оцениваются с помощью Word Error Rate (WER). Утилитный скрипт реализует калькулятор WER.

Примечание. Значения эпохи должны быть скорректированы соответствующим образом, чтобы получить достойную модель.

from asrtrainer import (train_model,
        computer_wer)
from ruamel.yaml import YAML
config_path = 'quartznet_15x5.yaml'
train_manfest = "metadata.json"
val_manifest = "metadata_validation.json"

yaml = YAML(typ='safe')
with open(config_path) as f:
    model_params = yaml.load(f)
        
my_asr_model = train_model(model_params,
                            train_manfest,
                            val_manifest,
                            5,
                            False)
    
wer = computer_wer(model_params,
                    my_asr_model)

Сохраненную модель можно сохранить в формате «.nemo».

my_asr_model.save_to("tutorial.nemo")

Следующие шаги

В этом уроке мы создали очень простую модель, которая может совсем не работать. Мы можем попробовать это при создании большего набора данных, возможно, всего LibriSpeech dev-clean. Увеличение эпох (я пробовал с 1000 эпох, и транскрипции выглядели хорошо!).

Если вам интересно играть дальше, конфигурации модели доступны в файле quartznet_13x5.yaml.

Код доступен по адресу — https://github.com/jaganadhg/nemoexamples.