Создание чат-бота с ИИ в Telegram

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

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

Весь код написан на языке Python.

1. Создание бота в Telegram

Для того, чтобы создать бота в Telegram необходимо написать боту по имени BotFather.

Создание чат-бота с ИИ в Telegram

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

Создание чат-бота с ИИ в Telegram
Создание чат-бота с ИИ в Telegram

После создания чат-бота в BotFather вы получите уникальный токен. Токен нужен для идентификации вашего бота. Не сообщайте его никому.

2. Написание кода бота

Для создания чат-ботов в Telegram можете использовать библиотеки python-telegram-bot или pyTelegramBotAPI

from telegram import Update from telegram.ext import Updater, CommandHandler # Обработка команды start def send_start(update: Update): update.message.reply_text(“Hey, what’s up?”) updater = Updater(“YOUR_BOT_TOKEN”) # Добавление обработчика updater.dispatcher.add_handler(CommandHandler(‘hello’, send_start)) # Запуск бота updater.start_polling() updater.idle()

Использование библиотеки python-telegram-bot

import telebot bot = telebot.TeleBot("YOUR_BOT_TOKEN") # Обработка команды start @bot.message_handler(commands=['start']) def send_start(message): bot.reply_to(message, "Hey, what’s up?") # Запуск бота bot.infinity_polling()

Использование библиотеки pyTelegramBotAPI

Принципиально эти библиотеки ничем друг от друга не отличаются. Отличие связано с синтаксисом.

В данной статье я использовал библиотеку python-telegram-bot.

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

3. Создание искусственного интеллекта

NLP (Natural Language Processing) – тема объёмная, тема для ряда статей. В этой статье я расскажу, что использовал и оставлю ссылки на ресурсы с более подробным обзором данной темы.

а. Набор датасета

Датасет я составлял вручную. Структура датасета представлена ниже на изображении.

Создание чат-бота с ИИ в Telegram

Интенты – намерения пользователей. Интент включает в себя примеры вопросов, которые задают пользователи. Например, интент Спортивные мероприятия содержит все вопросы (строго говоря, это могут быть и утверждения), связанные со спортивными мероприятиями. Также интент включает в себя ответы чат-бота. Интент может включать один или несколько ответов. Если ответов несколько, то ответ бота выбирается случайным образом.

В Python структура датасета следующая:

{‘интенты’: {‘1-й интент’: {‘примеры запросов’: [примеры], ‘ответы чат-бота’: [ответы]}, ‘2-й интент’: {‘примеры запросов’: [примеры], ‘ответы чат-бота’: [ответы], …}}

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

b. Предобработка текста

Были использованы три метода: удаление символов пунктуации, приведение слов к нижнему регистру и лемматизация.

Для удаления символов пунктуации использовался модуль string.

import string # Удаление символов пунктуации def remove_punctuation(text): translator = str.maketrans('', '', string.punctuation) return text.translate(translator)

Лемматизация – это процесс приведения слова к нормальной (словарной) форме.

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

Библиотека pymystem3 — это морфологический анализатор русского текста от компании Яндекс. Он приводит слова к начальной форме и нижнему регистру.

Создание чат-бота с ИИ в Telegram

Ссылка на статью с рассмотрением различных способов предобработки текста.

с. Векторизация

В качестве векторизатора был использован TF-IDF векторизатор.

Его название — это сокращение от Term frequency-inverse document frequency (частота слова — обратная частота документа).

Частота слова (Term Frequency) — определяет, как часто выбранное слово появляется в документе (в данном случае, это запросы пользователей).

Обратная частота документа (Inverse Document Frequency) — снижает веса слов, которые часто встречаются в документах.

Код векторизатора:

from sklearn.feature_extraction.text import TfidVectorizer vectorizer = TfidVectorizer(analyzer=’char_wb’, ngram_range=(2,3), max_df=0.8) vector = vectorizer.fit_transform(text)

Параметры векторизатора:

  1. analyzer=’char_wb’ – создание n-грамм символов только из текста внутри границ слов;
  2. ngram_range=(2,3) – нижняя и верхняя границы диапазона значений для n-грамм;
  3. max_df=0.8 — игнорирование терминов, частота которых в запросе строго превышает заданный порог.
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, stratify=y)

Данные делились на обучающую и тестовую выборки. Треть данных отводилась на тесты, остальные часть данных на обучение.

Параметр stratify задаёт использование стратификации по интентам, это позволяет повысить точность классификации для классов с неравным количеством примеров запросов в датасете.

d. Классификация

Для классификации был использован алгоритм LinearSVC. Метод опорных векторов хорошо показывает себя в многоклассовой классификации.

from sklearn.svm import LinearSVC # Классификация clf = LinearSVC() clf.fit(X_train, y_train) clf.predict(vector)[0]

Если ваша модель плохо обучена и часто ошибается в классификации, то можно дополнительно реализовать один из алгоритмов нечёткого поиска. Например, расстояние Левенштейна.

Также мой совет – добавлять заглушки в бота. Заглушки – это такие фразы как «Извините, не понял вас», «Перефразируйте, пожалуйста.».

Модель машинного обучения, имеющая по всем метрикам единицы, это утопия. К тому же язык – это динамическая система и ваш датасет не вечен. Его нужно будет изменять и дополнять. С заглушками пользователь не будет думать, что чат-бот завис или не работает, человек всегда получит ответ.

e. Запуск чат-бота

Можно запускать бота и тестировать его.

Создание чат-бота с ИИ в Telegram

Небольшой чат-бот, который сможет поддержать разговор на общие темы, готов.

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

1. Логирование

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

Библиотека: logging.

2. Обработка голосовых сообщений

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

Библиотека: SpeechPecognition.

3. Выгрузка бота на сервер

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

Создание чат-бота с ИИ в Telegram

Это всё, что я хотел рассказать в данной статье. Надеюсь, вы не зря потратили время. Дерзайте и всё получится!

1111
11 комментариев

Спасибо за статью, есть возможность порекомендовать литературу, про машинное обучнеие от вас?

1

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

Автор

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

А можно пожалуйста полный код. А то не очень понятно взаимодействие между векторизацией и классификацией.

Я думаю dialogfolw для датасетов подойдет

Жалко что на телефон походу ИИ не сделать..

Как сделать бот который будет как голосовой, выдавать уже готовые голосовые записи?