Привет! Я Сергей Кляхандлер, техлид в команде LLM Авито. В 2024 году мы разработали и выпустили ML-модель, которая автоматически генерирует описания для объявлений из категории «Одежда и обувь». В этом году автогенерацию усовершенствовали, а подход переиспользовали. Теперь мы можем создавать дополнительные ключевые слова для поиска.
О том, как работает наша модель, я рассказываю в тексте ниже. Статья будет полезна DS-инженерам, которые имеют дело с мультимодальными LLM-моделями.

Содержание:
Изменения в автогенерации описаний
Кратко напомню: автогенерация — это сервис в интерфейсе Авито, который помогает пользователю составлять более точные и полные описания. Продавец сначала заполняет характеристики товара, а затем нажимает кнопку «Создать автоописание» и получает готовый текст.
Первая версия сервиса содержала два недочёта: могла обрабатывать только одно фото и создавала слишком сухие тексты. Мы разобрались с обеими проблемами.
Подробнее про разработку автогенерации читайте в статье на Хабре: «Как мы разработали LLM-модель, которая генерирует описания товаров для пользователей Авито».
Пересобрали модель. Ранняя версия LLM — полносвязный трансформер. На входе энкодерная часть принимала и кодировала фото, а в декодер подавался промпт, чтобы сгенерировать описание. Устройство энкодера могло принимать только одно изображение, поэтому мы загружали в него главное фото объявления.
Что такое главное фото?
Обычно продавцы добавляют несколько фото с разных ракурсов, из которых выбирают главное — то, которое увидят покупатели в результатах поиска. Как правило, это фото самое информативное, поэтому для работы LLM выбрали именно его.
Один снимок не может полноценно показать товар, даже если он лучше других фотографий. Получалось, что часть информации с изображений терялась.
Чтобы разобраться с проблемой, явную трансформенную связь между энкодером и декодером разорвали. Система перестала использовать cross-attention, вместо этого изображения стали обрабатываться отдельно через image-encoder.
В экспериментах мы применяли image-башню модели CLIP, что помогло эффективно связать текст и изображения. Полученные эмбеддинги вместе с промптом отправили на вход в LLM. Теперь решение не перегружает модель, позволяет учесть все картинки из описания и не потерять информацию.

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

Изменение в модели мы разворачивали отдельным A/B-тестом в категории «Одежда и обувь». В итоге общее количество автогенераций выросло на 5,7%, а продавцы стали получать подходящее описание с первого раза на 10,8% чаще. Это значит, что обновление улучшило сервис, а пользователи это оценили.
Сейчас сервис работает в разделах «Одежда, обувь и аксессуары», «Детская одежда», а также в некоторых частях разделов «Хобби и отдых» и «Электроника».
Ежедневно через систему создают около 60 тысяч описаний, при этом success rate составляет 99,7%. Это значит, что пайплайн почти никогда не падает, а сервис работает стабильно.
Автогенерация описаний — не единственное, на что способна наша LLM. Мы выжали больше пользы из картинок: научили систему учитывать даже то, что не содержится в описании. И вот как это сделали.
Генерация ключевых слов для поиска
С этой идеей к нам пришла команда, которая развивает поиск товаров на Авито. Коллеги предложили генерировать в индекс дополнительные характеристики из фото, чтобы пользователи находили больше релевантных объявлений.
Проблема с неполными описаниями. Многие пользователи Авито начинают работу с сервисом через поиск: вводят запрос и получают список предложений. В перечень чаще попадают объявления с объёмными описаниями, поскольку подходят к большему количеству запросов и лучше индексируются. Такие товары обычно продают быстрее.
Если в описании характеристик не хватает, полнотекстовый поиск такие объявления не показывает, хотя они фактически подходят под пользовательские запросы. В результате товары с неполными описаниями продаются дольше, поскольку реже попадают в поле зрения покупателей.

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

Модель создавала набор слов, куда иногда попадали неудачные формулировки, например, «яркий принт», «красивый узор». Это описания подходили к любому товару, поэтому не годились для индексации. Чтобы избавиться от такого «мусора», мы стали следить за подобными неинформативными словами с помощью поствалидации и автоматически их удалять.
Всего через модель пропустили около 200 000 иллюстраций, создали наборы характеристик и отвалидировали их. Затем провели офлайн-тест. Собрали выборку из актуальных объявлений и пул поисковых запросов в категории «Одежда и обувь», а потом сделали два замера: стандартная работа поиска и такой же поиск, но с добавлением сгенерированных ключевых слов.
Результаты теста показали, что покупатель видел на 22% больше релевантных предложений. Это подтвердило, что механизм увеличивает полноту поиска и предлагает больше объявлений.
Реализация. Когда пользователь размещает объявление, информация об этом отправляется в шину данных. Модель принимает эти события на вход, читает и определяет, что произошло: создали новое объявление или обновили старое. Если новое, читает событие целиком, а если это обновление, проверяет, изменилась ли главная фотография. Если фото обновилось, запускается процесс генерации слов по новому снимку.
Главное фото скачивается в модель и векторизуется с помощью энкодера, затем картиночное представление передаётся в языковую модель, которая генерирует ключевые слова. Наконец, событие о создании новых слов отправляется в шину данных, а в redis сохраняются созданные слова по ID объявления.
Поисковый движок получает событие, что текст создан, затем берёт ключевые слова из redis и добавляет их в поисковый индекс.

Почему только одно фото
Система обрабатывает все объявления Авито в категории «Одежда и обувь», что составляет около 200 тысяч объявлений в день. Это большая нагрузка, поэтому мы скорим только одно главное фото. Обрабатывать все иллюстрации затратно и значительного прироста в качестве не даёт.
Когда система заработала, покупатели стали реже видеть пустые поисковые выдачи. Показатель упал на 3,5%. А количество уникальных пар покупатель-продавец повысилось на 0,8%. Получается, что мы смогли повысить разнообразие в сделках. Теперь покупателям легче найти подходящие товары, а большее количество продавцов быстрее реализуют товары.
Резюме
В 2024 году в Авито разработали LLM-модель, чтобы помочь пользователям создавать более информативные описания в своих объявлениях. В 2025 году это решение модернизировали:
Пересобрали модель, чтобы она могла анализировать все фотографии в объявлении, а не только одно.
Разобрались с излишне лаконичными описаниями — теперь сервис создаёт более живые тексты, которые легче читать.
Ещё мы переиспользовали это решение и адаптировали модель под новую задачу:
Нашли проблему, что некоторые объявления плохо индексировались из-за неполного описания.
Научили LLM создавать дополнительные ключевые слова по фотографиям и добавлять их в индекс.
Теперь покупатели в Авито могут находить больше подходящих объявлений, а продавцы быстрее продавать.
Как вам текущие улучшения LLM-модели? Что можно учесть в будущих итерациях? Пишите в комментарии.
А если хотите вместе с нами помогать людям и бизнесу через технологии — присоединяйтесь к командам. Свежие вакансии есть на нашем карьерном сайте.
elzvi
а у ваших мощностей есть фича — отказывать пользователю в фото, если она плохого качества или просто стрёмная?)