Распознавание речи ВКонтакте: быстрая акустическая модель |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2020-10-01 13:02
????
24 сентября 2020 года прошёл онлайн-митап от Команды ВКонтакте — VK Tech Talks | ASR, посвящённый распознаванию речи. С первым докладом выступил разработчик Октай Татанов. Он рассказал про акустическую модель — основную часть автоматического распознавания речи (Automatic Speech Recognition, ASR), а также о подходах и некоторых экспериментах — успешных и не очень. Делимся расшифровкой этого доклада. Прежде чем начать делать какое-то дело с нуля, можно посмотреть, какие решения уже есть. Среди open source есть:
В итоге все готовые решения были либо не гибкими, либо медленными. И было решено делать с нуля собственное решение. Решение с точки зрения инструментов очень простое — это PyTorch. Довольно популярный фреймворк, на котором пишут нейронный сети. С определённой версии PyTorch (примерно 1.3 или 1.4) очень удобно конвертировать модель в любой язык программирования с помощью Torch Script — промежуточного представления модели, благодаря которому можно запускать с любого языка программирования. Препроцессинг В ASR, как и в работе со звуком, препроцессинг занимает очень важную часть. Сырой звук сам по себе — это амплитуда колебания по времени, данные которого в большой размерности. Является не самой информативной формой, с которой можно работать, в том числе из-за высокой размерности. Что можно делать с сырым звуком:
Понижение размерности путём выполнения фрейминга: аудиодорожку разбивают на пересекающиеся фреймы с некоторым шагом, который меньше, чем фрейм. Шаг очень сильно зависит от модели, которую используют, какую задачу решают. Затем, собственно, переход из амплитудного domain в частотный. Тут используется оконное преобразование Фурье, которое преобразуется точками. Аудиодорожка превращается в спектрограмму. Это происходит таким образом: преобразование Фурье для каждого фрейма даёт комплексные числа, потом берётся абсолютная величина комплексного числа (модуль), возводится в квадрат, и это называется power spectrogram. Также переходят из герцев в единицу измерения мелы. Это выполняется с помощью mel filter bank. Происходит так: есть матрица, размер которой равен размеру спектрограммы по столбцам, и каждую строчку матрицы умножают на каждый столбец, что получается преобразование в новую единицу звук. Мелы больше похожи на то, как человек воспринимает звук. Подробнее о преобразование можно прочитать тут. Далее нормализуют, и получается на выходе мел-спектрограмма. Во что ещё превращают сырую дорожку? То о, чём была речь выше, — это хэндкрафт фичи, то есть сделанные человеком подходы. Они были придуманы очень давно, ещё до нейронных сетей. Довольно распространён Mel-Frequency Cepstral Coefficients, в котором используются улучшения для мел-спектрограммы. Что ещё можно сделать в работе со звуком? Сейчас активно пытаются делать не хэндкрафт фичи. Сырую дорожку хотят преобразовывать с помощью нейронных сетей. Для этого довольно активно пробуют SincNet filters. Подход следующий: сырую дорожку преобразовывают в промежуточное представление за счёт простых свёрточных нейронных сетей. Но ядрам надо задавать формы заранее, а также обучать не полноценно все ядра, чтобы преобразовывать из сырой в более сложную, в такое промежуточное представление, а именно задать формы и параметризовать, и параметры для этих ядер откорректировать. Узнать больше про SincNet filters можно на GitHub. Подобная идея есть в wav2vec. В этом подходе из дорожки получают эмбеддинги. Для этого дорожку разбивают на фреймы следующим образом: прогоняют из пространства x в z, а затем в c, используя свёрточные слои. И пытаются уметь из c угадывать следующий фрейм из z с помощью дополнительного преобразования. Более подробнее — тут. Акустическая модель Уже имея представление — меньше размерность и больше информативность — можно сделать так, чтобы нейросетевая модель из мел-спектрограммы выдавала матрицы, где будет для каждого фрейма распределение на алфавит. Такие модели называют акустическими. Какие есть варианты:
Какие модели вообще есть:
В основе обучения используется Connectionist Temporal Classification. Как ранее уже говорилось, для каждого для фрейма предсказывается распределение вероятности на алфавит. Для расширения словаря добавим туда blank-символ. Декодирование результата происходит следующим образом: сначала удаляются подряд идущие повторяющиеся символы, и затем убираются blank-символы. Таким образом blank-позволяет решать проблему, когда в словах есть подряд идущие символы. Функция ошибки очень простая — это минус логарифм вероятности. Получается, нужно уметь считать вероятность правильного ответа: насколько модель даёт правильный ответ. Так как правильный ответ состоит из суммы вероятностей правильных ответов, то просто считается по матрице, которая есть. Перемножаются имеющиеся вероятности в матрице, и потом складываются все правильные варианты. Это очень долгий процесс, но за счёт динамического программирования существует подход, как это сделать быстро и дифференцируемо. Более подробнее смотрите в этой лекции. При обучении также используется аугментация SpecCutout.Идея очень простая: в основной мел-спектрограмме занулить какие-то строчки или столбцы. Кроме того, обучение акустической модели сильно зависит от оптимизатора. Для этого используют Novograd. Он является некоторым улучшением Adam, его отличие в том, что wise-элементы заменили на layer-wise, которые занимают меньше памяти, и поэтому они быстрее. Кроме этого weight decay идёт как в AdamW. Обучение акустической модели — это тяжёлый долгий процесс с большим количеством данных. Поэтому влияют любые фишки, которые ускоряют обучение. Одной из таких фишек является сбалансированное сублимирование данных в batch. Например: после индексирования для каждой аудиодорожки есть длина, сортируются индексы по длине, потом собираются подряд batch. Таким образом можно обучать нейронную сеть на итоговом тензоре с минимум количеством padding. Balanced Distributed Sampler значительно ускоряет обучение, но можно получить так, что batch будут формироваться очень похожими от эпохи к эпохе. Поэтому саму функцию длины можно как-то изменить, например, поделить на 2. Что нужно ещё попробовать, если работаете со звуком: Подведём итоги:
Полная версия выступления: Источник: m.vk.com Комментарии: |
|