/Product_Bot

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

ПРОДУКТОВЫЙ NLP БОТ

КТО ЭТО И С ЧЕМ ЕДЯТ

Григорий - бот в Телеграме для удобного заказа продуктов и общения на естественном языке.
Бот имеет собственную базу рекомендаций продуктов на основе заказов пользователя, сделанных через него, поэтому бот интегрируется в любой маагазин (главное - наличие необходимого API). Система рекомендаций самая примитивная — продается товар, который пользователь покупает чаще всего в каждой категории.

Сначала бот ищет запрос в заранее написанной таблице вопрос-ответ, затем если он есть, то совершает соответствующие действия и отвечает, иначе подключает GPT-2 для генерации ответа.

ПОДРОБНЕЕ ПРО NLP

В первую очередь при получении запроса он прогоняется через neuralintents с таблицей сущностей, написанной заранее. Если там есть необходимый запрос (например, как дела?, расскажи анекдот и т.д.), то пользователю идет соответствующий ответ. При чем если запрос касается действий с магазином (заказать продукты, показать корзину и т.д.), то выполняются нужные действия и лишь затем идет ответ пользователю, что очевидно.
Однако если модуль не нашел в таблице запрос, то подключается модель GPT-2, обученная на моих личным переписках, и генерирует ответ. Стоит также отметить недочеты в этой части:

  • модель обученая на моих личных переписках, поэтому
    • может выдать мои данные
    • может отправить ссылку или какой-то кусок кода, который я кому-либо отправлял
  • слишком мало данных для обучения (всего 97 тыщ строк)

ПОДРОБНЕЕ ПРО ЗАКАЗ ПРОДУКТОВ

В проекте реализован сервер-затычка, написанный на Go. В нем есть минимальный API (показать данные продукта, добавить в корзину и т.д.). Общение с сервером идет через защищенное базовой аутентификацией http соединение.
Развернуты два PostgreSQL (для магазина и для бота). Для магазина там таблицы пользователей и продуктов, для бота - пользователей и рекомендаций.

КОММЕНТАРИИ

  • все держится на моем домашнем сервере (и бот, и магазин, и постгрес), поэтому если что-то сломалось и не отвечает, то самое просто решение — написать мне, чтобы я подрубил, если что выключилось
  • проект создан для конкурса "Уроки Настоящего" за ~1 месяц
  • впервые работал с
    • постгрес
    • нейронки вообще
    • вместо GPT и neuralintents изначально планировалось использовать косинусное сравнение (?) и индексированию по словам — отвечал примерно связно, но мало на что находился ответ, поэтому идея была заморожена