Jev: когда классификатор умещается в одно сообщение в чате

23.09.2026 · 5 мин

Иногда самое интересное в машинном обучении — не новые гигантские модели, а решения, которые укладываются в несколько строк кода и при этом реально работают.

Что такое jev и зачем он нужен

JEV — это локальный классификатор текста на базе языковой модели. В статье проект NobodyWho показывает, как с его помощью можно определять, к какому классу относится сообщение: к легитимному, спаму или фишингу.

Идея цепляет именно своей простотой: вместо сложной инфраструктуры, API и облачных сервисов используется одна модель, которая работает прямо на машине пользователя.

Как это устроено

Схема работы предельно короткая: текст и подсказка с вариантами ответа подаются в модель, затем она выдаёт сырые значения, которые преобразуются в вероятности.

ВХОДЯЩИЙ ПОТОК ДАННЫХ
═══════════════════════
                      
  ┌─────────────────┐   
  │    Текст        │   
  │  "Получите      │   
  │   приз сейчас!" │   
  └────────┬────────┘   
           │             
           ▼             
  ┌─────────────────┐   
  │   Промпт с      │   
  │   вариантами    │   
  │   ответов       │   
  └────────┬────────┘   
           │             
           ▼             
  ════════════════════  
  ║   ЯДРО JEV      ║  
  ║                  ║  
  ║  1. Токенизация  ║  
  ║  2. Forward pass ║  
  ║  3. Softmax      ║  
  ║                  ║  
  ════════════════════  
           │             
           ▼             
  ┌─────────────────┐   
  │  Вероятности    │   
  │  Легитимный: 3% │   
  │  Спам: 8%       │   
  │  Фишинг: 89%    │   
  └─────────────────┘   
Как JEV обрабатывает текст и выдаёт предсказания

Ключевой момент в том, что модель не обучали отдельно под эту задачу. Она уже умеет предсказывать следующий токен, а авторы лишь сформулировали выбор в нужном виде и посмотрели на вероятности.

Почему это работает

Подход напоминает few-shot learning: вместо дообучения модели ей дают контекст и примеры прямо в промпте. За счёт этого она использует уже накопленные закономерности и может довольно уверенно классифицировать текст без дополнительного обучения.

Именно поэтому решение выглядит почти дерзко: без лишней сложности, без дополнительных слоёв абстракции и без стремления усложнить там, где задача уже решается достаточно хорошо.

Практический вывод

Главная мысль здесь не в том, что все задачи нужно решать одним файлом. Скорее в том, что минимализм в ML — это ясность. Когда решение укладывается в небольшой объём кода, его проще понять, проверить и адаптировать под свои сценарии.

Для продакшена такой подход подходит не всегда, но для прототипов, локальных сценариев и задач, где данные нельзя отправлять наружу, он выглядит очень привлекательно.

СЛОЖНОСТЬ vs. ПОНЯТНОСТЬ
════════════════════════════════
                          
Легко понять │            ████  
             │       ████      
             │  ████            
             │██                
             └────────────────── 
               Сложность кода   
                          
Точка баланса — где-то здесь, 
но у каждого она своя.
Баланс между сложностью решения и его понятностью

При этом у подхода есть и ограничение: модель всё равно нужно где-то хранить. Но для небольших моделей, рассчитанных на локальный запуск, это уже не выглядит серьёзной проблемой.

Выводы

Ссылки

Дмитрий Полухин — продуктовый дизайнер. Пишу про разработку, AI и дизайн интерфейсов. Обо мне, контакты и профили.