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-ноутбуке (ссылка будет в репозитории). Экспериментируйте, адаптируйте под свои данные и не забывайте про калибровку — это ключевой элемент доверия к модели.