Обработка звука
Первые попытки научить устройства распознавать голосовые команды предпринимались еще в середине прошлого века. Уже тогда стало понятно, что запись голоса необходимо предварительно обработать. Голоса могут иметь разный уровень громкости, присутствовать различные шумы на фоне и так далее. Это сильно осложняет процесс распознавания, появляется большое количество ошибок.
Оцифровка
Звук по своей природе – это волны. С микрофона он передается в формате аналогового сигнала, с которым обычные ПК работать не умеют. Поэтому возникает необходимость предварительно оцифровать звук для дальнейшей загрузки в компьютер. Для этого используют аналого-цифровые преобразователи (АЦП). На выходе звук представляет собой массив цифровых данных. К примеру, если используется частота дискретизации 44 кГц, то запись с продолжительностью 1 секунда конвертируется в 44000 отдельных чисел.
Фильтрация
Процесс подразумевает отсеивание частот, которые явно не относится к голосу человека. Это достаточно узкий диапазон – 75-500 Гц. Напомним, слышимый диапазон составляет о 20 Гц до 20 кГц, примерно такой диапазон обеспечивают современные микрофоны. Получается, что на этапе фильтрации может удалиться до 97% лишних данных.
Есть инструменты, которые позволяют делать фильтрацию до оцифровки – для этого используются аналоговые фильтры, но цифровой метод гораздо надежнее.
Нормализация
На данном этапе происходит выравнивание уровня громкости на разных участках. После обработки сигнал имеет схожую амплитуду, что также упрощает работу по распознаванию.
Использование методов математического анализа для распознавания
Могут использоваться разные методы. В самом простом случае в базу заранее записываются голосовые команды. Далее внешняя команда просто сравнивается с набором для поиска лучшего совпадения. Такой алгоритм достаточно эффективен, если используется ограниченное число готовых команд. Но для полноценного распознавания голоса такой метод уже не подойдет.
Распознавание при помощи нейросетей
Нейронные сети функционируют аналогично человеческому мозгу. Это позволяет хорошо выявлять качественные признаки, но с количественными такие системы работают гораздо хуже. Человеку достаточно одного взгляда, что бы отличить собаку от кошки, ему для этого не нужно получать отдельные навыки. Но если ему показать две кучки спичек, в которых будет 49 и 50 спичек, то четко определить нужную практически невозможно (фактор угадывания не учитывается).
Проблема в том, что смысловую нагрузку в записи несет частота сигнала, а вот амплитуда может только запутать систему. Для решения данной задачи используется частотный анализ. Чтобы упростить работу нейросети, можно использовать визуализацию таких графиков. В этом случае можно использовать те же алгоритмы, что и для распознавания обычных фотографий, с чем нейросети сегодня справляются достаточно успешно.
Более того, такой формат позволяет работать не с отдельными словами, а с фонемами. Фонемы – набор элементов, из которых состоит обычная речь. Их относительно немного (в любых языках), что несколько упрощает работу. К примеру, в русском языке их всего 42 (некоторые исследования указывают, что их порядка 46-48).
Стоит понимать, что фонемы и буквы – не одно и то же. В разных словах одинаковые буквы могут быть представлены разными фонемами. Но если распознать все фонемы, можно будет собрать исходное слово.
Дальнейшая обработка текста
Очевидно, что недостаточно просто распознать текст, нейросеть должна его обработать и предоставить ответ. На начальном этапе из текста выделяются отдельные токены – так принято называть смысловые единицы. В зависимости от конкретной нейросети это могут быть отдельные или целые фразы. К примеру, в голосовых ассистентах это обычно отдельные слова и знаки пунктуации.
Полученный набор токенов проходит через эмбеддинг – на этом этапе каждому токену присваивается смысловой вектор в N-мерном пространстве. Это позволяет анализировать исходный текст. Упрощенно говоря, такой массив позволяет понимать, о чем идет речь. К примеру, если на вход поступит набор токенов «Молоко, Луг», алгоритм сделает предположение, что речь в тексте идет о корове.
Также токены позволяют искать схожие признаки. К примеру, токен «Луг» может присутствовать и у птицы, поскольку она тоже обитает в данной локации.
Очевидно, что итоговая эффективность работы нейросети будет сильно зависеть от размеров такого массива и правильности заполнения. Делается это на основе массива реальных данных, при этом используются методы машинного обучения. Нейросеть последовательно просматривает предоставленные тексты и самостоятельно заполняет словарь, проверяя слова, которые часто встречаются в одном предложении. К примеру, встретив несколько раз рядом слова «Луг» и «Корова», будет увеличено число, которое стоит на пересечении соответствующих строк и столбцов.
После завершения для каждого слова сопоставляется набор других слов, что и позволяет понимать их смысл. Это позволяет понимать, что именно в данный момент хочет пользователь. Для этого входящий запрос передается в семантический теггер, который позволяет получить семантическую функцию для отдельного токена. К примеру, если поступит вопрос «Кто на дереве?», алгоритм выделит токены «?» и «Кто», определив поступление вопроса. «Дерево» будет определено в качестве основы, после чего инициируется проверка соответствующего вектора.
Для поддержания разговора недостаточно только отвечать на простые вопросы, должен поддерживаться контекст беседы. Эту возможность обеспечивают рекуррентные нейронные сети. В них предусмотрены отдельные рекуррентные слои, также используются дополнительные выходы для последующего просчета информации.
Заключение
Современные голосовые ассистенты способны развернуто отвечать на вопросы, поддерживать диалог, управлять устройствами и многое другое. Однако это только имитация осознанного диалога, нейросеть пока далека от полноценного разума. Просто специалисты нашли способ систематизировать обширную базу знаний и организовать полноценный поиск по ней.
Обучение даже небольшой нейросети требует огромных вычислительных ресурсов, собранные базы занимают массивы накопителей. Поэтому полноценные помощники сегодня разворачиваются только на отдельных серверах, локально запустить такой сервис на мобильном устройстве нельзя.