Технический разбор модели, которую в телеграме продают как «Claude без цензуры»
В моей ленте недавно завирусился пост: якобы кто-то «дообучил Qwen 3.5 до уровня Claude 4.6 Opus, убрал цензуру через Heretic и получил настоящего монстра». Звучит сенсационно. Я зашёл на HuggingFace, открыл карточку модели и провёл вечер, разбираясь, что там реально под капотом.
Спойлер: внутри много интересной техники, но к Claude эта модель имеет такое же отношение, как кроссовки с надписью «Adibas» к Adidas. Ниже расскажу, что действительно сделал автор, что такое abliteration и Heretic с инженерной точки зрения, и как читать названия файнтюнов на HuggingFace, чтобы не вестись на маркетинг.
Что заявлено и что на самом деле
Полное имя модели: Qwen3.5-21B-Claude-4.6-Opus-Deckard-Heretic-Uncensored-Thinking. Автор — DavidAU, известный в сообществе мерджер моделей.
Пройдусь по каждой части имени и переведу её на технический язык.
Qwen3.5 — базовая модель от Alibaba Cloud. Это open-weights LLM, всё честно.
21B — заявленное число параметров. Но базовый Qwen3 идёт в размерах 0.6B, 1.7B, 4B, 8B, 14B, 32B, 235B. Размер 21B — это не оригинальный размер семейства. Получают его через depth upscaling: берут модель меньшего размера (обычно 14B) и склеивают слои так, чтобы общее число параметров выросло. Метод известный, описан в статье SOLAR 10.7B от Upstage. Работает, но никаких «новых знаний» добавить не может — это просто архитектурная манипуляция с весами, которые уже есть.
Claude-4.6-Opus — а вот это самая интересная часть имени. К Claude отношения никакого нет. Веса Claude закрытые, Anthropic их не публикует. Что реально стоит за этой надписью: автор файнтюнил Qwen на синтетическом датасете, который сгенерирован запросами к Claude. То есть модель не «дообучена до уровня Claude», она дообучена на ответах Claude. Это distillation в самом простом смысле — попытка заставить ученика имитировать стиль учителя через обучение на его выходах. Качество такого подхода зависит от объёма и качества датасета, и обычно даёт улучшение в стиле и форматировании, но никак не повторяет capabilities исходной модели.
В тегах модели видно отсылку к датасету TeichAI/claude-4.5-opus-high-reasoning-250x — судя по всему, оттуда и пришло «Claude 4.6 Opus» в названии.
Deckard — отсылка к персонажу Филипа К. Дика, тег указывает на датасет DavidAU/PkDick-Deckard-5-Datasets. Это файнтюн на текстах в стилистике Дика для творческого письма. К capabilities не имеет отношения, влияет только на стиль вывода в художественных задачах.
Heretic-Uncensored — здесь применили abliteration. Это технический процесс снятия отказов модели на «опасные» запросы. Подробнее ниже.
Thinking — модель умеет генерировать reasoning-цепочки в тегах <think>...</think>, как DeepSeek-R1 и OpenAI o1. Это либо встроено в базовый Qwen3 (он действительно поддерживает thinking-режим), либо допилено через файнтюн.
Итого реальное описание: depth-upscaled Qwen3 14B → файнтюн на синтетических данных от Claude → файнтюн на художественных текстах → abliteration через Heretic → пакетирование с поддержкой thinking-режима.
Звучит уже не так громко, правда?
Что такое abliteration с технической точки зрения
Это самая интересная часть всей истории, и здесь стоит остановиться подробно.
В декабре 2023 года команда исследователей (Arditi, Obeso, Syed et al.) опубликовала работу, которая позже легла в основу статьи в NeurIPS 2024 — «Refusal in Language Models Is Mediated by a Single Direction». Идея простая, но красивая.
Когда современная LLM получает запрос, нарушающий её guidelines, она генерирует отказ. На уровне архитектуры это значит, что в какой-то момент в residual stream трансформера активируется паттерн, который смещает распределение выходных токенов в сторону «I cannot help with that». Авторы показали, что в большинстве моделей этот паттерн представляется одним конкретным направлением в пространстве активаций — refusal direction.
Алгоритм его поиска такой:
-
Берёшь набор harmful-промптов (которые модель отклоняет) и harmless-промптов (которые она выполняет).
-
Прогоняешь оба набора через модель, снимаешь активации residual stream на каждом слое.
-
Считаешь среднее активаций для harmful и harmless отдельно. Разница векторов — это и есть refusal direction. Дальше — самое интересное. Можно либо инвертировать это направление при инференсе (steering), либо перманентно убрать его проекцию из весов модели. Второй метод и называется abliteration. Технически это weight orthogonalization: для каждой матрицы весов, которая пишет в residual stream, проецируется и вычитается компонента вдоль refusal direction.
Псевдокод выглядит так:
def abliterate_weight_matrix(W, refusal_dir): """Убирает проекцию весов на направление отказа.""" # refusal_dir должен быть нормализован refusal_dir = refusal_dir / refusal_dir.norm() # Проекция каждой строки W на refusal_dir projection = W @ refusal_dir.unsqueeze(-1) * refusal_dir # Вычитаем проекцию из исходных весов return W - projection # Применяется ко всем матрицам, пишущим в residual:# attention out_proj, MLP down_proj, embed_tokens, etc.for layer in model.layers: layer.self_attn.o_proj.weight.data = abliterate_weight_matrix( layer.self_attn.o_proj.weight.data, refusal_dir ) layer.mlp.down_proj.weight.data = abliterate_weight_matrix( layer.mlp.down_proj.weight.data, refusal_dir )
После такой операции модель физически теряет способность активировать отказ, потому что соответствующее направление в её представлениях стало нулевым.
Heretic — это инструмент, который автоматизирует весь этот пайплайн. По сути, обёртка над методом Arditi с удобным API: загружаешь модель, даёшь два набора промптов, получаешь модифицированные веса. На GitHub достаточно много форков и реализаций.
Важный нюанс. Abliteration — не безболезненная операция. Удаление направления из весов сужает пространство представлений модели, что сказывается на общем качестве. Замеры на open benchmarks (MMLU, GSM8K, HumanEval) обычно показывают просадку на 1–5% после abliteration. Для chat-сценариев это незаметно, для математики и кода — заметно.
Ещё момент: abliteration снимает только те отказы, которые завязаны на найденное направление. Если отказ реализуется через другой механизм (например, distribution shift в специфических контекстах), он останется. Поэтому «Uncensored» в названии — это маркетинг. Точнее было бы «Refusal-direction-orthogonalized», но для громкого имени не подходит.
Что не так с примером, который автор сам поместил в карточку
Автор в карточке модели приводит длинный пример: модель отвечает на запрос про «10 способов использовать ночное радиационное охлаждение для климатической митигации». Развёрнутый ответ с таблицами, формулами, ASCII-диаграммами.
И вот тут начинается интересное. Я физик не профессиональный, но школьную программу помню. Что я увидел в выводе модели:
В блоке <think> модель пишет: «The Stefan-Blackmann-Weinmann equation relates radiated power: P = εσC(T² − T²)».
Это выдумка. Уравнение Стефана-Больцмана, которое описывает излучение абсолютно чёрного тела, выглядит так: P = εσAT⁴. Степень — четвёртая, не вторая. Никакого Вайнмана в названии нет. Площадь обозначается обычно A, не C. Само выражение T² − T² тождественно равно нулю — модель явно пыталась написать что-то вроде (T₁² − T₂²), но потеряла индексы и не заметила.
Дальше модель приводит численные значения:
«σ = Stefan-Blackmann constant (2.378 × 10⁻³ K⁻³)»
Реальное значение постоянной Стефана-Больцмана: 5.670 × 10⁻⁸ Вт/(м²·К⁴). Размерность — четвёртая степень Кельвина в знаменателе и метр в квадрате в числителе, потому что закон Стефана-Больцмана даёт мощность с единицы площади. У модели в ответе всё неправильно: и значение, и порядок, и размерность.
Дальше идут таблицы с показателями эффективности и капитальными затратами. Числа выглядят правдоподобно, но при ближайшем рассмотрении не сходятся между собой. Например, в одной таблице сказано «Annual savings: 50,000–70,000» для аналогичной площади. Разница в 600 раз без объяснения.
В разделе про географическую применимость в одной строке указан «Arctic» с потенциалом 20–40 W/m², в этой же таблице помечено (A) рядом с десертом и Арктикой одновременно — модель просто скопипастила обозначение.
Это типичные галлюцинации LLM, ничего нового. Но критично здесь не то, что модель ошибается — все модели ошибаются. Критично, что автор разместил именно этот вывод как демонстрацию возможностей своей «Claude 4.6 Opus». Если такая планка показывается как лучший пример работы — реальный уровень модели я бы оценивал ниже базового Qwen3 14B.
Почему 21B параметров — это не «улучшение»
Вернусь к depth upscaling, про который писал в начале. Метод выглядит примерно так:
# Берём базовую модель с 24 слоямиbase_model = load_model("Qwen3-14B") # допустим, 24 transformer-блока # Создаём расширенную версию через дублирование слоёвupscaled_layers = []upscaled_layers.extend(base_model.layers[:16]) # первые 16 слоёв как естьupscaled_layers.extend(base_model.layers[8:24]) # слои 8-24 копируем# Получили 32 слоя, число параметров выросло пропорционально
После такого «расширения» модель работает, но качество без файнтюна сильно падает — границы между склеенными блоками рвут информационный поток. Поэтому upscaled-модели всегда требуют дополнительного continued pretraining на больших объёмах данных.
В случае с этой моделью я не нашёл в карточке информации о том, проводился ли continued pretraining после upscaling, или сразу пошёл файнтюн на узких датасетах. Если второе — это значит, что модель технически «толще» базового Qwen3 14B, но работает скорее всего не лучше. Лишние параметры просто занимают видеопамять.
Эмпирическое правило для такой техники: SOLAR 10.7B действительно работал лучше базы благодаря качественному continued pretraining от Upstage. Большинство любительских франкенмерджей — нет.
Как читать имена моделей на HuggingFace
Раз уж разобрали этот случай, расскажу про практическую сторону: как не вестись на маркетинговые названия в открытой экосистеме.
Признак 1: Имя называет проприетарную модель. Если в названии файнтюна Llama или Qwen есть «GPT-4», «Claude», «Gemini-Pro» — почти всегда это значит, что модель обучали на ответах этой проприетарной системы, а не «достигли её уровня». Веса GPT-4 и Claude закрыты, технически воспроизвести их невозможно.
Признак 2: Преувеличенный размер параметров. Размеры, которые не входят в стандартный модельный ряд семейства (например, 21B для Qwen3), почти всегда получены через upscaling или франкенмердж. Это не плохо само по себе, но и не «улучшение».
Признак 3: Стопка хайповых тегов. «Uncensored-Thinking-Reasoning-Coding-Creative-Writing-AGI» — чем больше способностей перечислено в имени, тем меньше вероятность, что модель действительно сильна в каждой из них. Узкие файнтюны обычно хорошо работают на одном-двух доменах и теряют качество на остальных.
Признак 4: Отсутствие бенчмарков. Серьёзные модели публикуют замеры на стандартных бенчмарках (MMLU, ARC, HellaSwag, GSM8K, HumanEval). Если в карточке только «WARNING: This model has character and intelligence», это маркетинг.
Что стоит проверять перед использованием:
-
Лицензию (apache-2.0 — ок, AGPL — внимательно к коммерческому использованию).
-
Дату обновления (живой проект, заброшенный, разовая публикация).
-
Раздел Community для сообщений о проблемах от пользователей.
-
Файлы конфигурации
config.json— там видно реальную архитектуру и число слоёв. -
Размер safetensors-файлов — позволяет оценить, действительно ли там заявленное число параметров.
Где такая модель реально применима
Несмотря на всю критику, у подобных файнтюнов есть законная ниша. Назову прямо.
Художественное письмо без ограничений. Если вы пишете тёмное фэнтези, нуар, боевик с насилием — стандартные коммерческие модели часто отказываются работать со сценами, которые в литературе абсолютно нормальны. Файнтюны с abliteration этого ограничения лишены. Качество стилистики у них обычно посредственное, но как генератор черновиков для последующей правки — рабочий вариант.
Локальный inference без облака. Для людей, которым принципиально, чтобы запросы не уходили на серверы Anthropic или OpenAI, локальные модели с GGUF-квантизацией под llama.cpp — единственный путь. Тут Qwen3 в любом виде лучше, чем ничего.
Эксперименты с reasoning-режимом. Поддержка <think> тегов — это интересная фича, которую можно изучать локально без оплаты API.
Чего я бы не делал с такой моделью:
-
Не использовал бы для задач, требующих фактической точности (как видно из примера про физику, галлюцинации серьёзные).
-
Не стал бы её рекомендовать тем, кто ищет «бесплатную замену Claude» для рабочих задач — этой замены не существует ни в каком виде.
-
Не стал бы доверять reasoning-выводам для математики или кода без проверки.
Вывод
«Qwen3.5-21B-Claude-4.6-Opus-Deckard-Heretic-Uncensored-Thinking» — это аккуратный пример того, как в open-weights экосистеме маркетинговое имя расходится с технической реальностью. Под капотом там законные техники: distillation на синтетических данных, depth upscaling, abliteration через Heretic, файнтюн на художественных текстах. Каждая из них имеет смысл и применение.
Но «конкурент Claude 4.6 Opus» из этого не получается, и не может получиться в принципе. Сравнение с фронтирной коммерческой моделью на 1B+ долларов обучения и закрытыми весами — это уровень рекламной обёртки, не технической реальности.
Полезное, что я взял из этой истории: сам метод Arditi с refusal direction — красивая работа по интерпретируемости. Стоит почитать оригинальную статью на arXiv (2406.11717) и посмотреть, как он применим в задачах безопасности и evaluation. А вот «годзиллу» из телеграма я бы поставил себе только для эксперимента — и точно не для прода.
Ссылки:
-
Карточка модели: huggingface.co/DavidAU/Qwen3.5-21B-Claude-4.6-Opus-Deckard-Heretic-Uncensored-Thinking
-
Оригинальная статья про refusal direction: «Refusal in Language Models Is Mediated by a Single Direction», Arditi et al., NeurIPS 2024
-
SOLAR 10.7B и метод depth upscaling: arXiv 2312.15166
-
Базовая модель: huggingface.co/Qwen
ссылка на оригинал статьи https://habr.com/ru/articles/1032324/