15 сентября 2026 года TypeSafe AI выпустила Jev — модель класса «System One», которая получает состояние и типизированные вопросы, а возвращает варианты, оценки и вероятности без единого слова текста. Сразу после выхода аналоги появились у многих: Liquid AI, например, показала d1 уже через две недели. Мы не претендуем на качество, сравнимое с оригиналом, но собрать упрощённый аналог на бесплатном GPU в Colab вполне реально. В этой статье разберём, что происходит внутри языковой модели, когда она «отвечает» одной буквой, и соберём ядро примерно на 70 строк с калибровкой вероятностей и замером скорости.
Что такое «System One» и чем отличается от обычной LLM
Традиционные языковые модели генерируют текст токен за токеном. Модели класса «System One» (термин из когнитивной психологии, обозначающий быстрое, интуитивное мышление) решают задачу иначе: на вход подаётся состояние (например, вектор признаков или структурированный набор данных) и типизированный вопрос (например, «какой из вариантов A, B, C наиболее вероятен?»). На выходе — не текст, а распределение вероятностей по вариантам ответа. Это ближе к классификаторам, чем к генеративным моделям, но с важным отличием: модель должна не просто выбрать класс, а выдать калиброванные оценки уверенности.
В основе Jev лежит идея, что многие задачи не требуют развёрнутого рассуждения — достаточно быстро оценить несколько альтернатив. Такой подход экономит вычисления и снижает задержку. Нам не нужно повторять архитектуру Jev один в один — важно понять принцип и реализовать его на доступном железе.
Собираем ядро модели в Colab
Для начала определимся с задачей. Возьмём простой сценарий: на вход подаётся вектор состояния (например, эмбеддинг текста или числовые признаки), а модель должна выбрать один из нескольких вариантов ответа и оценить вероятность каждого. В качестве основы используем небольшую нейросеть на PyTorch. Вот ключевые шаги:
- Шаг 1. Подготовка среды. Откройте Colab, выберите среду выполнения с GPU (T4 доступен бесплатно). Установите необходимые библиотеки: torch, numpy, scikit-learn (для калибровки).
- Шаг 2. Генерация или загрузка данных. Можно взять готовый датасет с несколькими классами (например, классификация текстов) или сгенерировать синтетические данные. Важно, чтобы у каждого примера был вектор признаков и метка класса.
- Шаг 3. Архитектура. Простая полносвязная сеть: входной слой размером с вектор состояния, один-два скрытых слоя с ReLU, выходной слой с количеством нейронов, равным числу вариантов ответа. Применяем softmax для получения вероятностей.
- Шаг 4. Обучение. Используем кросс-энтропию как функцию потерь и оптимизатор Adam. Достаточно 10–20 эпох на небольшом датасете.
- Шаг 5. Калибровка вероятностей. Нейросети часто выдают переуверенные прогнозы. Применим temperature scaling: подберём температуру T на валидационной выборке, чтобы минимизировать negative log-likelihood. Это простая и эффективная техника.
- Шаг 6. Замер скорости. Замерьте время инференса на одном примере и на батче. Сравните с задержкой, которую вы считаете приемлемой.
Вся реализация ядра укладывается примерно в 70 строк кода, не считая загрузки данных. Главное — не усложнять: наша цель — понять механику, а не побить бенчмарки.
Калибровка вероятностей: зачем и как
Модель может выдавать вероятность 0.9 для класса, который угадывает лишь в 60% случаев. Это проблема: в задачах, где важна уверенность (например, при принятии решений), такие оценки вводят в заблуждение. Калибровка помогает привести прогнозы в соответствие с реальной частотой правильных ответов.
Самый простой метод — temperature scaling. Мы делим логиты (выходы до softmax) на температуру T > 0 и подбираем T так, чтобы на валидации вероятности стали ближе к истинным. Если T > 1, модель становится менее уверенной, если T < 1 — более. Реализуется в несколько строк с помощью оптимизации по одному параметру.
Альтернативы: изотоническая регрессия (более гибкая, но требует больше данных) или гистограммная калибровка. Для старта достаточно temperature scaling.
Типичные ошибки и как их избежать
При сборке подобных моделей новички часто наступают на одни и те же грабли. Вот несколько примеров:
- Игнорирование калибровки. Без неё вероятности могут быть бесполезны. Всегда проверяйте калибровку на отложенной выборке.
- Переобучение на маленьких данных. Используйте регуляризацию (dropout, weight decay) и следите за разрывом между train и validation.
- Неправильный выбор метрики. Если задача — выбор одного варианта, смотрите на accuracy; если важна уверенность — на log-loss или Brier score.
- Забыли про скорость. На бесплатном GPU инференс может быть медленным. Замеряйте время и оптимизируйте, если нужно (например, уменьшайте размер батча или используйте квантизацию).
- Сравнение с Jev «в лоб». Наша модель решает узкую задачу на простых данных, поэтому прямое сравнение с промышленной системой некорректно. Оценивайте свой аналог на тех данных, для которых он предназначен.
Ещё одна ошибка — отсутствие воспроизводимости. Фиксируйте seed, сохраняйте конфигурацию и версии библиотек.
Что можно улучшить и где применять
Собранный прототип — это база. Дальше можно экспериментировать: добавить эмбеддинги из предобученной модели (например, sentence-transformers), использовать более сложную архитектуру (трансформер с небольшим числом слоёв), попробовать другие методы калибровки. Но помните: чем сложнее модель, тем больше данных и времени требуется на обучение.
Где пригодится такой аналог? В задачах, где нужно быстро оценить несколько вариантов и получить вероятности: классификация коротких текстов, выбор действия в простой среде, фильтрация кандидатов. Главное — не ждать от него чудес и трезво оценивать ограничения.
Весь код из статьи доступен в Colab-ноутбуке (ссылка будет в репозитории). Экспериментируйте, адаптируйте под свои данные и не забывайте про калибровку — это ключевой элемент доверия к модели.