Казалось бы, эпоха BERT — уже в прошлом. Время принадлежит гигантам вроде GPT-4, Gemini и Claude, которые умеют генерировать тексты, рассуждать и даже писать код. Но исследователь Нэйтан Барри показал, что старый добрый RoBERTa может… стать генеративной моделью — без единого изменения в архитектуре.
Да, вы не ослышались: BERT — это просто один шаг текстовой диффузии.
🌫️ От маскировки к диффузии
Классическая BERT-парадигма строится на задаче Masked Language Modeling (MLM): часть токенов заменяется на <MASK>, модель должна восстановить их. Это обучает её понимать контекст во всех направлениях.
Но Барри задался вопросом: а что, если маскировать не одну фиксированную долю токенов, а случайную — от 0 % до 100 % — и делать это поэтапно?
📉 Тогда процесс «маскирования → предсказания → ремаскирования» превращается в дискретную диффузию — аналог генерации изображений в Stable Diffusion, только для текста.
Получается цепочка шагов:
🌀 Шаг 1: весь текст замаскирован — чистый шум (<MASK>).
💡 Шаг 5: модель начинает угадывать смысловые куски.
✨ Шаг 10: весь текст восстановлен — полное «денойзинг-заклинание».
Каждый шаг — итерация «очищения смысла», и если запустить RoBERTa в этом режиме, она начнёт порождать осмысленные тексты, а не просто восстанавливать слова.
🧩 Минимальный код — максимум инсайта
Эксперимент Барри — это пример гениальности в простоте. Он не трогал слои трансформера, не менял attention-механику, не внедрял decoder. Всё держится на кастомном data_collator в Hugging Face, который случайно выбирает процент маскировки при каждой итерации.
🧠 Главная идея:
- первые 16 токенов всегда сохраняются (контекст или «промпт»),
- остальные — частично маскируются,
- RoBERTa учится постепенно «додумывать» текст при разных уровнях шума.
Пример кода из статьи:
mask_prob = random.choice([1.0, 0.9, 0.8, ..., 0.1])
maskable = batch.input_ids[:, PREFIX_LEN:]
mask = torch.rand(maskable.shape) < mask_prob
batch.input_ids[:, PREFIX_LEN:][mask] = tokenizer.mask_token_id
⚙️ Для генерации:
- создаётся последовательность длиной 256 токенов,
- первые 16 — это подсказка, остальные <MASK>,
- модель проходит 10 циклов, на каждом шаге предсказывая часть токенов.
🕒 Время генерации — около 13 секунд против 9 секунд у GPT-2, но результат удивительно связный:
“Following their victory in the French and Indian War, Britain began to assert greater…”
— и дальше вполне осмысленный исторический фрагмент.
🔬 Почему это важно
На первый взгляд — просто академическое упражнение. Но если смотреть глубже, Барри фактически стер грань между BERT и GPT.
Раньше считалось, что BERT — это «понимающая» модель, GPT — «порождающая».
Теперь мы видим, что BERT-архитектура тоже может генерировать, просто делает это не слева направо, а итеративно — путём смысловой реконструкции.
🧩 BERT = один шаг диффузии
🧩 GPT = итеративное предсказание токенов
🧩 DiffusionLM = пошаговое восстановление смысла из шума
По сути, все они разные приближения одной и той же функции — аппроксимации распределения языка.
⚡ Технические детали
💾 Модель: roberta-base
📚 Датасет: WikiText-2
🧮 Длина блока: 256 токенов (из них 16 — контекст)
💻 Аппарат: Nvidia H200
⏱ Дообучение: 30 минут
📈 Результат: осмысленный текст, но уступает GPT-2 по когерентности и скорости
💭 Моё мнение
Меня особенно поразило, что никаких новых архитектур не понадобилось. Только изменённый collator — и классический BERT превратился в генератор текста. Это как если бы кто-то показал, что калькулятор умеет писать музыку, если нажимать кнопки с нужной частотой.
Такой подход открывает интересные перспективы:
💬 генерация с контролем семантической плотности,
🧠 гибриды типа “BERT-Diffusion-GPT”,
⚗️ и, возможно, новый класс генеративных моделей без декодеров — где весь текст рождается «одновременно» из смысла, а не токен за токеном.
🧭 Заключение
Эта работа — не просто хак, а мост между эпохами трансформеров.
BERT, забытый ветераном эпохи LLM, вдруг показал, что всё ещё способен удивлять.
Возможно, через пару лет мы увидим модели, где понятия маска, шум и генерация сольются в одно — а обучение станет не различием направлений, а искусством приближения смысла.
🔗 Источники: