В своей работе я столкнулся с необходимостью проверить записи звонков на соблюдение сотрудниками скрипта разговора с клиентами. Обычно для этого выделяется сотрудник, который тратит большое количество времени на прослушивание записей разговоров. Мы поставили себе задачу — уменьшить временные затраты на проверку с помощью инструментов автоматического распознавания речи (ASR). Один из таких инструментов мы рассмотрим подробнее. Nvidia NeMo — набор инструментов машинного обучения для создания и обучения моделей на базе графического процессора. Модели в составе NeMo используют современный подход к распознаванию речи — коннекционистская временная классификация (CTC). До СТС использовался подход, при котором входной аудиофайл разбивался на отдельные речевые сегменты и по ним предсказывались токены. Далее токены объединялись, повторяющиеся сворачивались в один, и результат подавался на вывод модели. При этом страдала точность распознавания, так как слово с повторяющимися буквами не считалось корректно распознанным на 100%. Например, «кООперация» приводилось к «кОперация». С CTC — все еще предсказываю один токен на временной сегмент речи и дополнительно используем пустой токен, чтобы выяснить где свернуть повторяющиеся токены. Появление пустого токена помогает отделить повторяющиеся буквы, которые не должны быть свернуты. Для своей задачи я взял одну из моделей (Jasper 10×5) и обучил ее с нуля. Для обучения был выбран публичный датасет телефонных разговоров, содержащий нарезанные аудиозаписи и их транскрибацию. Чтобы обучить модель, необходимо подготовить файл-манифест, содержащий информацию об аудиофайле и транскрибацию этого файла. Файл манифест имеет свой формат: Модель принимает аудиофайлы только в формате *.wav. Необходимо пробежаться циклом по всему списку аудиофайлов и при помощи консольной утилиты перекодировать аудиофайлы с отличным от необходимого разрешением: Для построения тестового и тренировочного манифеста я использовал следующую функцию, в которой получили длительность аудиофайла с помощью функции getduration(filename=audiopath) библиотеки Librosa, путь к файлам транскрибации и аудиофайлам нам известен: Для инициализации модели я сформировал специальный файл конфигурации, в котором прописываются все параметры модели: Достаточно загрузить этот файл в конструктор модели и приступать к ее обучению. Для этого необходимо добавить к параметрам модели пути к тестовому и проверочному манифесту и с помощью инструмента pytorch_lighting запустить процесс обучения: После обучения готовую модель можно использовать для распознавания речи: В результате мне удалось добиться достаточной точности, чтобы уверенно распознавать аудиофайлы. При использовании инструмента NeMo я выделил для себя следующие достоинства: быстрое обучение на GPU; возможность менять настройки модели из одного места, не меняя код; простота обучения. Из недостатков можно отметить необходимость включения большого количества тяжеловесных библиотек, а также то, что инструмент относительно свежий и некоторые функции модели находятся в бета-тесте. При решении задачи по распознаванию речи я получил интересный опыт работы с ASR моделями. Смог обучить модель на случайном датасете и получили достаточную точность для уверенного распознавания телефонных разговоров. Предлагаем использовать данный инструмент не только для распознавания речи, но и для генерации аудиофайлов на основе текста (TTS) и распознавания диктора (speaker recognition). Профессиональное сообщество