Как сделать свой голосовой ассистент

Пишем голосового ассистента на Python

Введение

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

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

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент

Что умеет мой голосовой ассистент?

Описание уменияРабота в offline-режимеТребуемые зависимости
Распознавать и синтезировать речьПоддерживаетсяpip install PyAudio (использование микрофона)

pip install pyttsx3 (синтез речи)

Для распознавания речи можно выбрать одну или взять обе:

Шаг 1. Обработка голосового ввода

Начнём с того, что научимся обрабатывать голосовой ввод. Нам потребуется микрофон и пара установленных библиотек: PyAudio и SpeechRecognition.

Подготовим основные инструменты для распознавания речи:

Теперь создадим функцию для записи и распознавания речи. Для онлайн-распознавания нам потребуется Google, поскольку он имеет высокое качество распознавания на большом количестве языков.

А что делать, если нет доступа в Интернет? Можно воспользоваться решениями для offline-распознавания. Мне лично безумно понравился проект Vosk.

На самом деле, необязательно внедрять offline-вариант, если он вам не нужен. Мне просто хотелось показать оба способа в рамках статьи, а вы уже выбирайте, исходя из своих требований к системе (например, по количеству доступных языков распознавания бесспорно лидирует Google).

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

Замечу, что для того, чтобы не нужно было два раза повторять одну и ту же фразу, я решила записывать аудио с микрофона во временный wav-файл, который будет удаляться после каждого распознавания.

Таким образом, полученный код выглядит следующим образом:

Возможно, вы спросите «А зачем поддерживать offline-возможности?»

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

Шаг 2. Конфигурация голосового ассистента

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

Для того, чтобы задать нашему ассистенту голос, мы воспользуемся библиотекой для offline-синтеза речи pyttsx3. Она автоматически найдет голоса, доступные для синтеза на нашем компьютере в зависимости от настроек операционной системы (поэтому, возможно, что у вас могут быть доступны другие голоса и вам нужны будут другие индексы).

Также добавим в в main-функцию инициализацию синтеза речи и отдельную функцию для её проигрывания. Чтобы убедиться, что всё работает, сделаем небольшую проверку на то, что пользователь с нами поздоровался, и выдадим ему обратное приветствие от ассистента:

На самом деле, здесь бы хотелось самостоятельно научиться писать синтезатор речи, однако моих знаний здесь не будет достаточно. Если вы можете подсказать хорошую литературу, курс или интересное документированное решение, которое поможет разобраться в этой теме глубоко — пожалуйста, напишите в комментариях.

Шаг 3. Обработка команд

Теперь, когда мы «научились» распознавать и синтезировать речь с помощью просто божественных разработок наших коллег, можно начать изобретать свой велосипед для обработки речевых команд пользователя 😀

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

Для хранения команд я могу предложить два способа.

1 способ

Можно использовать прекрасный JSON-подобный объект, в котором хранить намерения, сценарии развития, ответы при неудавшихся попытках (такие часто используются для чат-ботов). Выглядит это примерно вот так:

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

Подробно этот способ мы его рассмотрим на 5 шаге данной статьи. А пока обращу ваше внимание на более простой вариант

2 способ

Можно взять упрощенный словарь, у которого в качестве ключей будет hashable-тип tuple (поскольку словари используют хэши для быстрого хранения и извлечения элементов), а в виде значений будут названия функций, которые будут выполняться. Для коротких команд подойдёт вот такой вариант:

Для его обработки нам потребуется дополнить код следующим образом:

В функции будут передаваться дополнительные аргументы, сказанные после командного слова. То есть, если сказать фразу «видео милые котики«, команда «видео» вызовет функцию search_for_video_on_youtube() с аргументом «милые котики» и выдаст вот такой результат:

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент

Пример такой функции с обработкой входящих аргументов:

Ну вот и всё! Основной функционал бота готов. Далее вы можете до бесконечности улучшать его различными способами. Моя реализация с подробными комментариями доступна на моём GitHub.

Ниже мы рассмотрим ряд улучшений, чтобы сделать нашего ассистента ещё умнее.

Шаг 4. Добавление мультиязычности

Чтобы научить нашего ассистента работать с несколькими языковыми моделями, будет удобнее всего организовать небольшой JSON-файл с простой структурой:

В моём случае я использую переключение между русским и английским языком, поскольку мне для этого доступны модели для распознавания речи и голоса для синтеза речи. Язык будет выбран в зависимости от языка речи самого голосового ассистента.

Для того, чтобы получать перевод мы можем создать отдельный класс с методом, который будет возвращать нам строку с переводом:

В main-функции до цикла объявим наш переводчик таким образом: translator = Translation()

Теперь при проигрывании речи ассистента мы сможем получить перевод следующим образом:

Как видно из примера выше, это работает даже для тех строк, которые требуют вставки дополнительных аргументов. Таким образом можно переводить «стандартные» наборы фраз для ваших ассистентов.

Шаг 5. Немного машинного обучения

А теперь вернёмся к характерному для большинства чат-ботов варианту с JSON-объектом для хранения команд из нескольких слов, о котором я упоминала в пункте 3. Он подойдёт для тех, кто не хочет использовать строгие команды и планирует расширить понимание намерений пользователя, используя NLU-методы.

Грубо говоря, в таком случае фразы «добрый день«, «добрый вечер» и «доброе утро» будут считаться равнозначными. Ассистент будет понимать, что во всех трёх случаях намерением пользователя было поприветствовать своего голосового помощника.

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

Для реализации такой возможности нам нужно будет добавить пару функций:

А также немного модифицировать main-функцию, добавив инициализацию переменных для подготовки модели и изменив цикл на версию, соответствующую новой конфигурации:

Однако, такой способ сложнее контролировать: он требует постоянной проверки того, что та или иная фраза всё ещё верно определяется системой как часть того или иного намерения. Поэтому данным способом стоит пользоваться с аккуратностью (либо экспериментировать с самой моделью).

Заключение

На этом мой небольшой туториал подошёл к концу.

Мне будет приятно, если вы поделитесь со мной в комментариях известными вам open-source решениями, которые можно внедрить в данный проект, а также вашими идеями касательно того, какие ещё online и offline-функции можно реализовать.

Документированные исходники моего голосового ассистента в двух вариантах можно найти здесь.

P.S: решение работает на Windows, Linux и MacOS с незначительными различиями при установке библиотек PyAudio и Google.

Кстати, тех, кто планирует строить карьеру в IT, я буду рада видеть на своём YouTube-канале IT DIVA. Там вы сможете найти видео по тому, как оформлять GitHub, проходить собеседования, получать повышение, справляться с профессиональным выгоранием, управлять разработкой и т.д.

Источник

Как просто и непросто создать своего голосового помощника

Голосовой помощник – стремительно развивающийся тренд. Контакты своего голосового помощника скоро будут давать также, как раньше давали контакты секретаря или офиса. Некоторые платформы предлагают создать себе голосовых помощников самостоятельно и будто бы для этого не нужны навыки программирования.

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент

Предыстория

У меня уже есть опыт создания голосовых роботов разного уровня сложности.

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент

Это занимает 5 минут на привычном десктопе с большим экраном. Когда же в кафе зашли со смартфона – все совсем не так, действительно ничего не понятно.

Похоже на то, как если человек давно живет в своей квартире и хорошо в ней ориентируется, то при выключенном свете он также найдет кухню, чайник, посуду. Но если он пришел в гости первый раз, и выключили свет, то уже сложности.

Так и здесь. Хорошо, что я реально знал, где что находится, и по визуальной памяти соединил несколько квадратиков. И то с огромными усилиями, ругательствами, и минут за 40, а не легко и просто за 5.

Итак, что же у нас есть распространенного, чтобы обычный человек, непрограммист, мог «легко и просто» создать себе голосового помощника.

AimyLogic

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент

Платформа с визуальным «безкодовым» редактором.То есть на экране есть квадратики, в них можно вносить различные данные, и соединять квадратики стрелочками.

На большом экране все очень удобно и понятно.

Голосового помощника уровня «привет – как дела – пока» создать действительно легко.

Созданного помощника можно подключать ко многим провайдерам телефонии и другим каналам.

Наличие бесплатного тарифа, регистрируешься и осваиваешься.

Экрана смартфона явно не хватает на виджеты платформы.

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

Связываться с другим сервисом через http-запрос – удобно программисту, довольно непревычно непрограммисту.

Обзвоны создаются легко, хотя обращение со списком номеров и отправление результатов диалогов себе в базу данных требует навыков программирования.

Огромный плюс: можно публиковать помощника/бота практически во все существующие каналы – телефон, telegram, Алиса и так далее.

Дальше можно погружаться в функционал платформы. Есть подключение синтеза голосов, распознавания речи, воспроизведение файлов, обучение нейронной сети и прочее, но это уже для тех, кто погрузился. Для программистов – удобно. Для непрограммистов – скорее сложно, чем легко и просто.

Платформа с визуальным «безкодовым» редактором. Сам визуальный редактор очень похож на AimyLogic, даже особо нечего и обозревать.

Минус в том, что (возможно, но не точно) платформа предназначена для увеличения телефонного трафика МТТ со всеми соответствующими последствиями, то есть созданный помощник/бот остается в МТТ, не публикуется в другие каналы, никуда не переносится, и для начала работы нужно внести аванс порядка 20 000 рублей. Довольно дорого, чтобы просто человеку, не компании и не корпорации, что-то начать, попробовать, потестировать.

BotWinnik

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент

Все предельно просто при создании и применении.

Используются telegram и гугл-таблица, то есть удобно и со смартфонов.

В общем-то пока не совсем понятно, для чего именно такой голосовой помощник нужен, хотя уже прослеживается применение – вместо операторов отвечает на простые вопросы.

Вывод

Искусственный интеллект постепенно набирает обороты, инструменты создания голосовых помощников уже создаются и развиваются.

Все движется к тому, что в самое ближайшее время мы увидим аналогию с созданием сайтов – простого голосового помощника сможет создавать любой человек, просто задавая шаблон на конструкторе и добавляя контент и функционал. И конечно, управлять таким конструктором будет возможно голосом.

Источник

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

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент

Зачем нефтяникам NLP? Как заставить компьютер понимать профессиональный жаргон? Можно ли объяснить машине, что такое «нагнеталка», «приемистость», «затрубное»? Как связаны вновь принятые на работу сотрудники и голосовой ассистент? На эти вопросы мы постараемся ответить в статье о внедрении в ПО для сопровождения нефтедобычи цифрового ассистента, облегчающего рутинную работу геолога-разработчика.

Мы в институте разрабатываем своё ПО (https://rn.digital/) для нефтяной отрасли, а чтобы его пользователи полюбили, нужно не только полезные функции в нём реализовывать, но и всё время думать об удобстве интерфейса. Одним из трендов UI/UX на сегодняшний день является переход к голосовым интерфейсам. Ведь как ни крути, наиболее естественной и удобной формой взаимодействия для человека является речь. Так было принято решение о разработке и внедрении голосового помощника в наши программные продукты.

Помимо улучшения UI/UX составляющей, внедрение ассистента также позволяет снизить «порог вхождения» в работу с ПО для новых сотрудников. Функционал у наших программ обширный, и, чтобы со всем разобраться, может уйти не один день. Возможность «попросить» ассистента выполнить нужную команду позволит сократить время на решение поставленной задачи, а также уменьшить стресс от новой работы.

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

Структурно наш помощник состоит из следующих модулей:

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

Каждый модуль помощника представляет собой микросервис. Так, при желании пользователь может обойтись и вовсе без речевых технологий и обратиться напрямую к «мозгу» ассистента – к модулю выделения смысловых объектов – через форму чат-бота.

Распознавание речи

Первый этап распознавания речи – обработка речевого сигнала и извлечение признаков. Самым простым представлением звукового сигнала может служить осциллограмма. Она отражает количество энергии в каждый момент времени. Однако для определения произносимого звука этой информации недостаточно. Нам важно знать, какое количество энергии содержится в различных частотных диапазонах. Для этого с помощью преобразования Фурье производится переход от осциллограммы к спектру.

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент
Это осциллограмма.

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент
А это спектр для каждого момента времени.

Здесь нужно уточнить, что речь образуется при прохождении вибрирующего воздушного потока через гортань (источник) и голосовой тракт (фильтр). Для классификации фонем нам важна лишь информация о конфигурации фильтра, то есть о положении губ и языка. Выделить такую информацию позволяет переход от спектра к кепстру (cepstrum – анаграмма слова spectrum), выполняемый с помощью обратного преобразования Фурье от логарифма спектра. По оси x вновь откладывается не частота, а время. Для проведения различия между временными областями кепстра и исходного звукового сигнала используют термин «сачтота» (Оппенгейм, Шафер. Цифровая обработка сигналов, 2018).

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент
Кепстр, или просто “спектр логарифма спектра”. Да-да, сачтота – это термин, а не опечатка

Информация о положении голосового тракта находится в 12 первых коэффициентах кепстра. Эти 12 кепстральных коэффициентов дополняются динамическими признаками (дельта и дельта-дельта), описывающими изменения звукового сигнала. (Jurafsky, Martin. Speech and Language Processing, 2008). Полученный вектор значений носит название MFCC вектор (Mel-frequency cepstral coefficients) и является наиболее распространенным акустическим признаком, используемым в распознавании речи.

Что же происходит с признаками дальше? Они используются в качестве входных данных для акустической модели. Она показывает, какая лингвистическая единица, скорее всего, «породила» подобный MFCC вектор. В разных системах такими лингвистическими единицами могут служить части фонем, фонемы или даже слова. Таким образом, акустическая модель позволяет преобразовать последовательность MFCC векторов в последовательность наиболее вероятных фонем.

Далее для последовательности фонем необходимо подобрать соответствующую последовательность слов. Здесь в дело вступает словарь языка, содержащий транскрипцию всех распознаваемых системой слов. Составление подобных словарей трудоемкий процесс, требующий экспертных знаний в фонетики и фонологии конкретного языка. Пример строки из словаря транскрипций:

скважина s k v aa zh y n ay

На следующем этапе языковая модель определяет априорную вероятность предложения в языке. Другими словами, модель даёт оценку, насколько правдоподобно появление такого предложения в языке. Хорошая языковая модель определит, что фраза «Построй график дебита нефти» более вероятна, чем предложение «Построй график девять нефти».

Комбинация акустической модели, языковой модели и словаря произношений создает «решетку» гипотез – все возможные последовательности слов, из которых с помощью алгоритма динамического программирования можно найти наиболее вероятную. Её система и предложит в качестве распознанного текста.

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

Изобретать велосипед и писать с нуля библиотеку для распознавания речи было бы нецелесообразно, поэтому наш выбор пал на фреймворк kaldi. Несомненным плюсом библиотеки является её гибкость, позволяющая при необходимости создавать и модифицировать все компоненты системы. Кроме того, лицензия Apache License 2.0 позволяет свободно использовать библиотеку в коммерческой разработке.

В качестве данных для обучения акустической модели использовался свободно распространяемый аудио датасет VoxForge. Для преобразования последовательности фонем в слова мы использовали словарь русского языка, предоставляемый библиотекой CMU Sphinx. Поскольку в словаре отсутствовало произношение терминов специфичных для нефтяной отрасли, на его основе с помощью утилиты g2p-seq2seq была обучена модель графемно-фонемного преобразования (grapheme-to-phoneme), позволяющая быстро создавать транскрипции для новых слов. Языковая модель обучалась как на транскриптах аудио с VoxForge, так и на созданном нами датасете, содержащим термины нефтегазовой отрасли, названия месторождений и добывающих обществ.

Выделение смысловых объектов

Итак, речь пользователя мы распознали, но ведь это всего лишь строчка текста. Как объяснить компьютеру, что необходимо выполнить? Самые первые системы голосового управления использовали жестко ограниченный набор команд. Распознав одну из таких фраз можно было вызвать соответствующую ей операцию. С тех пор технологии в сфере обработки и понимания естественного языка (NLP и NLU соответственно) шагнули далеко вперед. Уже сегодня модели, обученные на больших объемах данных, способны неплохо понимать смысл, заключенный в том или ином высказывании.

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

Чтобы решить первую задачу, необходимо представить текст в виде числового вектора, который может быть обработан машиной. Для подобного преобразования использована нейронная модель StarSpace, позволяющая «вложить» текст запроса и класс запроса в общее пространство.

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент
Нейронная модель StarSpace

Во время обучения нейронная сеть учится сравнивать сущности, так чтобы минимизировать расстояние между вектором запроса и вектором верного класса и максимизировать расстояние до векторов отличных классов. Во время тестирования для запроса х выбирается класс у, так чтобы:

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент

В качестве меры схожести векторов используется косинусное расстояние:

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент
, где
х – запрос пользователя, у – категория запроса.

Для обучения классификатора намерений пользователя было размечено 3000 запросов. Всего у нас вышло 8 классов. Выборку мы разделили на обучающую и тестовую выборки в соотношении 70/30 с помощью метода стратификации по целевой переменной. Стратификация позволила сохранить исходное распределение классов в трейне и тесте. Качество обученной модели оценивалось сразу по нескольким критериям:

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент
Метрики модели на тестовом датасете: Accuracy – 92%, F1 – 90%.

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

Для решения задачи использовался алгоритм условных вероятностных полей (Conditional Random Fields), представляющих собой разновидность Марковских полей. CRF является дискриминативной моделью, то есть моделирует условную вероятность P(Y|X) скрытого состояния Y (класс слова) от наблюдения X (слово).

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

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент
Пример из обучающей выборки для задачи Named Entity Recognition.

Однако всё оказалось не так просто. У разработчиков месторождений и геологов довольно распространены профессиональные жаргонизмы. Людям не составляет труда понять, что «нагнеталка» – это нагнетательная скважина, а «Самотлор», скорее всего, обозначает Самотлорское месторождение. Для модели же, обученной на ограниченном объеме данных, провести такую параллель пока трудно. Справиться с этим ограничением помогает такая замечательная фича библиотеки Rasa, как создание словаря синонимов.

## synonym: Самотлор
— Самотлор
— Самотлорское
— самое большое месторождении нефти в России

Добавление синонимов также позволило немного расширить выборку. Объем всего датасета составил 2000 запросов, которые мы разделили на трейн и тест в соотношении 70/30. Качество модели оценивалось с помощью метрики F1 и составило 98% при тестировании на контрольной выборке.

Исполнение команд

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

Например, при отнесении команды к классу “запрос_график_добычи” создается объект класса RequestOilChart, выгружающий информацию по добыче нефти из базы данных. Выделенные именованные сущности (например, название скважины и месторождения) используются для заполнения слотов в запросах для обращения к базе данных или ядру программного обеспечения. Отвечает ассистент с помощью заготовленных шаблонов, пробелы в которых заполняются значениями выгруженных данных.

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент

Пример работы прототипа ассистента.

Синтез речи

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

Сгенерированный на предыдущем этапе текст оповещения пользователя выводится на экран, а также используется в качестве входа для модуля синтеза устной речи. Генерация речи осуществляется с использованием библиотеки RHVoice. Лицензия GNU LGPL v2.1 позволяет использовать фреймворк в качестве компонента коммерческого ПО. Основными компонентами системы синтеза речи являются лингвистический процессор, который обрабатывает подаваемый на вход текст. Производится нормализация текста: цифры приводятся к письменному представлению, аббревиатуры расшифровываются и т. п. Далее с помощью словаря произношений происходит создание транскрипции для текста, которая далее передается на вход акустического процессора. Данный компонент отвечает за выбор звуковых элементов из речевой базы данных, конкатенацию выбранных элементов и обработку звукового сигнала.

Собираем всё воедино

Итак, все компоненты голосового помощника готовы. Осталось лишь «собрать» их в правильной последовательности и протестировать. Как мы упоминали ранее, каждый модуль представляет собой микросервис. В качестве шины для связки всех модулей используется фреймворк RabbitMQ. Иллюстрация наглядно демонстрирует внутреннюю работу ассистента на примере типичного запроса пользователя:

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент

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

В данный момент мы занимаемся интеграцией помощника в один из разрабатываемых продуктов.

Как сделать свой голосовой ассистент. Смотреть фото Как сделать свой голосовой ассистент. Смотреть картинку Как сделать свой голосовой ассистент. Картинка про Как сделать свой голосовой ассистент. Фото Как сделать свой голосовой ассистент
Как удобно будет искать свою скважину или любимый куст с помощью всего одной фразы!

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

Описанный в статье проект – далеко не единственный пример использования методов машинного обучения в нашей Компании. Так, например, анализ данных применяется для автоматического подбора скважин-кандидатов на геолого-технические мероприятия, целью которых является интенсификации добычи нефти. В одной из ближайших статей мы расскажем, как решали эту крутую задачу. Подписывайтесь на наш блог, чтобы не пропустить!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *