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

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

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

В рамках хакатона «Цифровой прорыв», который прошёл 26–28 августа в Санкт-Петербурге, команда VK предложила участникам задание из собственной практики — построить ML-модель для предсказания целевого действия пользователя. В этой статье предлагаем вместе посмотреть и проанализировать подходы к решению кейса, которые предложили команды-победители. 

О кейсе 


Классическая задача бинарной классификации: за 48 часов разработать ML-модель, которая спрогнозирует вероятность совершения пользователем целевого действия в зависимости от его кликстрима. 

Команды должны были работать с неструктурированными текстовыми данными, собранными за определённый период: токенами, урлами, последовательностями кликстримов. При этом массив характеризовался низкой долей положительных объектов, а в данных встречались пропуски и зашумления. 

Для решения кейса участники хакатона получили доступ к Cloud ML Platform. В него входят готовая среда для ML-разработки JupyterHub и инструмент для управления жизненным циклом моделей ML Flow. ML Platform помогла командам справиться с обработкой больших объёмов данных даже на слабых ноутбуках. 

Команда VK предложила кейс с созданием интеллектуальной системы, поскольку решает задачи прогнозирования целевого действия пользователей для качественной кастомизации ленты в социальной сети. Нам хотелось посмотреть, какие подходы предложат участники. А ещё — поделиться идеями для экспериментов с коллегами по индустрии: все решения участников хакатона находятся в открытом доступе и могут быть полезны всем, кто создаёт основанные на ML-моделях системы.

Чаще всего для предсказания действий пользователя используется подход «мешок слов» — модель, в которой текст выглядит как неупорядоченный набор слов без структуры и грамматики. Рабочий паттерн, но у него есть недостаток — признаковое пространство становится огромным. Из 10 тысяч уникальных слов в выборку попадут все 10 тысяч, что делает алгоритм медлительным и тяжеловесным.

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

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

Подходы к решению задачи


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

Подход №1: глубокая предобработка данных


1. Подготовка данных. Транслитерацию перевели на родной язык. Очистили тексты от мусора. 

2. Перевод данных в эмбеддинги. С помощью предобученной библиотеки navic перевели токены в эмбеддинги. Navic выбрали из-за объёма и скорости: она в 10 раз быстрее и компактнее аналогов. Url_hashed также перевели в эмбеддинги с помощью word2vec, обученной на файле последовательностей. 

3. Добавление признаков. Сконвертировали текстовые данные в числовые, сохранив их смысл. Определили 1000 самых популярных слов в токенах и урлах. Выделили их в отдельные признаки, тем самым увеличив датасет. Выбрали и обучили модель. 

4. Выбор модели. Остановились на Catboost, которая поддерживает обучение с эмбеддингами и в целом хорошо себя зарекомендовала. Результат обучения — первая метрика в тесте.

Комментарий Максима Кулаева, руководителя команды разработки CRM-моделей, VK Predict:
 
«Это решение команды ITMEM, которое показало лучшую метрику в тесте. Ключевое здесь — детальная предобработка данных, которая позволила свести все слова к общему знаменателю. Например, если у вас есть токены «кот» и «сat», которые встречаются у разных пользователей, в результате предобработки они станут одним токеном. Количество признаков уменьшится, а информативность повысится. Именно это позволило команде увеличить эффективность работы алгоритма.

Ещё одно преимущество — использование предобученной модели. Она не ограничивается имеющимися данными, может учитывать больше слов и больший контекст — благодаря этому метрика растёт».

Подход №2: объединение фич — LaBSE Embeddings + SVD + Word2Vec + Latent Dirichlet Allocation


1. Эвристическое понижение размерности.

Подсчитали частотность слов и с помощью фильтра убрали некоторые наиболее редкие урлыи токены. Также для всех токенов и урлов подсчитали коэффициенты как отношение количества к их встречаемости в положительном и нулевом классах. Исключили те, которые встречаются сопоставимое количество раз в обоих классах. Это позволило сократить и повысить репрезентативность набора данных.

2. Векторные преобразования данных.

Преобразовали данные в векторы для обучения, используя различные методы. Например, получили эмбеддинги токенов при помощи Sentence Transformers: брали текстовые токены и для них получали эмбеддинги с помощью Distilrubert и LaBSE. 

Другой подход — обучили SVD на токенах и урлах, чтобы получить между ними взаимосвязь. После этого нашли средний эмбеддинг для токенов и urls_hashed и вывели среднее число для каждого конкретного случая.

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

3. Выбор и обучение модели.

В базовом подходе — BERT, CatBoostClassifier на текстовых фичах, CatBoostClassifier на TF-IDF — метрика составляла ~0,6. Команда решила объединить все эмбеддинги, работать с предобработанными репрезентативными текстовыми фичами, на которых обучался CatBoostClassifier, отобрать полезные фичи и построить модель на StratifiedKFold, что позволило добиться метрики ~0,72.

Комментарий Максима Кулаева, руководителя команды разработки CRM-моделей, VK Predict: 

«Решение команды „Московские зайцы" получило серебро. Их подход схож с решением первой команды, но итоговая метрика несколько ниже. Здесь также на первый план выходит использование предобученных моделей и эффективная обработка данных, которая позволяет снизить размерность признаков и из 10 тысячи слов сделать примерно 100 признаков».

Подход №3: Учитываем не только семантический контекст токенов, но и временную последовательность хэшей


1. Предобработка данных.

Так как данных было много, построили гистограмму, которая показывала частотный анализ встречающихся токенов. По выбранным трешхолдам отбросили самые редкие и самые популярные токены, сократив таким образом датасет.

2. Приведение к векторному типу данных.

Для токенов преобразовали в эмбеддинги токены из датасета. Для Hash использовали Sequence, чтобы учесть временной контекст и упростить подачу на вход word2vec.

3. Тематический анализ и добавление признаков.

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

4. Предсказание целевого действия.

В качестве модели для предсказания попробовали несколько моделей, из которых лучше всего себя показали LogReg и CatBoost. Для разнообразия фич сгенерировали тематические признаки для каждого пользователя с помощью LDA и BigARTM.

Комментарий Максима Кулаева, руководителя команды разработки CRM-моделей, VK Predict: 

«Решение команды Hack Into Your Soul выделяется использованием методов тематического моделирования. Тем не менее это всё ещё один из методов векторизации, при котором модель строится исходя из конкретной специфики. Вполне рабочий паттерн, но в рамках хакатона показалось, что у первых двух команд решения более сложные и интересные, поэтому у Hack Into Your Soul бронза».

Подводим итог


Хакатон — классическое соревнование с оценками и призами. Но с точки зрения дальнейшей жизни решений победителей в этом конкурсе нет. Каждый подход — гипотеза, которая в перспективе может быть проверена и внедрена в продакшен. Поэтому следующий этап — отбор идей для масштабирования на данных VK, проработки и адаптации. От всей души благодарим участников хакатона за эти инсайты, а ещё за атмосферу драйва и творческого полёта.

Вы тоже можете попробовать обучить свою модель с помощью ML Platform от VK Cloud. Сейчас открыто ее бета-тестирование — вы можете попробовать возможности ML Platform бесплатно.

Комментарии (0)