Speech AI с Python & Google API

    Speech AI с Python & Google API


    image


    Добрый день!


    Совсем недавно пришла в голову идея сделать "говорилку" на русском языке. В голове была простенькая схема наподобие:


    1) Распознать речь с микрофона
    2) Придумать более — менее разумный ответ.
    В этом пункте можно сделать много интересного.
    Например реализовать управление чем — нибудь физическим и не очень.
    3) Преобразовать этот самый ответ в речь и воспроизвести.


    Самое интересное, что для всех этих пунктов нашлись библиотеки под Python, чем я и воспользовался.


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


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


    SpeechRecognition


    Эта библиотека представляет из себя обвертку над многими популярными сервисами / библиотеками распознавания речи.
    Т.к. из всех представленных в списке библиотеки сервисов первым заработал Google Speech Recognition, им я и воспользовался в дальнейшем.


    Обработка речи


    ChatterBot


    Библиотека использует методы машинного обучения. Обучение происходит на наборах данных в формате диалогов.


    image
    Процесс обучения в библиотеке chatterbot


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


    - Вопрос
    - Ответ
    - ...
    - Ответ

    Для английского языка там есть хороший набор обучающих классов, один из которых берет диалоги из Ubuntu Dialog Corpus, а другой из Twitter'a.


    К сожалению, для русского языка я не нашел альтернатив Ubuntu Dialog Corpus (такого же объема). Хотя тот же TwitterTrainer должен работать.


    В порядке эксперимента я попробовал использовать при обучении диалоги из первого тома Воины и Мира.


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


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


    Еще библиотека chatterbot предоставляет набор "Логических модулей" (LogicAdapter). При помощи которых можно например фильтровать ответ, научить бота считать или говорить текущее время.


    Библиотека довольно гибкая, позволяет писать свои классы для обучения и логические модули.


    Синтезирование и воспроизведение речи


    Google Text to Speech


    Эта библиотека умеет преобразовывать строку в mp3 файл с речью. Т.к. за этой библиотекой стоит Google, то на выбор имеется много языков, включая русский.




    Первые успехи



    Код проекта


    Доступен по ссылке: GHub


    Как установить и запустить?

    Сразу хочу посоветовать создать отдельное виртуальное окружение для python.
    Например при помощи conda.


    conda create --name speech_ai
    source activate speech_ai
    conda install python=3.5

    Для экспериментов с вышеописанным набором библиотек подойдет:


    • python 3 (т.к. в нем нет мороки с non-ascii символами, как в Python 2)

    Пакеты ставить по инструкциям с сайтов:



    Также при установке SpeechRecognition иногда нужно помочь одной зависимости (PyAudio):


    sudo apt-get install python-pyaudio python3-pyaudio 
    pip3 install pyaudio

    chatterbot советует использовать MongoDB для работы в production.
    По умолчанию в качестве хранилища данных используется Json файл, что приводит к многократному замедлению работы при обучении на средних по размеру выборках.


    Что дальше?


    Из мыслей:


    • Разнообразить логику бота, например добавив адаптер поисковых запросов к Google
    • Использовать здесь Computer Vision, например чтобы озвучивать увиденные предметы или имена прошедших мимо людей
    • Добавить боту эмоций при помощи конечного автомата
    • Попробовать тренировать бота на Ubuntu Dialog Corpus
    • Использовать подобное в робототехнике (для умного дома)
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 11
    • 0
      Правильно мыслите — поиск в гугле добавьте и будет уже весело! По крайней мере справочную функцию сможет выполнять.
      А в целом очень хорошо, для повышения быстродействия надо посмотреть как вы импортируете сторонние модули (pygame), вам из них возможно не все надо — тогда эти модули можно немного почистить от лишнего.
      • +2
        bash.im — там куча диалогов. с нестандартной развязкой
        • 0
          Сделайте его в фоновом режиме чтобы он ждал ключевую фразу типа Окей бот ))
          • 0
            Можно. У recognizer'a из SpeechRecognition есть метод с коллбеком.
            Подробности

          • 0
            Синтез речи ужасный. Можно как-то указывать ударения для гугловского синтеза?
            • 0
              В видео на качестве сказалось то, что я использовал очень слабый микрофон своего ноутбука.
              И все же, мне кажется, что то, как говорит синтезатор Google в разы лучше например этого:
              • 0
                Ну вы сравнили :). На самом деле, гугловский синт неплохо бы чуть ускорить, если это можно (код ещё не смотрел), тогда будет естественнее. Ещё можно использовать API от Яндекса или Ивоны (правда, последних Амазон купил, так что не знаю, что с ними теперь).
          • 0
            Основываясь на ваших исходниках запилил себе голосового ассистента под Windows:

            http://pythono.ru/speech-ai/

            Получилось весьма удобно.

            В дальнейшем думаю нужно сделать чтобы при фразе "«Открыть фильм» или «Слушать музыку» открывалось непосредственно фильм или песня а не поисковая выдача. Это можно сделать просто распарсив поисковую выдачу. Еще думаю научить программу рассказывать анекдоты и узнавать погоду, а также читать вслух ответы на поисковые запросы.

            Chatterbot пришлось выпилить ибо он мне был не нужен да и не особо адекватен.
            • 0

              Здорово! Интересная реализация поисковых запросов, думал будет сложнее.
              Думаю, вашу реализацию можно упростить при помощи regex'ов.


              Можно еще поиграться с библиотеками NTLK (Natural Language Toolkit) и ее аналогом для русского языка (как зовут — не помню). Вроде бы при помощи NTLK можно искать синонимы и еще много чего интересного, связанного с обработкой языковых конструкций.

              • 0
                есть еще Pymorphy2 тоже довольно мощная вещь для обработки русских фраз

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