Недавно ВКонтакте запустила новый формат контента — шопсы. Это публикации с карточками товаров или ссылками, по которым можно быстро оформить покупку. Формат появился не с нуля: в соцсети уже давно органически росла доля публикаций, где в кадре так или иначе фигурировали какие‑то товары. Однако не каждая такая единица контента способна стимулировать к покупке. Как выявить нужный и сделать так, чтобы человек видел не просто красивую картинку с товаром, а интересный, кликабельный и вовлекающий контент, который действительно ведёт к покупке? Ответ — в правильной разметке.

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

Материал подготовили Святослав Васильев, менеджер продукта ВКонтакте, и Кирилл Мамонов, руководитель предиктивной аналитики AI VK.

Что такое shoppable-контент 

Когда мы только взялись за тему, быстро выяснилось: есть разные подходы к пониманию, что считать shoppable‑контентом. Вроде бы термин уже давно на слуху, но границы у него размытые. В одних кейсах люди считали shoppable только то, где прямым текстом написано «Купить сейчас» и стоит большая кнопка — подход максимально формальный и безопасный. В других — наоборот, даже простой, но информативный текст вроде «тест‑драйв новинки, вот ссылка на сайт» уже выглядел как «продающий». А кто‑то полагал, что важнее не форма, а содержание — если материал вовлекает и рассказывает про товар или услугу так, что человек готов пойти и купить, значит он shoppable даже без CTA.

Мы зафиксировали три основных подхода:

  • Ориентир на формальные признаки: есть ли в тексте call‑to‑action, хоть какой‑то. Остальное мало учитывается: картинка, объяснения — вторичны. Если есть кнопка — это shoppable.

  • Проверка верхнеуровневых признаков коммерции: сделана ли публикация от имени бизнес‑сообщества, есть ли упоминание товара (в широком смысле или через обзор).

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

Каждый из подходов хорош для своих целей, но ни один не был достаточен для масштабной автоматической разметки. У первого слишком жесткие правила, и он пропускает половину интересных, но «мягких» кейсов. У второго подхода слишком ручной и ограниченный процесс и много субъективности. У третьего — наоборот, много смысловых оттенков, что впоследствии сложно как‑то масштабировать.

Мы оценили все сильные и слабые стороны и вывели рабочее определение: shoppable — это контент, где одновременно есть явный CTA и достаточный контекст, чтобы принять решение о покупке. Почему оба условия? Потому что CTA без объяснения не работает: «Купи» под фотографией абстрактного предмета — бессмысленно. Но и просто описание товара без призыва — это больше образовательный контент, а не продающий. Важно сочетание.

На этом этапе мы уже пошли глубже и стали формализовывать, какие именно элементы мы хотим «видеть» в shoppable единице.

Это не только текстовый призыв или кнопка, но и:

  • наличие цены (или ссылок на оффер с ценой);

  • прямое упоминание названия модели или услуги;

  • информация о том, где и как купить;

  • обзор с явным коммерческим уклоном (не просто «мне понравилось», а «вот где взять»).

Отдельная сложность — мультимодальные форматы, где CTA зашит в видео или аудио, или спрятан в карусели картинок. Здесь уже нельзя смотреть только на текст — приходится учитывать семантику всего объекта целиком.

Для начала мы поставили цель посчитать масштаб: какой объем shoppable контента вообще уже есть ВКонтакте. Затем разметить не только новый поток, но и исторический архив (это важно, чтобы быстро обучить модель на больших данных). И наконец — найти и выделить креаторов, которые стабильно делают контент с коммерческим потенциалом, чтобы предложить им инструменты продвижения.

Как работает классификатор

Мы сразу разбили признаки на два уровня: явные (есть кнопка, ссылка, цена, призыв купить) и косвенные (жанровые паттерны, контекст). Плюс отдельные блоки для каждого формата: посты, клипы и длинные видео устроены по‑разному и требуют разной логики.

Инструкцию валидировали на десятках тысяч примеров. Потом по ней собрали так называемый golden sample — эталонную выборку из 5000 размеченных вручную единиц контента. На потоке, конечно, руками так делать невозможно — слишком медленно и затратно. Эту выборку мы использовали, чтобы оценить качество разметки LLM и VLM‑моделями по имеющейся инструкции. После того как LLM размечает обучающую выборку, мы учим на этой разметке уже легковесную модель. В прод мы отправляем именно её. Почему не LLM? Потому что она тяжёлая, медленная и съедает много железа — на миллионах айтемов, которые ежедневно публикуются ВКонтакте, это неприемлемо. Легковесная же (у нас это Catboost) способна держать поток в режиме реального времени.

Пайплайн устроен так:

  • LLM размечает большие сэмплы (по необходимости, итерационно);

  • на них обучается легковесная модель;

  • все новые айтемы проходят через легковесную модель;

  • контроль качества поверх — или LLM, или человек, в зависимости от сложности формата.

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

Сейчас этот пайплайн уже в проде и инференс был произведен на историческом массиве контента с 1 января 2025-го. В цифрах это выглядит так: precision больше 95%. Чтобы мониторить качество модели мы подключили ручной контур валидации. Люди размечают спорные примеры, в которых не уверена модель и возвращают их в обучение. Таким образом улучшается ее качество и работает паттерн active learning.

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

Из ручной разметки мы поняли, что не каждый контент можно назвать shoppable, например:

  • юмористические видео, где товар есть, но весь посыл построен на иронии, без призыва;

  • DIY, где упоминание товара предельно ненавязчивое и больше похоже на рекомендацию;

  • личные мнения и обзоры без ссылки, кнопки и явной цены, но всё‑таки с понятным «что это и зачем».

Почему форматы такие разные

Мы не можем подходить к постам, клипам и длинным видео одинаково.

Клипы — мультимодальные по определению: там картинка, текст и звук. LLM и VLM‑модели, на которые мы опираемся в подготовке, не умеют обрабатывать звук напрямую. Решили так: аудиодорожку прогоняем через speech recognition и превращаем в субтитры. Видеоряд нарезаем на кадры и выбираем ключевые. В итоге в LLM попадает текст, а в VLM визуальный ряд — они работают как с «плоским» документом, но с сохранением смысла. 

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

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

Посты — самое непростое. Там может быть микс форматов: мемы с комментарием, картинка без подписи, описание товара с шуткой, клипы, альбомы. Нужно учитывать и язык, и визуальный ряд, и жанр. Из‑за мультиформатности там требуется больший комплекс моделей на каждый формат контента. 

Чего уже достигли и что в планах?

Теперь у нас есть чёткая картина: где именно shoppable‑контент концентрируется, какие паттерны в нём повторяются и как часто авторы пользуются CTA.

Дальше — плотная работа над масштабированием. Мы уже расширили классификацию, добавив поддержку длинных видео: работать с часовыми лекциями куда сложнее, чем с короткими клипами — нужно вычленять семантически важные фрагменты, а не гонять по модели целый видеоряд. Следующий шаг — модель, которая различает, что продаётся: товар или услуга. Параллельно ведётся агрегация по авторам: если за месяц у создателя много таких публикаций, это дает сигнал нашим рекомендательным алгоритмам считать такого креатора «shoppable‑автором» и предлагать дополнительное продвижение. На сегодня таких авторов уже сотни тысяч, а сообществ — ещё больше.

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

Запуск LLM‑разметки дал интересный побочный эффект: модель помогла поймать редкие и нестандартные кейсы, которые не покрывались первоначальной инструкцией. Мы корректируем правила, дообучаем классификатор и закрываем такие сценарии. Благодаря этому методология постоянно эволюционирует, а качество детекции растёт.

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

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