
Недавно ВКонтакте запустила новый формат контента — шопсы. Это публикации с карточками товаров или ссылками, по которым можно быстро оформить покупку. Формат появился не с нуля: в соцсети уже давно органически росла доля публикаций, где в кадре так или иначе фигурировали какие‑то товары. Однако не каждая такая единица контента способна стимулировать к покупке. Как выявить нужный и сделать так, чтобы человек видел не просто красивую картинку с товаром, а интересный, кликабельный и вовлекающий контент, который действительно ведёт к покупке? Ответ — в правильной разметке.
В этой статье расскажем, как мы искали оптимальное определение 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‑сценариев. Среди последних — не только привычные рекламные публикации, но и более креативные материалы, где продажа товара или услуги осуществляется через полноценный обзор, юмористический скетч или нетривиальный сторителлинг.