Speech AI с Python & Google API
Добрый день!
Совсем недавно пришла в голову идея сделать «говорилку» на русском языке. В голове была простенькая схема наподобие:
1) Распознать речь с микрофона
2) Придумать более — менее разумный ответ.
В этом пункте можно сделать много интересного.
Например реализовать управление чем — нибудь физическим и не очень.
3) Преобразовать этот самый ответ в речь и воспроизвести.
Самое интересное, что для всех этих пунктов нашлись библиотеки под Python, чем я и воспользовался.
В итоге получилась связка, практически не зависящая от выбранного в качестве разговорного языка.
Распознавание речи
SpeechRecognition
Эта библиотека представляет из себя обвертку над многими популярными сервисами / библиотеками распознавания речи.
Т.к. из всех представленных в списке библиотеки сервисов первым заработал Google Speech Recognition, им я и воспользовался в дальнейшем.
Обработка речи
ChatterBot
Библиотека использует методы машинного обучения. Обучение происходит на наборах данных в формате диалогов.
Процесс обучения в библиотеке 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)
Пакеты ставить по инструкциям с сайтов:
- Google Text to Speech
- SpeechRecognition
- Chatterbot
- PyGame (Для воспроизведения синтезированной речи)
Также при установке SpeechRecognition иногда нужно помочь одной зависимости (PyAudio):
sudo apt-get install python-pyaudio python3-pyaudio
pip3 install pyaudio
chatterbot советует использовать MongoDB для работы в production.
По умолчанию в качестве хранилища данных используется Json файл, что приводит к многократному замедлению работы при обучении на средних по размеру выборках.
Что дальше?
Из мыслей:
- Разнообразить логику бота, например добавив адаптер поисковых запросов к Google
- Использовать здесь Computer Vision, например чтобы озвучивать увиденные предметы или имена прошедших мимо людей
- Добавить боту эмоций при помощи конечного автомата
- Попробовать тренировать бота на Ubuntu Dialog Corpus
- Использовать подобное в робототехнике (для умного дома)