Монетизация, рекомендации и LLM в Авито: как всё работает?
Монетизация, рекомендации и LLM в Авито: как всё работает?

Монетизация, рекомендации и LLM в Авито: как всё работает?

29 июля, 202410 минут на чтение
1,2к

Сразу после Data Fest 2024 мы решили поговорить с несколькими руководителями Авито — спросить, как внутренние механизмы работают под капотом.

С нами согласились поговорить руководитель юнита рекомендаций Михаил Каменщиков, руководитель юнита эффективности монетизации Егор Самосват и руководитель разработки больших языковых моделей Анастасия Рысьмятова.

Data Fest 2024: как Авито внедряет технологии
Выделили важные тезисы, о которых рассказали ребята из Авито. Бонусом — прогулялись по офису компании.

Михаил Каменщиков, руководитель юнита рекомендаций

Фото здесь и далее: «Код Дурова»
Я работаю в Авито с ноября 2016 года. Изначально нас было 4 человека в отделе, сейчас уже около 20. Руковожу командой рекомендаций , отвечаю за продуктовую часть, но основное — это менеджмент команды и стратегическое планирование. Учился в Новосибирском Государственном Университете на мехмате. После универа ещё поработал в Новосибирске, переехал в Москву и перешёл в Авито.

— Расскажи, как работают рекомендации в Авито? Я частенько вижу то, чем никогда не интересовался — почему?

— Это не баг, а кросс-категорийные рекомендации — рекомендации, которые расширяют круг твоих интересов. Базово рекомендательные модели работают так, что они рекомендуют что-то похожее на то, что ты смотрел, и ничего другого. Есть даже проблема под названием filter bubble (пузырь фильтров), когда список твоих интересов формирует твою ленту, и ты не можешь вырваться из этого пузыря.

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

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

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

По истории действия пользователя модель предлагает ему микрокатегории, которые могут быть новыми или интересными для него. И в этих микрокатегориях мы показываем пользователю свежие объявления. Чем мельче разбиение, тем больше вероятность, что мы попадём во что-то нужное. Если сузить те же авто до года выпуска, марки и модели, то шанс попасть будет больше.

— На чём основываются кросс-категорийные рекомендации? На нейросетях?

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

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

Чтобы персонализировать рекомендации, нам нужна информация. А самая ценная инфа от пользователя — это история действий: Авито ежедневно логгирует 30 млрд событий. Есть модель, рекомендующая объявления, похожие на то, что искал пользователь. А есть другая, которая рекомендует то, что искали другие похожие пользователи. Модели выбирают из миллионов объявлений примерно тысячу подходящих, и после того, как мы выбрали тысячу объявлений, мы их дополнительно ранжируем ещё одной моделью.

— На основе чего Авито персонализирует рекомендации?

— Можно использовать интерес пользователя к чему-либо. Например, можно посмотреть интерес пользователя к локации объявления — то, насколько много совершал действий человек в локации. Допустим, человек совершил 90% действий в Москве, и 10% действий в Питере. Тогда его интерес к этим локациям будет 0,9 и 0,1 соответственно, и модель будет это учитывать при ранжировании. Ещё один пример: если человек выбирает только чёрные автомобили, то автомобили чёрного цвета будут в приоритете.

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

Мы используем статистику привлекательности объявлений — как часто их открывают или какая конверсия от просмотров к запросу контактов. Эти признаки не влияют на персонализацию, но влияют на то, чтобы привлекательные объявления попадали в топ. Если у объявления много просмотров и мало контактов, модель поймёт, что это кликбейт, и не выведет объявление в рекомендации.

Кстати говоря, поиски не влияют на рекомендации. Если вы просто сделаете поисковый запрос, рекомендации не изменятся, а вот если откроете объявление — это даст сигнал моделям.

— Как рекомендации остаются актуальными при таком большом количестве категорий?

— Конечно же, Авито отслеживает различные метрики. Если резко что-то изменилось в худшую сторону — значит, мы что-то сломали. Если мы раскатили хорошее нововведение, то мы увидим это на графике. Плюс есть автоматизированные алерты. И ещё очень полезно смотреть на своём примере рекомендации.

Я вот каждый день захожу на Авито и листаю ленту: во-первых, просто интересно, во-вторых, можно увидеть странные вещи, которые почему-то происходят. И это тоже источник продуктовых идей: что можно поменять, чтобы стало лучше.

— Какие планы по дальнейшему развитию?

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

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

Егор Самосват, руководитель юнита эффективности монетизации

Я работаю в Авито уже более года, отвечаю за алгоритмы под капотом монетизационных продуктов, в том числе за ML-модели. Рекламными технологиями занимаюсь уже более десяти лет.

— Расскажи про монетизацию на Авито. Как она связана с искусственным интеллектом?

— Искусственный интеллект применяется повсеместно в Авито — буквально каждый шаг пользовательского пути опирается на ML-модели. Поэтому в монетизации без них тоже не обошлось. Мы хотим показать наиболее релевантные объявления покупателям, чтобы продавец нашёл своего покупателя и покупатель нашёл своего продавца.

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

— Как поймать баланс между выручкой с объявлений и пользовательским опытом?

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

В теории, мы можем показывать только платные объявления, и выручка кратковременно поднимется, но опыт покупателей пострадает. А чтобы и компания, и пользователи были довольны, нам нужны алгоритмы, которые будут балансировать интересы и Авито, и продавцов, и покупателей.
Но это не значит, что без услуг продвижения вы останетесь незамеченными. Любое объявление найти возможно, но если есть продвижение, то найти его будет проще и быстрее.

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

— А как именно работает продвижение?

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

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

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

У аукционов две фазы. Первая — стадия allocation: все участники аукциона выставляют ставки, и система решает, какие объявления на какие места встанут. Это общая стадия для всех аукционов. Вторая фаза — payment, на которой решается, кто сколько заплатит. Она зависит от модели аукциона и влияет на поведение участников аукциона. Возьмём, например, аукцион первой цены, в котором платёж равен ставке: человек может попробовать поставить 10 или 5 рублей за просмотр. Если его объявление всё равно окажется на первом месте, то ему не захочется переплачивать и он захочет искать минимальную ставку, обеспечивающую победу в аукционе. Эту проблему решает аукцион второй цены — он берёт столько денег, чтобы объявление всё равно осталось на определённой позиции. Мы часть головной боли с участников аукциона сняли, и им становится проще выбирать ставку.

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

— Что Авито выбрал в итоге среди многообразия возможных механизмов продвижения?

— В Авито довольно много разных продуктов продвижения, которые под капотом использовали несколько разные механизмы. Например, в некоторых тестовых регионах запущен продукт, где рекламодатель выбирает процент с комиссии, который он готов заплатить за бронирование, и чем выше процент, тем выше будет объявление в выдаче. Этот продукт работал на аукционе первой цены.

Есть продукт с другой логикой: его задача обеспечить продвижение за бюджет, и в нём использовался VCG-аукцион (часто используется в рекламных технологиях), так как поверх него проще построить систему, которая автоматически выставляет ставки. Сейчас мы собираемся запускать новые продукты, возникло желание объединить все аукционы в один, чтобы цены на трафик между разными продуктами продвижения были сбалансированы.

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

Анастасия Рысьмятова, руководитель разработки больших языковых моделей

Я в Авито работаю чуть больше 5 лет. Раньше работала в отделе автомодерации — мы делали модели, чтобы находить нарушения в объявлениях и отзывах и не допускать их на платформу. С августа прошлого года я руковожу командой, которая занимается LLM (Large Language Model, большая языковая модель).

— Что такое LLM и зачем это нужно в Авито?

— Большие языковые модели предварительно обучены на огромных объёмах текстовых корпусов. LLM позволяют по данным генерировать текст, и с помощью этой технологии можно решать множество задач для бизнеса и пользователей. Можем генерировать заголовки объявлений, можем суммаризировать отзывы, подсказывать, как лучше поступить в той или иной ситуации, упрощать жизнь агентам поддержки, подсказывать им ответы, в каких-то случаях автоматизировать поддержку и общаться с пользователями за агента. По сути, LLM — технология, которая может быть полезна в разных областях Авито.

Например, недавно мы внедрили генерацию описания объявлений, пока доступно только в категории fashion, позже будет везде. Когда пользователь подаёт объявление, мы подсказываем текст описания, чтобы оно лучше продавалось. Это один из кейсов. Также мы внедрили модель на основе Mistral 7B, которая может извлекать параметры из объявления. Сейчас это используется, чтобы объединять объявления в мультиобъявления. Например, когда вы просматриваете товар, вы можете попасть на карточку, где будет сразу несколько объявлений. Внутри можно выбрать разный размер товара, цвет и другие параметры. И чтобы делать такие карточки внутри одного профиля, мы используем LLM. Это уже внедряется в продакшн, доступно во многих категориях: мягкая мебель, одежда, телефоны и так далее.

— Ты упомянула модель Mistral 7B, но как её адаптировали к русскому языку?

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

Чтобы наша модель лучше справлялась, мы дообучили её на большом объеме данных на русском языке, а ещё заменили токенизатор. Весь текст разбивается на токены, а LLM учится предсказывать следующий токен по контексту, который модель уже увидела. Как разбивать текст на токен — зависит от токенизатора.

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

Например, если взять русские тексты и токенизатор Mistral 7B, то в среднем в токене будет два символа. А если обучить свой токенизатор, то получится, что в одном токене будет чуть больше трёх символов. И это сильно влияет на скорость и качество работы модели. Собственно, мы нашли подход, при котором можно убрать старый токенизатор, поставить новый, и дообучить сеть так, чтобы она работала с новыми эмбеддингами, то есть, векторами преобразования одних данных в другие. Так, получили модель, которая работает в русском домене лучше, чем опенсорсные модели. Плюс получается быстрее за счёт того, что тексты упакованы в меньшее количество токенов.

— Какие планы по внедрению LLM в Авито? (если не секрет)

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

Авито — контентная площадка, мы точно будем интегрировать и дальше LLM. ИИ в Авито везде, и он развивался, постепенно охватывая разные этапы пользовательского пути, и для нас Gen AI / LLM — это эволюционная история развитии технологии.

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

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

29 июля, 2024

Сейчас читают

Редакция рекомендует

Картина дня

Свежие материалы

Свежие новости

Свежие материалы