Jev: когда классификатор умещается в одно сообщение в чате
Иногда самое интересное в машинном обучении — не новые гигантские модели, а решения, которые укладываются в несколько строк кода и при этом реально работают.
Что такое jev и зачем он нужен
JEV — это локальный классификатор текста на базе языковой модели. В статье проект NobodyWho показывает, как с его помощью можно определять, к какому классу относится сообщение: к легитимному, спаму или фишингу.
Идея цепляет именно своей простотой: вместо сложной инфраструктуры, API и облачных сервисов используется одна модель, которая работает прямо на машине пользователя.
Как это устроено
Схема работы предельно короткая: текст и подсказка с вариантами ответа подаются в модель, затем она выдаёт сырые значения, которые преобразуются в вероятности.
ВХОДЯЩИЙ ПОТОК ДАННЫХ
═══════════════════════
┌─────────────────┐
│ Текст │
│ "Получите │
│ приз сейчас!" │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Промпт с │
│ вариантами │
│ ответов │
└────────┬────────┘
│
▼
════════════════════
║ ЯДРО JEV ║
║ ║
║ 1. Токенизация ║
║ 2. Forward pass ║
║ 3. Softmax ║
║ ║
════════════════════
│
▼
┌─────────────────┐
│ Вероятности │
│ Легитимный: 3% │
│ Спам: 8% │
│ Фишинг: 89% │
└─────────────────┘
Ключевой момент в том, что модель не обучали отдельно под эту задачу. Она уже умеет предсказывать следующий токен, а авторы лишь сформулировали выбор в нужном виде и посмотрели на вероятности.
Почему это работает
Подход напоминает few-shot learning: вместо дообучения модели ей дают контекст и примеры прямо в промпте. За счёт этого она использует уже накопленные закономерности и может довольно уверенно классифицировать текст без дополнительного обучения.
Именно поэтому решение выглядит почти дерзко: без лишней сложности, без дополнительных слоёв абстракции и без стремления усложнить там, где задача уже решается достаточно хорошо.
Практический вывод
Главная мысль здесь не в том, что все задачи нужно решать одним файлом. Скорее в том, что минимализм в ML — это ясность. Когда решение укладывается в небольшой объём кода, его проще понять, проверить и адаптировать под свои сценарии.
Для продакшена такой подход подходит не всегда, но для прототипов, локальных сценариев и задач, где данные нельзя отправлять наружу, он выглядит очень привлекательно.
СЛОЖНОСТЬ vs. ПОНЯТНОСТЬ
════════════════════════════════
Легко понять │ ████
│ ████
│ ████
│██
└──────────────────
Сложность кода
Точка баланса — где-то здесь,
но у каждого она своя.
При этом у подхода есть и ограничение: модель всё равно нужно где-то хранить. Но для небольших моделей, рассчитанных на локальный запуск, это уже не выглядит серьёзной проблемой.
Выводы
- JEV показывает, что классификатор можно собрать очень компактно.
- LLM можно использовать не только для генерации текста, но и для классификации.
- Локальный запуск даёт удобство, контроль и приватность.
- Минимализм в ML ценен, когда он не мешает пониманию задачи.
Ссылки
- NobodyWho — JEV — первичный источник
- OpenJev — открытая реализация
- openjev-sglang — оптимизированная версия
Дмитрий Полухин — продуктовый дизайнер. Пишу про разработку, AI и дизайн интерфейсов. Обо мне, контакты и профили.