С июня 2020 г. я больше не буду использовать Medium для публикации новых историй. Пожалуйста, посетите мой личный блог, если вы хотите продолжить читать мои статьи: https://vallant.in.

Приближается Рождество, а вместе с ним и неконтролируемое желание тратить деньги на покупку подарков для друзей и семьи. Но что купить? Что, если бы бот мог сказать вам, что подарить, основываясь на личности другого человека?

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

В течение последнего месяца я работал над собственным проектом: чат-бот на базе Rasa, способный предсказать, какой подарок кому-то подойдет, исходя из вкусов человека.

Идея следующая: с помощью Telegram вы сообщаете боту пару-тройку информации о человеке, которому хотите понравиться. Бот ищет в базе данных продукт, который лучше всего подходит под описание, которое вы ей дали.

Вся идея очень проста, но для этого мне пришлось погрузиться не только в Rasa и Python, но и в Telegram API, Webhooks, Server Configuration, SK-Learn, spaCy, Version Control, MongoDB, NLTK… и многое другое. других библиотек и концепций.

Как это работает?

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

Затем просканированный контент сохраняется в MongoDB. Я решил использовать Mongo из-за его способности эффективно работать с неструктурированными данными и из-за хорошей интеграции с Python.

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

Выбор движка бота

Когда я думал о развитии проекта, моей первой целью было сделать его как можно дешевле. Я запускаю бота на старом компьютере, который у меня был дома, поэтому единственная плата, которую я имею, — это подключение к Интернету.

Именно поэтому я решил работать только с инструментами с открытым исходным кодом, такими как Rasa и Telegram. Чтобы подключить бота к Telegram, я протестировал несколько альтернатив, таких как Ngrok и Localtunnel, но действительно хорошо справился с задачей Telebit.

Некоторое время назад я уже начал играться с Dialogflow. Таким образом, это должно быть очевидным выбором для питания бота. Причины, по которым я решил пойти с Расой, были следующими:

  1. Я прошел собеседование в компании, которая использует Rasa в качестве основного поставщика, и я не знал этот инструмент. Это казалось хорошей возможностью узнать больше о Расе.
  2. Я хотел испытать ощущение испачканных рук, подготовив сервер к приему Расы и обслуживая его из моего дома.
  3. Dialogflow — отличный инструмент, но он также принадлежит Google. Я стараюсь держаться подальше от закрытых решений, когда говорю о данных.
  4. Раса с открытым исходным кодом.
  5. Документация как для Rasa, так и для Dialogflow ужасна, так что это не повлияло на мое решение.

Короче говоря, в Rasa сложнее начать играть. Но это твое. И опыт, который вы получаете при его настройке, тоже отличный.

Чему я научился в этом проекте?

Создание множества диаграмм Matplotlib и создание моделей на основе общедоступных баз данных — это одно. Создание всего с нуля — это другое! Когда вы беретесь за большой проект, вы должны думать о каждой детали, в том числе о тех частях, которые не имеют ничего общего с машинным обучением.

А еще вы научитесь быть креативным. Чтобы обучить свой классификатор, мне пришлось работать с большим количеством искусственных данных. Мне также приходилось во многом полагаться на свое воображение, так как некоторые части бота работали с данными, которых у меня еще не было.

Кстати, создать sk-learn/keras/name ваш любимый классификатор методов с той старой базой данных Twitter, которую вы нашли в Интернете, очень просто. Создание чего-то, что вам придется позже интегрировать в производственную систему, — это другое. Моему первому классификатору потребовалось так много времени, чтобы делать прогнозы, что в какой-то момент мой бот разбился. Иногда лучше иметь низкую точность, чтобы иметь большую скорость.

Где найти бота

Вы можете использовать бота с вашим приложением Telegram. Просто найдите @cadoo_bot или нажмите на эту ссылку: https://t.me/cadoo_bot. Вам все еще нужна учетная запись Telegram, чтобы использовать его :)