Привет! Эта статья посвящена синтетическим данным и тому, как сбор данных и их разметка изменились навсегда. Поговорим про мультимодальную синтетику (аудио и изображения), генераторы, валидаторы, примеры классных генераций, датасеты, роль LLMок в этих процессах и трансформацию привычных пайпланов в концепцию SynthOps, которая требует других подходов по работе с данными.
Я достаточно долгое время разрабатывал софт для разметки всего и вся любой сложности, рассказывал про то как LLMки пришли на замену (или помощь) людям в текстовых и мультимодальных данных, а потом позанимался генерацией разного роды синты.
Обо всем это и хочется рассказать.
Синтетика из чего-то редкого и экзотического очень быстро стала абсолютной нормой. По различным прогнозам ведущих AI-лабораторий мира, объем синтетики в обучающих датасетах будет не только сильно увеличиваться, но и часто становиться доминирующим.
У этого есть объективные причины: синтетика решает сразу несколько ключевых проблем — доступность данных, их разнообразие, скорость и качество. Кратко о каждом:
Доступность: иногда данные могут быть просто недоступны (закрытый контур высокотехнологичного производства, персональные данные и многое другое) или же быть очень дорогими (картинки до/после для CV-задач inpainting)
Разнообразие: для массовых технологий нам необходимо максимальное покрытие, что не всегда доступно. Например, сканеры лица должны поддерживать все возраста и национальности, аксессуары (типа очков) — и часто здесь возникает дисбаланс классов и перекос в какой-то из них. Здесь же — одиночные редкие событие или corner-кейсы, которые часто портят жизнь в реальном проде
Скорость: синтетика добывается гораздо быстрее, что сильно снижает time-to-market конечной технологии
Качество: часто исходные данные очень плохого качества. Например, интернет: при всем его огромном объеме по настоящему качественных данных в нем мало, и они достаточно точечные. А сколько в интернете уже некачественной синтетики?
Конечно, не стоит забывать, что в мире есть огромное количество качественной неоцифрованной инфы, например, архивы книг в библиотеках. Страшно представить, сколько там всего полезного, но это очень-очень трудоемкий (административно, денежно и просто человекоресурсно) процесс, который нужен и по силам далеко не всем.
Синтетика на пальцах
Часто про синтетику говорят, что она ломает модели, приводит к коллапсу через несколько итераций обучения или приводит к непредсказуемому поведению. Такая проблема действительно существует, но все очень-очень сильно упирается в детали. Для лучшего понимания стоит вообще ответить на вопрос — а что же такое синтетика?
Синтетика — это сгенерированные данные, которые по своей структуре и поведению не отличаются от реальных. Можно ли считать синтетикой то, что неотличимо от реальности? Когда НИКТО не может отличить или же мнения разделяются 50/50? Если синта «максимально идентична натуральному», то как она может что-то сломать?
Точнее, сломать-то она может, если мы все данные нагенерили либо плохо, либо одинаково, либо слишком идеально и в добавок еще и унаследовали все особенности, проблемы и весь алайнмент генератора. Но генерация хорошей синты — это как алхимия, нужно экспериментировать, смешивать, но при этом строго следить за метричками получаемого.
На самом деле, синтетику придумали совсем не в ML. Моя любимая аналогия — нагрузочное тестирование, знакомое, наверное, каждому в ИТ. Что такое нагрузочное тестирование? Это создание искусственной нагрузки, которая максимально похожа на то, с чем столкнется проект в проде. Фактически, любой нагрузочный тест это заливка синтетическими запросами нашего проекта — и чем лучше и качественнее будет проведено такое тестирование, тем лучше будет последующий итог.
С синтой все то же самое. Она требует к себе уважения.

Как генерировать синтетику
Глобально синтетику можно разбить на две части: генерация и имитация.
Генерация — когда мы, собственно, целиком с нуля создаем какой-то контент: текст, картинку, аудио или любой другой тип данных.
Имитация — когда в реальных условиях создаются искусственные данные. Например, когда роверы ездят на тестовых полигонах, когда актеры под камеру совершают некоторые действия (например, какое-то девиантное поведение или специально оставляют в кадре странные предметы) и так далее.
С имитацией все понятно — нужно просто хорошо готовиться и максимально трепетно исполнить процесс. Здесь достаточно сложный процесс создания данных и легкий процесс их пост-валидации (как правило, просто людьми).

Да, это реальные фотки, сделанный мной в процессе написания.
Генерация сложнее и интереснее. Фактически, такая генерация в ее широком смысле состоит из двух частей: генератора и сложного пайплайна пост-валидации сгенерированного.
Выбрать генератор — очень важно, от него будет зависить сложность всей остальной части. Генераторы условно можно разбить на следующие части:
Классические алгоритмы — это привычный LateX, генерация адресов, инструменты типа faker
Самодостаточный GenAI — например, генерация текстовых инструкций LLMками или картинок диффузией
Гибридный/дотюненный под задачу GenAI — случай, когда нам недостаточно моделей и надо придумывать что-то более сложное
Симуляторы — создание движков и игровых вселенных, которые эмулируют реальную жизнь и позволяют собирать всю необходимую телеметрию или данные в процессе
Как по мне, генерация текстовой синтетики — вопрос уже решенный. Да, там очень-очень много нюансов, но с такими мощными ллмками можно и сгенерировать и нафильтровать вообще все, что угодно. И если хочется глубоких деталей, то наши друзья-товарищи из китайских лаб в своих шикарных репортах квенов и дипсика показывают настоящий мастер-класс про текстовую синту.

Иногда бывает так, что под наш домен уже есть готовый генератор (какая-то специализированная на что-то нейронка), в таких ситуациях все упрощается.
Давайте посмотрим гибридные случаи, когда мы генерим более сложные данные, чем текст и LLMка нас очень сильно бустит в процессе. Когда я еще занимался генерацией синтетики, то мы пылесосили самые разные интересные кейсы и их анализировали. Углубляться в них не хочется, статья и так получается большой, но вот парочка разносторонних, которые позволяют по новому взглянуть на то, что можно выжать из LLM.
LLM бустит OCR
Есть такой малоресурсный язык, как пушту. У инженеров совершенно не было данных для обучения OCR и они проделали, как мне кажется, очень ловкий трюк, заслуживающий внимания.

LLMкой генерят самые разные тексты под предметную область
Генерят на основе этих текстов различные htmlки: разными шрифтами, разными фонами и так далее. Все тексты построково обводят рамочкой (просто border в css) — фактически эмулируют разметку через bbox
Конвертят html в pdf, натравливают на него стандартный OCR
Подменяют содержимое боксов внутри на исходное сгенерированное
...
SOTA!

Кайф? Кайф!
Я безумно кайфанул от инженерности подхода.
LLM+Voice
В генерации голоса есть большая проблема. Стандартно процесс генерации выглядит упрощенно так: находится диктор, ему даются текст на озвучку, он их озвучивает, а на полученном дообучается модель. Так вот проблема заключается в том, что голос, на самом деле, достаточно сильно меняется даже на небольшом промежутке времени и просто с тем же диктором перезаписать нужное спустя полгода превращается в большую боль. Опять же, спустя время не всегда есть доступ до диктора или у него есть желание что-то дозаписывать. И банально это просто дорого.
Здесь очень поможет синтетика. В качественно самого генератора можно взять хорошую TTS-модель, например, от eleven labs, которые просто великолепны. Они позволяют сгенерировать очень классные датасеты, а связка с LLM здесь нужна для того, чтобы сначала создать максимально полный и качественный текстовый датасет, а затем его озвучить моделью для генерации голоса.
LLM+Images
Мой любимый пример, который на момент написания этих строк потерял актуальность, потому что генеративные модели изображений улетели далеко вперед. Пример про то, что инженеры сгенерили полностью синтетически датасет людей, чтобы обучить модель для детекции 3D-меша головы. Модель заработала, а вот что было в датасете:

Почему кейс устарел? Потому что Nano Banana и последующие модели настолько хорошо понимают промпт и следуют ему, и так хорошо генерят картинки, что настолько заморачиваться уже и не нужно.

Так как видео — это фактически набор сжатых кодеком последовательных картинок, то буст в генерации тоже не за горами.
Но в данном кейсе важен именно подход и опыт. В оригинале модель для распознавания лица обучили на достаточно проклятых синтетических картинках, где было и по 8 пальцев и руки-ноги в самых неожиданных местах. Но важно было качественно сгенерировать именно голову. Здесь была контролируемая генерация: бралась исходная картинка, с нее снималась поза keypoints и общее описание, а затем все это перегенерировалось заново. Было нагенерировано 1М изображений, которые затем необходимо было сильно чистить.

И тут мы плавно перейдем к этой теме.
Чистка и валидация
Если мы правильно выстроили пайплайн генерации, то данных у нас становится очень много и их надо будет чистить. Чистка здесь — сильно отличается от чистки диких данных в привычных нам процессах, потому что любая генерация синтетики — контролируемая. А значит мы точно значем ЧТО мы хотим, а точнее, что мы НЕ ХОТИМ видеть в датасете. Если мы генерируем двух девушек в лесу, то мы можем точно выкидывать картинку по множеству условий:
На ней не два объекта human
На ней не девушки
Они не в лесу
......
А значит именно так и будет выглядеть наша чистка — мы разбиваем процесс на атомарные шаги и чистим-чистим-чистим. Это можно делать как специфичными под модальность инструментами (если они есть, например, yolo для картинок), так и VLM.
Большинство сгенерированного можно отфильтровать программными средствами, если правильно все выстроить. Но без ручной разметки на последнем шаге все равно не обойтись. Но тут важно сказать следующее:
Это будет уже не дикая разметка, а именно валидация: да/нет или же более сложный набор признаков (ответ полный, достаточный, интересный и так далее)
Если программно задрать фильтр качества высоко, то объем оценки сдвигается от миллионов к тысячам штук
А еще забавный факт из опыта — мы проводили много SBS (side-by-side) тестов сравнения вида «отличи где генерация, а где реальное» между чем-то сгенерированным (музыка/стихи/фотографии) и реальным данными и люди часто выбирали генерацию как реальное. Но потом узнавая, что выбрали синту, многие начинали переобуваться, что «да понятно же было, не то выбрал», «ну мне так показалось, а так-то я отличу». Такой вон интересный факт. Часто синта неотличима человеку и это позволяет ее на полную катушку использовать.
Ну и отдельного слова залуживают такие генераторы, как игры, вселенные или симуляторы. Игры типа GTA могут быть отличными источниками данных для реального мира, например, есть датасет для детекции пешеходов или лидарный датасет на основе скринов из GTA.

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

Переход на синту и контролируемую генерацию смещает процесс с ETL и разметки на сначала очень инженерную генерацию — когда необходимо играться и подбирать такие условия, которые приводят к крутым неотличимым данным. Сначала именно добиться крутой генерации.
А как только начинают получаться хорошие результаты, требуется сложная многоступенчатая валидация и чистка, но она другая, потому что мы знаем исходные условия наших данных. И в конце — финальная разметка, которая тоже другая.
Все это приводит нас к концепции, которую я назвал SynthOps, а именно, создание инфры для генерации синтетики. Здесь очень важно иметь доступ ко многим LLM, уметь строить сложные пайплайны их взаимодействия, иметь возможность запускать самые разные нейронки вообще (в качестве генераторов и валидаторов).
LLMки же не просто забустили генерацию текста, они сделали это для всех типов данных, затронув каждый уголок пайплайнов.

Если раньше разметка (в ее широком смысла) была чем-то ручным, то сейчас это высокотехнологичная штука на стыке инженерии и анализа данных и где без множества gpu с умением орудовать модельками уже никак.
Для себя мы придумали несколько глобальных паттернов, но прокомментирую я их очень поверхностно, потому что где-то в этот момент я окончательно увлекся ии-агентами, это стало моей большой любовью и привело к новым проектам.
Паттерны SynthOps
Template-Driven Fabric — мы подготавливаем общий шаблон типовой задачи, после чего на него накладывается доменная адаптация и конкретные требования
Progressive Lego — задача по генерации разбивается на несколько простых и базовых составляющих, проверяется каждая из них, после чего собирается общий процесс и происходит умная сборка уже его
Adaptive Loop Pattern — множественные прогоны через определенные фильтры с сохранением обратной связи по каждому из них и наслоением на каждый следующий прогон
Multi-Roles — выстраивание цепочки LLM/VLM-вызовов так, чтобы они в цикле проверяли и комментировали себя. Фактически, это зачатки мультиагентности по разметке, когда каждый айтем проходит по разным функциональностям и в конце приниматся финальное решение
Финальные выводы
Как любят говорить, данные — новая нефть. Но в случае с такими возможностями генерации синтетики, нефть фактически уже бьет фонтанами из земли и передает цепочку ценности не на просто ее наличие, а на качественную переработку и доведение до нужных потребителей. Синтетика — классная штука. И мы можем делать ее контролируемо (bias, quality, noise), снижая time-to-market продуктов и зависимость от доступности данных.
Данные не кончатся, их все можно сгенерировать. Ну, или почти все. На момент написания статьи — очень и очень многое, а мы живем в такое время, что даже то, что кажется невозможным сегодня, через год становится обыденностью.
Спасибо!
Подписывайтесь на мой небольшой канальчик Agentic World, который посвящен агентам, LLM, AI и просто людям. Буду очень рад вашей подписке ?
Мои другие статьи:
Порулить браузером через LLM: пишем AI-агента в стиле «browser-use» на ванильной LLM без фреймворков
Как я автоматизировал мониторинг цен своей корзины на маркетплейсах и при чем тут LLM