За последний год технологии машинного обучения развивались бешеными темпами. Все больше компаний делятся своими ноу-хау, открывая новые возможности для создания интеллектуальных цифровых помощников.
В этой статье я рассказываю о своем опыте внедрения голосовых помощников и делюсь некоторыми идеями, как сделать голосовых помощников еще умнее и полезнее.
Что может делать голосовой помощник?
Описание навыков | Работа в автономном режиме | Необходимые зависимости |
Распознавание и синтез речи | Помощь со стороны | pip install PyAudio (с микрофоном) |
pip install pyttsx3 (синтез речи)
Для распознавания речи вы можете выбрать одну из них или получить обе.
- pip install SpeechRecognition (высококачественное онлайн распознавание, несколько языков)
- pip install vosk (высококачественное автономное распознавание речи, несколько языков)
Шаг 1: Редактирование речевого ввода
Во-первых, научитесь обрабатывать речевой ввод. Вам потребуется установить микрофон и некоторые библиотеки (PyAudio и SpeechRecognition).
Подготовьте основные инструменты для распознавания речи.
Теперь давайте создадим функцию для записи и распознавания речи. Для распознавания в Интернете вам нужен Google, который обеспечивает высококачественное распознавание на ряде языков.
Но что делать, если у вас нет доступа к Интернету? Вы можете использовать автономные решения для распознавания. Лично я без ума от проекта Vosk.
Если она вам не нужна, нет необходимости подавать заявку в автономном режиме. Я просто хотел показать вам оба способа в этой статье и позволить вам выбрать в соответствии с вашими требованиями (например, по количеству доступных языков распознавания Google является бесспорным лидером).
Теперь вы можете реализовать автономное решение, добавьте нужную языковую модель в свой проект, и он автоматически переключится на автономное распознавание, когда вы будете находиться вне сети.
Чтобы не повторять одну и ту же фразу дважды, мы решили записать звук с микрофона во временный wav-файл. Этот файл удаляется после каждого распознавания.
Таким образом, результирующий код выглядит следующим образом.
Вы можете спросить: "Зачем поддерживать автономную функциональность?".
Всегда стоит учитывать, что пользователь может быть отключен от сети. В этом случае полезно использовать голосового помощника для выполнения некоторых простых задач, например, использовать его в качестве чат-бота, измерить что-то, порекомендовать фильм, помочь с выбором кухни или поиграть в игру.
Шаг 2: Настройка голосового помощника
Наш голосовой помощник может иметь пол, разговорный язык и, классически, имя, поэтому определите классы, которые вы хотите использовать.
Чтобы придать помощнику голос, используйте автономную библиотеку преобразования текста в речь pyttsx3. В зависимости от конфигурации операционной системы компьютер автоматически определяет голоса, которые могут быть использованы для композиции (таким образом, могут быть использованы и другие голоса, для которых может потребоваться другой индекс).
Вы также можете добавить инициализацию синтеза речи в основную функцию и другую функцию и воспроизвести ее. Чтобы убедиться, что все работает, мы выполняем быструю проверку, чтобы убедиться, что пользователь поприветствовал нас, и ответное приветствие помощника.
На самом деле я хочу научиться писать свой собственный синтезатор речи, но у меня недостаточно знаний. Если вы можете порекомендовать хорошую книгу, курс или интересное документированное решение, которое поможет мне глубже разобраться в этой теме, пожалуйста, напишите об этом в комментариях.
Шаг 3: Обработка заказа.
Теперь, когда вы "научились" распознавать и синтезировать речь с помощью священных разработок ваших коллег, вы можете начать изобретать свой собственный велосипед для обработки голосовых команд пользователя:D
В моем случае в демонстрационном проекте не так много событий, поэтому я использую опцию сохранения команды на нескольких языках. Я удовлетворен тем, что могу точно указать ту или иную команду. Однако для больших проектов рекомендуется разделять конфигурацию по языкам.
Для хранения команд можно предложить два метода
Один из вариантов.
Вы можете использовать объект типа JSON, который отлично подходит для хранения намерений, сценариев развертывания и ответов на неудачные попытки (такие объекты часто используются для чат-ботов). Это происходит следующим образом.
Этот вариант подходит для тех, кто хочет обучить ассистентов отвечать на сложные фразы. Кроме того, здесь можно применить подход NLU для создания способа предсказания намерений пользователя путем сопоставления их с тем, что уже включено в конфигурацию.
Более подробно этот метод рассматривается в шаге 5 данной статьи. А пока мы предлагаем более простой вариант
2-Way.
Можно использовать упрощенный словарь. Его ключи — это кортежи с хэшированием (поскольку словарь использует хэширование для быстрого хранения и извлечения элементов), а значения — это имена выполняемых функций. Для коротких команд доступны следующие опции
Для редактирования необходимо добавить следующий код
Дополнительные аргументы, перечисленные после командного слова, передаются в функцию. Таким образом, если вы скажете ‘cutecats video’, команда ‘video’ вызовет search_for_video_on_youtube() с аргументом ‘cutecats’ и вернет следующий результат
Пример такой функции, которая обрабатывает входящие границы:.
Это! Базовая функциональность бота готова. Затем его можно бесконечно совершенствовать различными способами. Моя реализация, включая подробные комментарии, доступна на GitHub.
Ниже я описываю некоторые усовершенствования, которые делают Ассистента еще умнее.
Шаг 4: Добавление нескольких языков
Лучший способ научить помощника работать с несколькими языковыми моделями — организовать небольшие JSON-файлы с простой структурой.
В моем случае я использую переключатель между русским и английским языками. Это связано с тем, что он позволяет использовать модели распознавания и синтеза речи. Язык выбирается в соответствии с разговорным языком самого голосового помощника.
Для получения перевода можно создать отдельный класс с методом, который возвращает буквенно-цифровые символы вместе с переводом.
В главной функции перед циклом объявите переводчик следующим образом: translator = Translation ()
Теперь, когда вы воспроизводите речь ассистента, вы можете получить перевод следующим образом
Как видно из приведенного выше примера, это также работает для строк, требующих ввода дополнительных разделителей. Таким образом, вы можете перевести "стандартный" набор фраз помощника.
Шаг 5: Немного машинного обучения
Теперь мы вернулись к стандартному варианту большинства чат-ботов, использующих объекты JSON и хранящих некоторые из слов, упомянутых в пункте 3. Это подходит для тех, кто не хочет использовать строгие команды и планирует расширить понимание пользователя. Намерения, нлу-методы.
Как правило, фразы "модный день", "спокойной ночи" и "доброе утро" считаются эквивалентными. Ассистент поймет, что во всех трех случаях намерением пользователя было поприветствовать своего голосового помощника.
Этот метод также может быть использован для создания разговорного робота для бесед или для создания разговорного режима для голосового помощника (если кому-то нужно говорить).
Реализация такой функции требует некоторой дополнительной функциональности.
Он также слегка изменяет основную функцию, добавляя инициализацию переменных, подготавливая модель и изменяя цикл на версию, соответствующую новой конфигурации.
Однако такой подход сложнее контролировать. Необходимо всегда контролировать, чтобы конкретная фраза все еще правильно распознавалась системой как часть определенного намерения. Поэтому стоит использовать этот метод с осторожностью (или экспериментировать с самой моделью).
Заключение.
На этом я завершаю свой краткий семинар.
Я буду благодарен, если вы поделитесь со мной своими идеями о решениях с открытым исходным кодом, которые вы знаете, как применить в этом проекте, и какие еще онлайн и офлайн функции можно применить.
Документированный источник моего вокального помощника в двух вариантах можно найти здесь.
PS: Решение работает на Windows, Linux и MacO с небольшими отличиями в установке библиотек Pyaudio и Google.
Кстати, для тех, кто планирует строить карьеру, мы будем рады встретиться с вами на нашем канале YouTube IT Diva. Вы найдете видео о создании Github, интервью, продвижении, борьбе с профессиональным выгоранием, управлении развитием и т.д.