Как создать свой искусственный интеллект на компьютере с помощью python
Обновлено: 05.07.2024
Вы когда-нибудь задумывались, как здорово было бы иметь своего собственного ИИ-ассистента (типа Д.Ж.А.Р.В.И.С.)? Было бы гораздо легче отправлять письма, искать информацию в Википедии, не открывая браузер, и выполнять ещё много других действий с помощью одного только голоса.
В этом уроке мы узнаем, как написать код собственного голосового помощника на Python.
Перед тем, как начать, мы должны определиться, какими функциями должен обладать наш голосовой помощник:
- Отправка электронных писем
- Воспроизведение музыки
- Запросы в Википедию
- Открытие сайтов, таких как Google, YouTube, Stackoverflow, freecodecamp и т.д. в браузере
- Открытие редактора кода или IDE одной голосовой командой
И всё это без ручного ввода запросов в браузере!
А теперь приступим, собственно, к написанию нашего помощника.
И да: не забудьте сперва придумать ему имя :з
Настройка среды
Я использую PyCharm, но вы можете выбрать абсолютно любой удобный вам редактор.
Сперва мы импортируем/установим все необходимые библиотеки:
- pyttsx3;
- datetime;
- speech recognition;
- wikipedia;
- webbrowser;
- os.path;
- smtplib.
Определение функции воспроизведения речи
Интеллектуальному голосовому помощнику прежде всего полагается говорить. Чтобы бот говорил, мы определим функцию speak() , которая принимает на входе аудио и произносит его.
Теперь нам нужно аудио, чтобы обеспечить коммуникацию пользователя и ассистента. Для этого мы установим модуль pyttsx3 .
Что такое pyttsx3 ?
Это библиотека Python, которая поможет нам конвертировать текст в устную речь. Она работает оффлайн и доступна как для Python 3, так и для Python 2.
После успешной установки pyttsx3 нужно импортировать модуль в нашу программу.
Что такое sapi5? Microsoft Speech API (SAPI5) – технология для распознавания и синтеза речи, предоставленная Microsoft.
VoiceId помогает нам выбирать разные голоса:
- voice[0].id = мужской голос
- voice[1].id = женский голос
Марк Лутц «Изучаем Python»
Скачивайте книгу у нас в телеграм
Создание функции speak()
Создание функции main()
Теперь определим функцию main() и вызовем функцию speak() внутри неё.
P.S. Я назову своего ассистента Friday (Пятница).
Всё, что вы передадите функции speak() , будет полностью преобразовано в звук. Поздравляю: наш голосовой помощник обрел свой голос и готов с нами болтать!
Создание функции wishme()
Теперь мы напишем функцию wishme() , благодаря которой наш голосовой помощник будет приветствовать нас разными способами в зависимости от времени на компьютере.
Чтобы предоставить нашему ассистенту информацию о времени, мы должны импортировать модуль datetime, делается это следующей командой:
Теперь напишем функцию wishme() :
Здесь мы сохраняем целочисленное значение текущего часа в переменную hour . Используем это значение в конструкции if-else :
Определение функции takeCommand():
Следующий важный аспект в нашем помощнике: он должен уметь принимать команду с помощью микрофона нашей системы. Для этого мы создадим функцию takeCommand() .
С помощью takeCommand() наш интеллектуальный ассистент сможет возвращать строку, принимая голосовые команды по микрофону.
Но перед определением takeCommand() мы должны установить модуль speechRecognition следующей командой:
После установки импортируем модуль в программу:
Начнём написание функции takeCommand() :
Мы успешно создали нашу функцию takeCommand() . Также мы добавим блок try-except для обработки ошибок.
А теперь мы наконец-то можем приступить к определению задач для получения необходимой информации.
Задача 1: поиск по Википедии
Чтобы отправлять поисковые запросы в Википедию, мы должны установить и импортировать в нашу программу модуль wikipedia .
Команда для установки:
После установки используем import , чтобы добавить модуль в программу:
В коде выше мы использовали if , чтобы проверить, есть ли в запросе пользователя слово «Википедия». Если слово присутствует, помощник прочитает и озвучит с помощью speak() первые 5 предложений из статьи в Википедии (можно поменять число предложений на любое другое).
Задача 2: открыть YouTube в браузере
Для открытия сайтов мы используем модуль webbrowser .
Это встроенный модуль, так что устанавливать его нам не придётся. Остаётся лишь импортировать его.
Задача 3: открыть Google-поиск в браузере
Открытие Google происходит по той же логике, что и с YouTube.
Задача 4: воспроизвести музыку
Чтобы проигрывать музыку, нужно импортировать модуль os :
В данном коде мы в первую очередь открываем директорию с музыкой пользователя и перечисляем все песни в директории с помощью модуля os .
os.startfile позволяет нам воспроизвести любую нашу песню. Также можно включить случайно выбранную композицию с помощью модуля random . Каждый раз, когда вы будете просить включить музыку, голосовой помощник будет запускать воспроизведение любой песни из указанной папки.
Задача 5: узнать время
В этом коде мы используем функцию datetime() и сохраняем текущее время в переменной strTime .
После сохранения времени в strTime мы передаем переменную в качестве аргумента в функцию speak() , чтобы там она превратилась в речь.
Задача 6: открыть StackOverflow
Делаем то же самое, что и в случае с Google/Youtube.
Задача 7: открыть freecodecamp
Делаем то же самое, что и в случае с Google/Youtube.
Задача 8: открыть PyCharm (или другую IDE):
Чтобы открыть PyCharm или любое другое приложение, нужно указать путь к нему.
Чтобы послать электронное письмо, мы импортируем модуль smtplib.
Метод sendmail представлен в модуле SMTP. Именно этот метод позволяет отправлять письма.
Он принимает 3 параметра:
Теперь мы можем создать функцию sendEmail() , которой мы будем посылать письма.
Замечание: не забудьте включить опцию ‘ненадёжные приложения, у которых есть доступ к аккаунту’ в вашем Gmail-аккаунте. Иначе функция sendEmail не сработает нужным образом.
Вызываем sendEmail() внутри main() :
Мы используем блок try-except , чтобы обрабатывать все ошибки, которые могут произойти при отправлении писем.
Повторяем изученное
- Сначала мы создали функцию wishme() , которая предоставляет функционал для приветствия пользователя в соответствии с системным временем.
- После wishme() мы создали функцию takeCommand() , которая позволяет ассистенту принимать команды пользователя и действовать в соответствии с ними. Эта функция возвращает запрос пользователя в формате строки.
- Мы проработали логику для открывания различных сайтов: Google, YouTube, Stackoverflow, freecodecamp, Wikipedia.
- Мы также добавили возможность открывать IDE PyCharm и другие приложения.
- В конце мы разработали функцию отправки электронных писем (без написания единого слова, разве не круто?)
Можно ли считать это искусственным интеллектом?
Технически нет, ведь этот помощник – всего лишь результат выполнения набора команд. Но если поподробнее разобраться в вопросе, можно узнать, что цель любого ИИ – просто облегчить человеческую работу, выполняя задания с эффективностью человека (или даже лучше).
А наш голосовой помощник в значительной степени решает эту задачу.
Так что финальный вердикт: это ИИ!
Конец!
Мои поздравления: мы успешно создали нашего личного голосового помощника и сделали ещё один шаг навстречу нашей лени!
На Python можно строить как простые программы, так и сложные ИИ системы. В данной статье мы покажем как реализовать распознавание голоса и выполнение различных команд.
Перед стартом работы, вам стоит убедиться в нескольких вещах:
- у вас установлен Python на вашем компьютере;
- у вас установлен текстовый редактор, к примеру PyCharm ;
- у вас установлен пакетный менеджер Pip .
Установка библиотек
Для распознавания голоса вам необходимо установить библиотеки:
- SpeechRecognition - команда pip install SpeechRecognition ;
- gTTS - команда pip install gTTS ;
- PyAudio - команда pip install PyAudio .
Все библиотеки стоит устанавливать через терминал в ваш проект через программу PyCharm:
После установки всех библиотек начните прописывать код самой программы. Ниже мы приведем весь код программы с комментариями, дабы вам было проще в нём разобраться:
Как видите, программа простая и не требует гигантского количества строчек кода. Сам код можете подстраивать в любую программу, дабы добавить в неё функционал прослушивания речи.
Также предлагаем посмотреть видео, где все описано еще более детально:
Полезные ссылки из видео:
Больше интересных новостей
Взлёт искусственного интеллекта привёл к популярности платформ машинного обучения MLaaS. Если ваша компания не собирается строить фреймворк и развёртывать свои собственные модели, есть шанс, что она использует некоторые платформы MLaaS, например H2O или KNIME. Многие исследователи данных, которые хотят сэкономить время, пользуются этими инструментами, чтобы быстро прототипировать и тестировать модели, а позже решают, будут ли их модели работать дальше.
Но не бойтесь всей этой инфраструктуры; чтобы понять эту статью, достаточно минимума знаний языка Python и фреймворка Django. Специально к старту нового потока курса по машинному обучению в этом посте покажем, как быстро создать собственную платформу ML, способную запускать самые популярные алгоритмы на лету.
Портрет Орнеллы Мути Джозефа Айерле (фрагмент), рассчитанный с помощью технологии искусственного интеллекта.
Прежде всего взгляните, пожалуйста, на сайт, который я разработал для этого проекта, и позвольте мне показать вам краткое введение в то, что можно сделать с этой платформой, в этом видео.
Как видите, вы выбираете самые популярные модели с контролируемым и неконтролируемым обучением и запускаете их всего одним щелчком мыши. Если хочется попробовать те же наборы данных, что и в видео, вы можете скачать их здесь.
Круто, давайте посмотрим, как это сделать! Возможно, вы работаете на ноутбуке или на облачном сервере, я использовал сервер Digital Ocean, приложение работает на Nginx и Gunicorn, и я подробно расскажу о том, как развёртывать его: это может быть полезно, когда нужно развёртывать приложения на Linux-сервере каждый день.
Давайте начнём настраивать наше окружение с некоторых установок:
После этого всё, что Вам нужно сделать, — это настроить Вашу конфигурацию для сервиса Gunicorn:
Теперь всё готово, и вы можете просто клонировать код из моего GitHub-репозитория (текущая ветка — releasee-1.2) и установить все нужные пакеты, просто выполнив команду:
Проверьте технические характеристики вашей системы, чтобы убедиться, что она соответствует требованиям (стоят нужные версии Python, Django и т. д.). После этого вы увидите типичные папки структуры проекта Django, а именно:
- Папка проекта trainyourmodel с файлом settings.py .
- Папка приложения под названием Portral c файлом views.py .
- Папка шаблонов для кода .html.
Я установил базу данных на тот случай, если захочу использовать её в будущем, но пока мы не используем никакую базу, так как будем запускать модели на лету, поэтому я поместил представления в папку под названием portal , и туда мы разместим весь код, запущенный нашими моделями.
Прежде всего мы импортируем все библиотеки, которые нам понадобятся для наших моделей машинного обучения и построения красивых графиков онлайн (Pandas, NumPy, sci-kit-learn, TensorFlow, Keras, Seaborn, Plotly и т. д.).
Теперь мы готовы создать функцию, которую я назвал upload_csv , она берёт CSV-файл, загруженный в наши шаблоны, и создаст фрейм данных Pandas. Мы будем делать самые разные вещи с данными этого файла, в зависимости от запросов пользователя. Когда пользователь кликает по опциям фронтенда, мы сохраняем опции в переменной, переменная, в свою очередь, может принимать эти значения:
- _plot — строим график рассеяния или тепловую карту.
- _cate — выполняем алгоритм Априори для категориальных переменных.
- _unsuper — выбираем один алгоритм ML без учителя.
- _super — выполняем алгоритм с учителем.
Наконец, если вы нажмёте на кнопку «deep learning» в верхней части сайта, то перейдёте на другой экран, входные данные на этом экране берутся функцией под названием neural , которая будет работать с нейронными сетями. Есть два типа сетей на выбор: «mean-squared-error» или «binary cross-entropy». Как только функция проверяет тип сети для запуска, она берёт эпохи, пакет, значения плотности и выводит на экран модель Keras, показывая точность прогнозов, получается что-то вроде этого:
Заключение
В этом проекте мы увидели, как сравнительно легко внедрить приложение для компьютерного обучения на сервере Linux с помощью Django, мы могли бы также использовать Flask (еще одно популярное приложение на Python) или многие другие технологии. Дело в том, что, если вы просто хотите, чтобы ваша модель работала на фронтенде сайта, чтобы пользователи могли ею пользоваться, вам нужно лишь встроить свои модели в функции, которые принимают входные данные, настроенные пользователями.
Обратите внимание, что мы делали всё на лету, не нуждаясь в базе данных. Это очень маленький навык, если вы являетесь инженером-машиностроителем и вам необходимо быстро построить и развернуть модель. Проблема с реальными платформами машинного обучения заключается в том, что им необходимо принимать огромные объёмы данных от тысяч пользователей и хранить пользовательскую информацию, то есть проблема этих платформ заключается не в сложности выполняемых ими моделей, а в сложности облачных операций, которые они выполняют, чтобы иметь возможность справляться с их рабочей нагрузкой. Что ж, на сегодня всё, надеюсь, вам понравился этот проект и понравилось программировать его!
В этом руководстве разберем создание голосового бота использующего технологии нейронных сетей на языке Python. Бот может распознавать человеческий голос в реальном времени с вашего устройства, например с микрофона ноутбука, и произносить осознанные ответы, которые обрабатывает нейронная сеть.
Бот состоит из двух основных частей: это часть обрабатывающая словарь и часть с голосовым ассистентом.
Всю разработку по написанию бота вы можете вести в IDE PyCharm, скачать можно с официального сайта JetBrains.
Все необходимые библиотеки можно установить с помощью PyPI прямо в консоле PyCharm. Команды для установки вы можете найти на официальном сайте в разделе нужной библиотеки.
Проблема возникла только с библиотекой PyAudio в Windows. Помогло следующее решение:
Дата-сет
Все строки текста перебираются с помощью функции for , при этом из текста удаляются все ненужные символы по маске, находящейся в переменной alphabet . Каждое значение строки раздельно заносится в массив dataset .
После обработки текста все его значения преобразуются в вектора с помощью библиотеки для машинного обучения Scikit-learn. В этом примере используется функция CountVectorizer() . Далее всем векторам присваивается класс с помощью классификатора LogisticRegression() .
Голосовой ассистент
При дефолтных настройках время ответа было достаточно долгим, иногда нужно было ждать по 15-30 сек. К тому же вопрос принимался от малейшего шума. Помогли следующие настройки:
И timeout = None, phrase_time_limit = 2 в функции listen()
После чего бот стал отвечать с минимальной задержкой.
Возможно вам подойдут другие значения. Описание этих и других настроек вы можете посмотреть все на том же сайте PyPI в разделе библиотеки SpeechRecognition. Но настройку phrase_time_limit я там почему-то не нашел, наткнулся на нее случайно в Stack Overflow.
Текст дата-сета
Код Python
Перед тем как продолжить читать эту статью, рекомендуем вспомнить об основных понятиях которые используются при разработке чат-ботов в этой статье.
Установка Python и Pip
Для того, чтобы создать чат-бот на Rasa, очевидно, понадобится очень важный инструмент - python, а ещё установить зависимости (сторонние библиотеки), для чего обычно используется встроенный в python инструмент - pip.
На самом деле вовсе не обязательно заниматься установкой Python. Для того, чтобы установить необходимые зависимости можно воспользоваться open-source библиотекой miniconda. Это более легковесная версия Anaconda, которая содержит conda, python, а также несколько дополнительных полезных пакетов, таких как pip, zlib и другие.
После установки проверить версию conda можно следующим образом:
Для того, чтобы обновить conda, выполните следующую команду:
Итак, если conda или интерпретатор python установлены, можно перейти к следующему шагу.
Создание виртуального окружения
Можно воспользоваться готовой статьей по установке виртуального окружения на любую ОС.
Кстати, использование среды разработки Pycharm позволяет быстро создавать и подхватывать виртуальное окружение, а еще разработкой бота можно заниматься там же!
Установка библиотеки “rasa”
Установить библиотеку можно воспользовавшись pip:
Для того, чтобы посмотреть установленную версию, наберите:
Чтобы проверить доступные аргументы rasa можно ввести команду:
Вуаля! Сразу же после установки библиотеки можно создать небольшой проект на rasa с примерами тренировочных данных, действий и конфигурационных файлов. Для этого нужно выполнить простую команду:
После запуска команды будет предложено выбрать путь, где будет храниться проект:
а также предоставлен выбор обучать бота или нет:
Если согласитесь, вы сможете поговорить с ботом ;)
Команда rasa shell позволяет сделать это прямо в терминале.
Структура проекта
Основные компоненты и файлы для создания чат-бота на Rasa:
Важно! Истории диалогов не должны конфликтовать с правилами: например, если в правилах прописано, что бот здоровается при инициализации диалога и ожидает пользовательский ввод, то конечно, мы не можем написать историю, где бот, поздоровавшись, сразу спрашивает, как дела.То, как именно должен ответить ассистент можно прописать в файле “domain.yml” или (что чуть-чуть сложнее) с помощью функции на python (actions.py). Рассмотрим первый вариант, определение реакции в DOMAIN с ключевым словом “utter”:
Еще один пример типичной истории диалога с примерами выделенных ботом сущностей [в квадратных скобках]:
Подробнее с документацией Rasa можно ознакомиться на официальном сайте.
Обучение и запуск бота
После успешного обучения модель, как правило, сохраняется в папку “models”.
Шпаргалка с полным списком команд rasa:
Создает новый проект с примерами тренировочных для обучения модели, действиями и конфигурационными файлами.
Обучает модель, используя nlu-файл и истории диалогов, сохраняет обученную модель в ./models.
Запускает сессию с интерактивным обучением с возможностью обучения модели в процессе диалога с чат-ботом.
Загружает обученную модель и позволяет поговорить с ассистентом в командной строке.
Запускает сервер с обученной моделью.
rasa run actions
Запускает action сервер, используя Rasa SDK.
Визуализирует истории диалогов.
Тестирует обученную модель на тестовых данных, хранящихся в файлах, название которых начинается с “test_”.
rasa data split nlu
Делит NLU-данные на трейн и тест в отношении 80/20.
rasa data convert
Конвертирует обучающие данные.
rasa data validate
Проверяет domain, NLU и истории диалогов на несоответствия.
Экспортирует диалоги из tracker store в event broker.
Локально запускает Rasa X.
Показывает все возможные команды.
Поговорить с обученным ассистентом в командной строке можно запустив команду:
Команда rasa shell --debug позволит запустить чат-бот в режиме debug и посмотреть логи ошибок. Аргумент -m MODEL (путь до модели) или --model MODEL позволяет явно указать модель. По умолчанию rasa shell запускается, используя последнюю модель из папки “models”. Подробнее с аргументами и командами можно ознакомиться здесь.
Запуск чат-бота на сервере
Команда rasa run запускает сервер с обученной моделью. Для того, чтобы сделать возможным прямое взаимодействие с ботом по API необходимо добавить к команде параметр --enable-api:
Итак, мы создали базового интеллектуального ассистента, который умеет понимать и обрабатывать высказывания на естественном языке. Дальше можно бесконечно кастомизировать бота, создавать истории диалогов, позволяя ему действовать, отвечать и выглядеть разнообразно и, конечно, еще больше развивать его возможности в понимании человеческой речи и намерений пользователей.
Читайте также: