Технический разбор модели, которую в телеграме продают как «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
Mersavets
Это изначально не имеет смысла учитывая что вышел давно qwen3. 6, который впрочем уже имеет похожие репы
jarkevithwlad
да, 3.6 квопус есть, но пока превью
p.s. 35b не превью
p.s.s. есть так же Uncensored но от других авторов
Syzd
Вижу в теме, что посоветуете запускать локально, какие нейро самые-самые сейчас?