Cactus научила Gemma 4 понимать, когда она ошибается

Cactus научила Gemma 4 понимать, когда она ошибается

Стартап Cactus Compute (проект Cactus Hybrid, автор поста на Hacker News, HenryNdubuaku) показал технику дообучения компактных моделей, которые запускаются прямо на устройстве, распознавать собственные ошибки. В чекпойнт модели встраиваются «пробы», дополнительный механизм, который для каждого ответа выдаёт оценку уверенности от 0 до 1. Эта оценка приходит как отдельное структурированное поле confidence, а не извлекается разбором текста ответа. Если уверенность ниже порога 0.85, приложение может само переслать запрос более мощной модели, в коде это выглядит буквально как условие if confidence < 0.85: answer = ask_a_bigger_model(prompt).

Первой моделью в линейке Cactus Hybrid стала Gemma 4 E2B Hybrid, самая маленькая версия модели Gemma от Google, доступная в коллекции Cactus Hybrid на Hugging Face. По заявлению авторов, эта модель на большинстве бенчмарков приближается по качеству к Gemini 3.1 Flash-Lite, при этом передавая ей на обработку только 15, 35% запросов, а остальные обрабатывая сама. Качество квантования Cactus измеряла на собственной схеме Cactus Quants, которая хорошо показывает себя при равномерном (uniform) квантовании; авторы отдельно предупреждают, что для форматов Unsloth, GGUF и MLX разработчикам стоит проверять качество самостоятельно, независимо от заявленных цифр.

Модель можно установить через pip install cactus-compute и вызывать через собственные Python-биндинги Cactus, через mlx-lm (для Apple Silicon), через transformers (с жёстким требованием версии 5.5.4, 5.6, версии от 5.14 приводят к сегфолту на этом чекпойнте) или через патч для llama.cpp: авторы приложили патч в каталоге patches/llama.cpp/, после установки которого llama-server отдаёт значение confidence прямо в ответе API. Отдельно отмечено техническое ограничение: модель нужно загружать с явным .to(device), а не с device_map="auto", проба считывает уверенность вне обычного пути forward(), и если часть весов из-за автораспределения остаётся на «meta»-устройстве, чтение confidence падает.

Качество самой пробы авторы измеряют метрикой AUROC (насколько хорошо проба отделяет неправильные ответы от правильных: 0.5, случайность, 1.0, идеальное разделение). Самый заметный результат: проба, обученная вообще без аудиоданных, показала AUROC 0.79, 0.88 на четырёх аудио-бенчмарках (две задачи транскрипции, один аудио-тест с выбором ответа, один тест транскрипции вне обучающего домена). По интерпретации авторов, это исключает объяснение «проба просто заучила поверхностные паттерны из обучающих данных», похоже, что сигнал корректности ответа, который она считывает из скрытого состояния модели, не зависит от модальности входа. Модель распространяется по лицензии MIT, использование самой Gemma регулируется отдельными условиями Google.

Ключевые факты

  • Cactus Compute встроила в чекпойнт Gemma 4 E2B «пробы», механизм, который для каждого ответа выдаёт числовую оценку уверенности от 0 до 1 как структурированное поле, а не разбором текста ответа.
  • При уверенности ниже 0.85 запрос можно автоматически перенаправить на более крупную модель Gemini 3.1 Flash-Lite, условие вставляется прямо в код приложения.
  • Gemma 4 E2B Hybrid, самая маленькая модель линейки Gemma, на большинстве бенчмарков приближается к Gemini 3.1 Flash-Lite, передавая ей лишь 15, 35% запросов.
  • Проба для оценки уверенности, обученная без единого аудиопримера, показала AUROC 0.79, 0.88 на четырёх аудио-бенчмарках, по интерпретации авторов, сигнал корректности читается из скрытого состояния модели независимо от модальности входа.
  • Модель доступна через pip install cactus-compute, а также в форматах для MLX, transformers и как патч для llama.cpp; лицензия MIT, использование самой Gemma отдельно регулируется условиями Google.

Почему это важно

Компактные модели, которые работают прямо на устройстве, быстрые и приватные, но иногда ошибаются, и раньше разработчику приходилось либо мириться с этим, либо всегда слать запросы в облако «на всякий случай», теряя главные преимущества on-device-подхода. Техника Cactus даёт модели встроенный сигнал «я не уверена» и позволяет переключаться на более мощную модель только тогда, когда это действительно нужно, а не при каждом запросе. Отдельно интересен побочный результат: проба уверенности, обученная только на текстовых данных, сработала и на аудиозадачах, это говорит о том, что модель кодирует некий общий, не привязанный к модальности сигнал «правильно/неправильно» в своём скрытом состоянии, а не просто запоминает частные паттерны обучающей выборки.

Кому это важно

В первую очередь, разработчикам мобильных и edge-приложений, которые уже используют on-device-модели вроде Gemma через llama.cpp, MLX или трансформеры и хотят добавить недорогой откат в облако без сложного отдельного пайплайна классификации сложности запроса. Во вторую, исследователям интерпретируемости и надёжности моделей, которым интересен сам факт, что сигнал корректности ответа может обобщаться между модальностями (текст и аудио) без специального обучения на этой модальности.

Как это применить

Модель ставится командой pip install cactus-compute, дальше запрос идёт через биндинги cactus_init/cactus_complete, которые возвращают текст ответа и поле confidence. Тот же подход доступен через mlx-lm на Apple Silicon и через transformers, но для последнего нужно строго держать версию библиотеки в диапазоне 5.5.4, 5.6, версии от 5.14 и выше приводят к сегфолту на этом чекпойнте. Для llama.cpp авторы приложили патч (patches/llama.cpp/install.sh), после применения которого llama-server отдаёт confidence прямо в теле HTTP-ответа. Важная деталь для продакшена: модель нужно грузить с явным .to(device), а не с device_map="auto", иначе автораспределение весов ломает чтение уверенности.

Можно ли доверять

Это пост в разделе Show HN от самого автора проекта (HenryNdubuaku, Cactus Compute), а не независимый обзор или рецензируемая публикация; на момент подготовки материала пост набрал 96 баллов и 14 комментариев, заметный, но не взрывной отклик сообщества. Ключевые цифры (совпадение с Gemini 3.1 Flash-Lite при передаче лишь 15, 35% запросов, AUROC на аудио-бенчмарках), собственные измерения Cactus, независимого подтверждения в источнике нет. При этом авторы сами честно оговаривают ограничение: качество квантования измерено на собственной схеме Cactus Quants, и для практических форматов (Unsloth, GGUF, MLX) советуют проверять цифры отдельно, это скорее добавляет доверия к прозрачности проекта, чем снимает вопрос о повторяемости заявленных цифр.

Риски и подводные камни

Заявленные показатели квантования получены на собственной схеме Cactus Quants и, по прямому предупреждению авторов, могут не воспроизвестись на распространённых форматах вроде GGUF, Unsloth или MLX, разработчику придётся проверять качество самому. Для запуска через transformers нужна конкретная узкая версия библиотеки, что создаёт риск поломки при обычном обновлении зависимостей. Технически хрупкое место, загрузка модели с device_map="auto" тихо ломает чтение уверенности вместо явной ошибки. Наконец, откат на менее уверенных ответах завязан на облачную модель Gemini 3.1 Flash-Lite от Google, то есть полностью автономным решение остаётся только для той доли запросов, которую модель обрабатывает с высокой уверенностью сама.

«Это исключает поверхностные объяснения: проба считывает из скрытого состояния сигнал корректности, независимый от модальности, а не заучивает паттерны обучающих данных.»

— Cactus Compute, из поста Show HN