DSINSIGHTS Telegram 339
Предсказываем клики по данным Criteo

10 лет назад на Каггле проводилось соревнование по предсказанию кликов на рекламные слоты на сайтах пользователей на мобилках, организованное Criteo. С того момента прошло много времени, но датасет не утратил своей актуальности в среде адтеха и до сих пор служит бенчмарком для сравнения ML моделей, пресказывающих клики. Актуальный лидерборд архитектур можно найти на PapersWithCode

И сегодня мы разбирем одну из таких SOTA архитектур предсказания кликов FinalMLP

Что с данными?
Для начала разберемся, какие данные доступны для обучения. Criteo опубликовала данные с 7 дней трафика своих пользователей mobile web. Это примерно 340Gb данных. Все фичи поделены на 2 категории: пользовательские (user) и контекстные (publisher, инфа о сайте). Значения всех фичей анонимизированы. И собственно бинарный таргет о наличии/ отсутствии клика на рекламный слот.

Как работает?
Как заявлено в статье на Arxiv, архитектура FinalMLP состоит из следующих основных компонент

➡️ Feature Embedding Layer
Преобразуем разреженные признаки в плотный (dense) вектора. Категориальные признаки one-hot encod'им и перемножаем на обучаемую матрицу весов эмбеддингов. Числовые фичи бакетизируем и дальше обрабатываем, как категориальные. Multi-valued фичи (или те же списки, типа adomain) обрабатываем следующим образом: обрезаем списки длиной до средней длины k. Далее заводим эти фичи в one-hot вектора длины k и снова перемножаем на веса эмбеддинга.

➡️ Feature Selection Layer
Слой отбора признаков: оценивает важность признаков, понижает влияние зашумленных, усиливает значимые. Здесь используется т.н. gating-based feature selection, который выдает веса важности каждого признака, пропустив их через сигмоиду и умножив на 2. В итоге эти веса лежат в диапазоне 0..2. Далее они перемножаются с эмбеддингами фичей. Разбиваем фичи на 2 ветки на пользовательские и контекстные и прогоняем весь процесс отдельно на каждую ветку. Так мы получаем входы в MLP (персептрон) два потока.

➡️ Stream-Level Fusion Layer
Теперь нам нужно объединить эти 2 потока (пользовательский и контекстный). Вместо простого сложения или конкатенации в FinalMLP предлагают т.н. bilinear fusion. Если в двух слова, как это работает, то вектора с 2х веток пользовательских и контекстиных эмбеддингов разбиваются на k частей (голов). В каждой части применяется билинейное преоблазование. Далее результаты пропускаются через сигмоиду, чтобы получить вероятности.

Билинейное преобразование для одной головы записывается следующим образом

BF(o1, o2) = b + w1 * o1 + w2 * o + o1 * W3 * o2


Здесь
- w1, w2 - это веса модели для ветки o1, o2 соответственно
- W3 - это матрица билинейного преобразования (тоже обучаемая)
- b - intersect

Для k голов выходная вероятность запишется

proba_pred = sigma(sum_k(BF(o1i, o2i)))


Такой подход обработки признаков на два потока дает следующие преимущества по сравнению с классической табличной моделью, например тем же CatBoost'ом:
- Взаимодействие фичей задается с помощью отдельной матрицы W3, что дает возможность обучать более сложные зависимости
- В FinalMLP мы конвертируем все фичи в эмбеддинги, что особенно помогает в случае разреженных фичей

Далее мы разберем имплементацию FinalMLP на PyTorch и запустим ее с помощью либы FuxiCTR



tgoop.com/dsinsights/339
Create:
Last Update:

Предсказываем клики по данным Criteo

10 лет назад на Каггле проводилось соревнование по предсказанию кликов на рекламные слоты на сайтах пользователей на мобилках, организованное Criteo. С того момента прошло много времени, но датасет не утратил своей актуальности в среде адтеха и до сих пор служит бенчмарком для сравнения ML моделей, пресказывающих клики. Актуальный лидерборд архитектур можно найти на PapersWithCode

И сегодня мы разбирем одну из таких SOTA архитектур предсказания кликов FinalMLP

Что с данными?
Для начала разберемся, какие данные доступны для обучения. Criteo опубликовала данные с 7 дней трафика своих пользователей mobile web. Это примерно 340Gb данных. Все фичи поделены на 2 категории: пользовательские (user) и контекстные (publisher, инфа о сайте). Значения всех фичей анонимизированы. И собственно бинарный таргет о наличии/ отсутствии клика на рекламный слот.

Как работает?
Как заявлено в статье на Arxiv, архитектура FinalMLP состоит из следующих основных компонент

➡️ Feature Embedding Layer
Преобразуем разреженные признаки в плотный (dense) вектора. Категориальные признаки one-hot encod'им и перемножаем на обучаемую матрицу весов эмбеддингов. Числовые фичи бакетизируем и дальше обрабатываем, как категориальные. Multi-valued фичи (или те же списки, типа adomain) обрабатываем следующим образом: обрезаем списки длиной до средней длины k. Далее заводим эти фичи в one-hot вектора длины k и снова перемножаем на веса эмбеддинга.

➡️ Feature Selection Layer
Слой отбора признаков: оценивает важность признаков, понижает влияние зашумленных, усиливает значимые. Здесь используется т.н. gating-based feature selection, который выдает веса важности каждого признака, пропустив их через сигмоиду и умножив на 2. В итоге эти веса лежат в диапазоне 0..2. Далее они перемножаются с эмбеддингами фичей. Разбиваем фичи на 2 ветки на пользовательские и контекстные и прогоняем весь процесс отдельно на каждую ветку. Так мы получаем входы в MLP (персептрон) два потока.

➡️ Stream-Level Fusion Layer
Теперь нам нужно объединить эти 2 потока (пользовательский и контекстный). Вместо простого сложения или конкатенации в FinalMLP предлагают т.н. bilinear fusion. Если в двух слова, как это работает, то вектора с 2х веток пользовательских и контекстиных эмбеддингов разбиваются на k частей (голов). В каждой части применяется билинейное преоблазование. Далее результаты пропускаются через сигмоиду, чтобы получить вероятности.

Билинейное преобразование для одной головы записывается следующим образом


BF(o1, o2) = b + w1 * o1 + w2 * o + o1 * W3 * o2


Здесь
- w1, w2 - это веса модели для ветки o1, o2 соответственно
- W3 - это матрица билинейного преобразования (тоже обучаемая)
- b - intersect

Для k голов выходная вероятность запишется

proba_pred = sigma(sum_k(BF(o1i, o2i)))


Такой подход обработки признаков на два потока дает следующие преимущества по сравнению с классической табличной моделью, например тем же CatBoost'ом:
- Взаимодействие фичей задается с помощью отдельной матрицы W3, что дает возможность обучать более сложные зависимости
- В FinalMLP мы конвертируем все фичи в эмбеддинги, что особенно помогает в случае разреженных фичей

Далее мы разберем имплементацию FinalMLP на PyTorch и запустим ее с помощью либы FuxiCTR

BY ML Advertising




Share with your friend now:
tgoop.com/dsinsights/339

View MORE
Open in Telegram


Telegram News

Date: |

The Channel name and bio must be no more than 255 characters long How to build a private or public channel on Telegram? Developing social channels based on exchanging a single message isn’t exactly new, of course. Back in 2014, the “Yo” app was launched with the sole purpose of enabling users to send each other the greeting “Yo.” Among the requests, the Brazilian electoral Court wanted to know if they could obtain data on the origins of malicious content posted on the platform. According to the TSE, this would enable the authorities to track false content and identify the user responsible for publishing it in the first place. During a meeting with the president of the Supreme Electoral Court (TSE) on June 6, Telegram's Vice President Ilya Perekopsky announced the initiatives. According to the executive, Brazil is the first country in the world where Telegram is introducing the features, which could be expanded to other countries facing threats to democracy through the dissemination of false content.
from us


Telegram ML Advertising
FROM American