Веб-сервис для аналитики текстовых комментариев
Участники проекта
Руководитель
В малом и среднем бизнесе в сфере обслуживания часто бывает полезно анализировать клиентские отзывы. Если клиентов много, читать все отзывы сложно. Значит, возникает необходимость в использовании автоматических методов анализа данных, в том числе основанных на нейронных сетях.
Суть проекта и команда
Вместе со мной в команде были Саша Илларионов, Артур Лисс, Василий Алексеев и Ярослав Кубанцев. Мы разрабатывали веб-сервис для анализа и генерации текстов. Задача генерации текстов в заданной тональности была нам интересна потому, что это в теории позволяет генерировать «обобщённое» мнение об организации. Для большей определенности мы рассматривали отзывы на рестораны из датасета Yelp. Каждый из нас параллельно занимался своей подзадачей, а потом мы должны были связать некоторые модули друг с другом и интегрировать все в один проект.
Наш проект заочно курировал Валерий Бабушкин, Алексей Озёрин — на первой неделе и Александр Сахнов — на второй неделе. Мы выполнили проект в рамках двухнедельного практикума для студентов-разработчиков от «Сириуса», Яндекса и Высшей школы экономики.
Ход работы и технологии
Саша занимался анализом тональности отзывов, Василий и Артур работали над модулями генерации, а Ярослав отвечал за обработку данных. Мне досталась задача классификации пар отзывов. Нужно было научиться определять, насколько вероятно то, что два отзыва относятся к одному ресторану. Например, комментарии «В этом заведении подают вкуснейшие куриные крылышки» и «Пожалуй, это лучший ресторан вегетарианской кухни в городе», скорее всего, относятся к разным заведениям. Основываясь на релевантности пар отзывов, можно определить функцию похожести заведений и искать или рестораны, похожие на какой-то другой, или, наоборот, наиболее необычные и уникальные.
В качестве обучающей выборки я использовал датасет Yelp. Для каждого ресторана было известно множество отзывов к нему. На основе этих данных я написал генератор, выдающий «на лету» пары комментариев и метку — относятся ли они оба к одному заведению или нет.
На весь проект отводилось всего две недели, поэтому у нас не было времени придумывать принципиально новые архитектуры нейронных сетей для своих задач. Для задач классификации мы лишь адаптировали архитектуры, которые использовались ранее в конкурсах на Kaggle, а для задач генерации — те, что предлагались в исследовательских статьях. Мне удалось подобрать неплохую архитектуру на основе LSTM-сети с механизмом внимания (attention) и обучить модель, которая давала более высокие результаты, чем при случайном предсказывании.
После того, как модель была обучена, я подготовил API для работы с запросами пользователей. Затем мы собрали все модули в один веб-сервис.
Результат
Для меня это был первый опыт активной работы в команде. На тот момент я плохо знал, как работают нейронные сети, а, работая над проектом, я стал разбираться в них лучше. Также было интересно и полезно довести собственный проект до конца и поработать над интеграцией моделей машинного обучения в веб-сервис.