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.