Новички в области глубокого обучения быстро узнают, что рекуррентные нейронные сети (RNN) предназначены для построения моделей для последовательных задач с данными (например, языкового перевода), тогда как сверточные нейронные сети (CNN) предназначены для задач, связанных с изображениями и видео. Это довольно хорошее правило большого пальца, но недавняя работа в Facebook показала отличные результаты для последовательных данных, просто используя CNN.

В этой статье я описываю свою работу по использованию CNN для преобразования речи в текст на основе этой статьи. Я также открыл исходный код своей реализации той же статьи на PyTorch.

RNN и их ограничения

Краткое резюме - RNN обрабатывают информацию последовательно, то есть они используют последовательную информацию, представленную в данных, где одна часть информации зависит от другой, и они выполняют одну и ту же операцию с каждым элементом последовательности. Это свойство RNN позволяет сети представлять сложные зависимости между элементами в последовательности, что очень полезно для таких задач, как распознавание речи.

Однако это преимущество имеет два ограничения. Эти зависимости делают модель громоздкой, поскольку каждый шаг зависит от предыдущей операции, поэтому расчет узлов не может быть разделен между процессорами и должен выполняться последовательно. Это также немного замедляет обучение и вывод моделей на основе RNN. RNN также ограничивают максимальную длину последовательностей, поскольку тогда все представления должны быть равны наибольшей входной последовательности.

Использование CNN для последовательностей

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

В первой статье CNN кодирует информацию из голосовых функций. Эти данные отправляются на сверточный слой с размером ядра 1, который также действует как полносвязный слой. Это, наконец, дает softmax вероятности каждого символа, который может быть помещен в транскрипцию.

Во втором случае CNN кодирует информацию из изображения и отправляет эти данные в декодер на основе RNN, который декодирует данные и выводит соответствующий текст из изображения.

Это говорит о том, что сверточная сеть, возможно, может заменить рекуррентную и для задач преобразования речи в текст.

CNN снимает ограничения на использование RNN. Поскольку ввод в CNN не зависит от предыдущих временных шагов, вычисления могут быть разбиты и выполнены параллельно. Это делает обучение, а также вывод намного быстрее по сравнению с моделями на основе RNN. По мере того, как CNN изучает представления контекста фиксированной длины и складывает несколько слоев, она может создавать более крупное представление контекста. Это дает контроллеру CNN максимальную длину моделируемых зависимостей.

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

Использование CNN для преобразования речи в текст

Конвейер преобразования речи в текст состоит из интерфейса, который обрабатывает необработанный речевой сигнал, извлекает функции из обработанных данных и затем отправляет функции в сеть глубокого обучения.

Наиболее широко используемый интерфейс - это так называемый интерфейс log-mel, также называемый MFCC, состоящий из извлечения энергии из набора мел-фильтров с последующим сжатием журнала, где сжатие журнала используется для уменьшения динамического диапазона энергии набора фильтров. Но мы использовали PCEN для нашей реализации, так как это позволило нам повысить точность. Это подробно объясняется.

Выходные данные этого внешнего интерфейса обычно передаются в некоторую архитектуру кодировщика-декодера на основе RNN, которая преобразует эти функции в соответствующую транскрипцию. Мы использовали реализацию Wav2Letter в NVIDIA OpenSeq2Seq для замены RNN архитектурой CNN.

Реализация Nvidia была в TensorFlow, который является отличным фреймворком, но, сдерживая гнев любителей TF, я осмелюсь сказать, что предпочитаю PyTorch - в первую очередь потому, что я считаю фреймворк PyTorch более интуитивно понятным и легким для проведения экспериментов.

Покопавшись в Интернете, мы не нашли подобной реализации в PyTorch. Поэтому мы решили сами реализовать Wav2Letter во фреймворке.

Мы также сделали открытый исходный код всего разработанного нами кода. Вы можете найти его здесь - https://github.com/silversparro/wav2letter.pytorch. Как упоминалось выше, мы заменили интерфейс на основе MFCC на PCEN. Пожалуйста, ознакомьтесь с реализацией с открытым исходным кодом и не стесняйтесь вносить свой вклад.

Результаты точности

Эта модель в настоящее время дает ту же точность, что и модель на основе RNN, но с 10-кратным сокращением времени обучения и аналогичным сокращением времени вывода. Работа над этим продолжается, и мы будем продолжать обновлять блог результатами нашего эксперимента.

Silversparro Technologies стремится помочь крупным предприятиям решить свои ключевые бизнес-проблемы, используя опыт машинного обучения и глубокого обучения. Silversparro работает с клиентами по всему миру в области видеоаналитики, компьютерного зрения, сценариев использования голосовой автоматизации для производства, BFSI, вертикалей здравоохранения и т. Д. Silversparro поддерживается NVIDIA и крупными инвесторами, такими как Ананд Чандрашекаран (Facebook), Динеш Агарвал (Indiamart) », Rajesh Sawheny (Innerchef) и др.

Silversparro основан выпускниками IIT Delhi - Abhinav Kumar Gupta, Ankit Agarwal и Ravikant Bhargava- и работает с такими клиентами, как Viacom18, Policybazaar, Aditya Birla Finance Limited , и UHV Technologies.

Первоначально опубликовано на https://www.silversparro.com 25 апреля 2019 г.