18-19 августа компания Теле2 устраивала Хакатон по Data Science. Этот хакатон ориентирован на анализ диалогов техподдержки в социальных сетях, ускорение и упрощение взаимодействия с клиентами.
Задание не имело конкретной метрики, которую надо оптимизировать, задачу можно было придумать себе самому. Главное — улучшить сервис. В качестве жюри соревнования выступали директора различных направлений Теле2, а также знаменитый в Data Science сообществе Kaggle grandmaster Павел Плесков.
Под катом рассказ команды, занявшей 1 место.
Когда коллега предложил мне поучаствовать в этом хакатоне я согласился довольно быстро.
Мне была интересна тема NLP, а также имелись некоторые нейросетевые наработки, которые хотелось проверить на практике.
Организаторы хакатона заблаговременно разослали небольшие фрагменты датасетов, которые давали представление о том, какие именно данные будут доступны на самом мероприятии.
Данные оказались довольно грязными, в диалоги влезали посторонние тролли, не всегда было очевидно на какой именно вопрос отвечает оператор.
Стало понятно, что осуществить задуманную идею в отведенные 24 часа будет непросто, поэтому я взял на работе 1 день отпуска и потратил его на подготовку нейросети, которую хотел опробовать. Это позволило не тратить время хакатона на поиск багов, а сосредоточиться на применении и безнес-кейсах.
Офис теле2 находится на территории Новой Москвы в бизнес-парке Румянцево. Как по мне, добираться туда довольно долго, но впечатление бизнес-парк производит хорошее (за исключением ЛЭП).
ЛЭП на фоне бизнес-центра
Прямо у станции метро нас встретили организаторы, показали как пройти к офису. Само здание бизнес-центра занимает множество компаний, офис Теле2 располагается на 5 этаже. Участникам хакатона была отведена специальная зона внутри офиса, имелась кухня, зона для отдыха с PlayStation и пуфиками. Особенно порадовала скорость wi-fi, никаких проблем, свойственных массовым мероприятиям, не наблюдалось.
Завтрак
Реальные датасет, который предоставил Теле2 состоял из 3 больших CSV файлов с диалогами техподдержки: диалогов в социальных сетях, telegram и email. Всего суммарно более 4 миллионов обращений — то что нужно для обучения нейросети.
Что же собой представляла нейросеть?
Архитектура сети
В датасете не было никакой дополнительной разметки, которую интересно было бы попредсказывать, а решать хотелось supervised задачу. Поэтому решили попробовать предсказывать ответы на вопросы, уж как минимум простого чат-бота из такой модели сделать можно будет. Для этого выбрали архитектуру CDSSM (Convolution Deep Semantic Similarity Model). Эта одна из простых нейросетевых моделей для сравнивания текстов по смыслу, изначально была предложена в Microsoft для ранжирования поисковой выдачи Bing.
Суть ее в следующем: сначала каждый текст преобразуется в вектор с помощью последовательности convolution и pooling слоев.
Затем полученные вектора сравниваются каким-либо способом. В нашей задаче хороший результат дал дополнительный линейный слой, объединяющий оба вектора с сигмоидой в качестве функции активации. Веса сети, кодирующей предложения в вектора, могут быть как одинаковыми для пары текстов (такие сети называют сиамскими), так и отличаться.
В нашем случае вариант с различными весами дал лучший результат, так как тексты вопроса и ответа значительно отличались.
Попытка обучить сиамскую сеть
В качестве предобученных эмбеддингов использовали FastText c RusVectōrēs, он устойчив к опечаткам, которые часто встречаются в вопросах пользователей.
Для того, чтобы такую модель обучить, ее нужно тренировать не только на положительных, но и на отрицательных примерах. Для этого мы добавляли в обучающую выборку случайные пары вопросов-ответов соотношении 1 к 10.
Чтобы оценить качество на такой не сбалансированной выборке использовали метрику ROC-AUC. После 3 часов обучения на GPU нам удалось достичь значения 0.92 по этой метрике.
С помощью такой модели можно решать не только прямую задачу — выбирать подходящий ответ на вопрос, но и обратную — находить ошибки операторов, некачественные и странные ответы на вопросы пользователей.
Некоторые такие ответы нам удалось найти прямо на хакатоне и включить их в финальную презентацию. Как мне кажется, это произвело на жюри наибольшее впечатление.
Интересное применение можно найти также и векторному представлению текстов, которые сеть генерирует в процессе своей работы.
С помощью него можно можно искать аномалии в вопросах и ответах различными unsupervised методами.
В результате наше решение было хорошо принято как с технической точки зрения, так и с точки зрения бизнеса. Остальные команды, в основном, пытались решать задачу анализа тональности и тематического моделирования, поэтому наше решение выгодно отличалось. В итоге мы заняли 1 место, разъехались довольные и уставшие.
На фото (слева направо): Александр Абрамов, Констанин Иванов, Андрей Васнецов (автор) и Швецов Егор
Что еще почитать:
- Оригинальная статья про CDSSM от Microsoft Research
- Репозиторий с кодом решения хакатона
- Репозиторий, где я экспериментирую с разными сетями для сравнения текстов
Автор: generall