Kev-0.5B — прототип (заменён)
Kev-0.5B — это модель принятия решений. Она принимает один документ (состояние) и набор типизированных вопросов и возвращает распределение вероятностей для каждого вопроса за один прямой проход. Текст она не генерирует.
Это LoRA-адаптер плюс небольшая указательная голова поверх Qwen/Qwen2.5-0.5B. Она воспроизводит архитектуру, которую Archer Hume вывел для Jev от TypeSafe в Jev’s Architecture Unmasked, и реализует публичный контракт API TypeSafe /v1/systemone.
Этот чекпойнт — исходный прототип, обученный на ноутбуке в сентябре 2026 года, чтобы показать, что механизм работает. Его заменяют Kev-0.8B, Kev-4B и Kev-9B, которые используют базы Qwen3.5, замороженные наборы с контрольными суммами и рецепт, найденный примерно через 110 контролируемых прогонов; на тех же элементах вне домена (transfer-v4 dev) эта модель набирает 0.561 против 0.643 / 0.794 / 0.812.620 / 0.790 / 0.796. Он остаётся на Hub для справки и воспроизводимости; для всего остального используйте текущее семейство.
- Hub: jaredpalmer/kev-0.5b (тег
v0.1) - Код, рецепт обучения, оценка и демо: github.com/jaredpalmer/kev
- Веса: GitHub release
v0.1.0,kev-0.5b.tar.gz(38 МБ; LoRA-адаптерadapter_model.safetensors, головаhead.pt, файлы токенизатора,eval.json, журнал обучения). SHA-25615639f79…6e12f8, полный дайджест в сайдкаре.sha256. Распаковать вruns/kev/. Веса не коммитятся в git.
Детали модели
| Разработано | Jared Palmer, совместно с Devin (Cognition) |
| Тип модели | Каузальный трансформер, только prefill, блочно-каузальная маска ветвей, указательное считывание |
| Базовая модель | Qwen/Qwen2.5-0.5B (494M параметров, заморожена) |
| Адаптер | LoRA ранга 16, alpha 32, dropout 0.05, на q_proj k_proj v_proj o_proj gate_proj up_proj down_proj (все 24 слоя) |
| Голова | Два линейных отображения 896 → 256 (запрос из <decide>, ключ из каждого </opt>), масштабированное скалярное произведение, softmax по вариантам |
| Обучаемые параметры | 9.3M (LoRA 8.8M + голова 0.46M), 1.9% от бэкбона |
| Точность вычислений | fp32 (обучение и обслуживание на Apple MPS) |
| Контекст при обучении | ≤ 384 токена состояния, ≤ 1 024 токена на ветвь вопроса |
| Контекст при обслуживании | 8 192 на ветвь (бэкбон поддерживает 32k) |
| Типы вопросов | noul (да/нет), choice (2–255 вариантов), score (2–255 упорядоченных уровней) |
| Язык | Английский |
| Лицензия | Apache-2.0 для адаптера и головы. Базовая модель под лицензией Qwen (Apache-2.0 для Qwen2.5-0.5B). Наборы данных несут собственные лицензии. |
| Версия | Kev-0.5B v0.1, обучен 2026-09-17 |
Назначение
Назначение. Исследования моделей принятия решений: калибровка прямых вероятностных считываний, внимание с общим состоянием и изолированными вопросами, чувствительность к порядку вариантов и совместимость на уровне API с контрактом System One от TypeSafe. Локальные демо и обучение.
Не предназначено. Для любых производственных решений, затрагивающих людей: модерация, фрод, кредитование, найм, медицинская или юридическая маршрутизация. Знания модели ограничены бэкбоном на 0.5B, её калибровка проверена только на обучающих распределениях, а выходы на незнакомых задачах не измерялись.
Как используется модель
На вход подаётся одна упакованная последовательность токенов:
<state> …state… <q> instr <opt> o1 </opt> <opt> o2 </opt> … <decide> <q> … <decide> …
- Маска внимания позволяет токену вопроса видеть только состояние и собственную ветвь. Вопросы не видят друг друга.
- Каждая ветвь начинает позиционные id заново после состояния.
- Для каждого вопроса голова оценивает каждое скрытое состояние
</opt>против скрытого состояния<decide>и применяет softmax. - Прикладной код превращает распределения в ответ API:
choice/confidenceдля Choice,p(yes)для Noul, ожидаемый уровень для Score.
Зарезервированные токены — это существующие специальные токены Qwen (<|fim_prefix|>, <|fim_middle|>, <|box_start|>, <|box_end|>, <|fim_suffix|>). Пользовательский текст санируется, чтобы он не мог их породить.
Запустите с помощью python -m kev.serve --run runs/kev и вызывайте POST /v1/systemone, либо используйте typesafe-sdk с base_url="http://127.0.0.1:8009".
Обучающие данные
Шесть публичных наборов данных, преобразованных в запросы формы TypeSafe и отрендеренных тем же путём кода, что и при обслуживании (api.to_record()). По 1 500 записей было взято на источник из стандартных train-сплитов, что дало 9 000 записей и 13 500 вопросов (4 500 Choice, 6 000 Noul, 3 000 Score).
| источник | сплит | преобразовано в | примечания |
|---|---|---|---|
| Banking77 | train | Choice, K = 77 | названия интентов как ключи вариантов; шаблонные описания, 50% null |
| BoolQ | train | Noul | пассаж как состояние; 40% с критериями true/false |
| AG News | train | Choice K = 4 + 2 Noul | производные вопросы да/нет, упакованные вместе с вопросом о теме |
| MNLI | train | Choice K = 3 | посылка как состояние, гипотеза в инструкциях |
| SST-5 | train | Score, 5 уровней | |
| Yelp Review Full | train | Score 5 уровней + Noul | текст усечён до 220 слов; recommend = звёзды ≥ 4 |
Вариации рендеринга, применённые при преобразовании: ~30% описаний вариантов null, ~10% структурированных описаний {"what": …}, ~15% структурированных инструкций {"question", "focus"}, ~32% состояний, обёрнутых в объекты или массивы ({"document"}, {"ticket": {"channel","body"}}, [{"role","content"}]).
Аугментация, применявшаяся один раз на запись перед кодированием: порядок вариантов перемешан; с вероятностью 0.10 истинный вариант заменён на other: None of the above; с вероятностью 0.15 добавлен нерелевантный вариант-дистрактор.
Никаких сгенерированных LLM данных. Никакой ручной разметки помимо исходных наборов данных.
Процедура обучения
| Цель | Кросс-энтропия по вариантам, усреднённая по вопросам в записи |
| Оптимизатор | AdamW, lr 2e-4, weight decay 0.01, расписание OneCycle (10% разогрева) |
| Батч | 1 запись на шаг, накопление градиента 8, ограничение градиента 1.0 |
| Эпохи | 2 (2 250 шагов оптимизатора) |
| Аппаратура | Apple M5, 32 ГБ объединённой памяти, бэкенд PyTorch 2.8 MPS |
| Время счёта | ~1 ч 45 мин (~0.29 с на запись) |
| Seed | 0 |
| Итоговый лосс обучения | 0.27 |
Этот чекпойнт старше двух членов лосса, которые теперь по умолчанию в kev/train.py: порядкового члена для Score (--ord_w) и KL согласованности перестановок для Choice (--perm_kl). Чтобы воспроизвести этот чекпойнт в точности:
uv run python -m kev.train --n_per_source 1500 --epochs 2 --accum 8 --perm_kl 0 --ord_w 0 --out runs/kev
Учтите, что теперь аугментация применяется заново каждую эпоху, а не фиксируется при кодировании, поэтому повторный прогон не будет бит-в-бит идентичным.
Оценка
Отложенные сплиты test / validation тех же шести источников, по 150 записей на источник, 1 350 вопросов, seed 1. Полные результаты в runs/kev/eval.json.
Точность и калибровка
| источник | K | zero-shot база | zero-shot Instruct | Kev-0.5B |
|---|---|---|---|---|
| acc / ECE | acc / ECE | acc / ECE / NLL | ||
| banking77 | 77 | – | – | 0.860 / 0.057 / 0.56 |
| agnews | 4 | 0.813 / 0.069 | 0.787 / 0.160 | 0.940 / 0.028 / 0.22 |
| agnews yes/no | 2 | 0.780 / 0.103 | 0.853 / 0.062 | 0.960 / 0.017 / 0.10 |
| boolq | 2 | 0.427 / 0.274 | 0.607 / 0.084 | 0.753 / 0.136 / 0.63 |
| mnli | 3 | 0.460 / 0.225 | 0.433 / 0.390 | 0.747 / 0.100 / 0.63 |
| sst5 | 5 | 0.373 / 0.083 | 0.447 / 0.344 | 0.533 / 0.121 / 1.17 (MAE 0.59 уровней) |
| yelp | 5 | 0.313 / 0.043 | 0.353 / 0.078 | 0.553 / 0.118 / 0.95 (MAE 0.54 уровней) |
| yelp yes/no | 2 | 0.833 / 0.129 | 0.833 / 0.066 | 0.887 / 0.084 / 0.33 |
| все | 0.799 / 0.065 |
Бейзлайны: Qwen/Qwen2.5-0.5B (сырая) и Qwen/Qwen2.5-0.5B-Instruct (chat-шаблон), тот же отрендеренный текст, логиты следующего токена по буквам вариантов A–H; не запускались для K = 77. ECE использует 10 равномерных бинов по верхней вероятности.
Температурное масштабирование
Подгонка на записях с чётными индексами, тест на нечётных: T = 1.47. Отложенный NLL 0.505 → 0.481, ECE 0.057 → 0.031. До масштабирования модель слегка самоуверенна.
Тесты механизма
| тест | результат |
|---|---|
| Изоляция (секрет в соседнем вопросе / отсутствует / в состоянии) | p = 0.03 / 0.03 / 0.99 |
| Упакованно против раздельно, макс. абс. разница вероятностей | 3.7e-6 (упакованно в 2.0× быстрее, ~2.7 вопроса на запрос) |
| Перестановка, 4 порядка, Choice K ≥ 3 | argmax меняется 7.4%; средний разброс p(correct) 0.065, p90 0.25 |
| IIA, добавить один нерелевантный вариант | среднее |Δ log-odds| top-2 = 0.13, p90 0.34 |
| Подделка границ, текст варианта с фальшивыми разделителями | число вариантов не изменилось; p поддельного варианта ≤ 0.09 |
Ограничения
- Только в распределении. Все числа выше — на отложенных сплитах обучающих наборов данных. Обобщение за пределы источников для этого чекпойнта не измерялось.
- Малый бэкбон. 0.5B параметров. На примере структурированных критериев из документации TypeSafe модель выбирает
return_policy, тогда как Jev выбираетreturn_status. Понимание текста (BoolQ 0.75, MNLI 0.75) далеко от передовых результатов. - Узкий охват задач. Шесть наборов данных и около десяти шаблонов инструкций. Код, таблицы, многоходовой чат, арифметика и многошаговые условия не обучались.
- Чувствительность к порядку сохраняется. 7% смен argmax и разброс вероятностей p90 0.25 при переупорядочивании вариантов. Порог вблизи границы решения может изменить действие.
- Уверенность Score вычисляется кодом обслуживания, а не чекпойнтом. На момент написания этой карточки она была
1 − E|level − mode| / (L − 1); теперь этоmax(0, 1 − E|level − mode| / D), где D — среднее абсолютное отклонение равномерного распределения по уровням, как в эталонном адаптере TypeSafe (system-one-adapter0.2.1). - Калибровка — не гарантия. ECE 0.03 после температурного масштабирования на этих источниках ничего не говорит о калибровке на новом рабочем процессе. Правильные правила оценки дают верный стимул; они не устраняют потребность в данных об исходах.
- Унаследованные ограничения от Qwen2.5-0.5B и от наборов данных, включая шум в метках, демографические смещения (например, Yelp, банковские интенты) и покрытие только английским языком.
Смещения, риски и рекомендации
Обучающие наборы несут смещения своих источников: новостные категории с центром в США, английская банковская терминология, отзывы о ресторанах и краудсорсинговые метки NLI. Модель будет их отражать.
Прямые вероятностные выходы выглядят авторитетно. confidence: 0.92 от этой модели — это статистика о её собственном распределении по трём вариантам, а не проверенная вероятность оказаться правой. Не задавайте по ней порог для значимых решений, не измерив сначала калибровку на собственных размеченных исходах.
Свойство изоляции вопросов — это настоящая функция безопасности (текст одного вопроса не может манипулировать ответом другого), и оно было проверено. Защита от подделки разделителей была проверена для пяти зарезервированных токенов. Другие пути prompt-инъекций через текст состояния не изучались.
Воздействие на окружающую среду
Один прогон обучения: ~1.75 ч на одном ноутбучном SoC Apple M5 при примерно 30–40 Вт, то есть около 0.06 кВт·ч. Оценочные и дымовые прогоны добавляют сопоставимо. Это немного.
Цитирование
@software{kev2026,
title = {kev: a laptop-scale reconstruction of a Jev-style decision model},
author = {Palmer, Jared},
year = {2026},
url = {https://github.com/jaredpalmer/kev}
}
@misc{hume2026jev,
title = {Jev's Architecture Unmasked},
author = {Hume, Archer},
year = {2026},
url = {https://archerhume.com/posts/jevs-architecture-unmasked}
}
Контакты
Откройте issue на github.com/jaredpalmer/kev.