Nokia публикува с отворен код AnyJev: слой без обучение, който превръща всеки отворен LLM в калибриран модел за вземане на решения
Екипът за приложни изследвания на Nokia публикува с отворен код AnyJev — Python библиотека, която превръща отворен LLM в модел за вземане на решения. Тя не изисква обучение. Насочена е към често срещана производствена задача: избор на един отговор от фиксиран набор, вместо написване на изречение.
Може ли да се внедри? Да, инсталира се от PyPI, разпространява се под лиценза Apache-2.0 и разполага с бекендове за transformers и vLLM със скориране на споделени префикси.
Какво представлява AnyJev?
AnyJev заимства интерфейса си от Jev. Jev е моделът за вземане на решения System One, който TypeSafe AI представи през септември 2026 г. (нашето отразяване). Подавате на AnyJev типизиран въпрос и получавате решение с вероятност, за която можете да зададете праг. Тази вероятност се извлича от разпределението на следващия токен на модела. Нищо не се генерира, анализира или обучава.
Библиотеката поддържа 3 типа въпроси:
- Въпросът
choiceизбира една от K опции. - Въпросът
noulе с отговор „да“ или „не“. - Въпросът
scoreпоставя отговора в един от няколко подредени интервала.
Проблемът с директното четене на логитите
Много отворени проекти вече ограничават следващия токен до етикетите на опциите и прочитат оценките. Изследователският екип на Nokia посочва 2 недостатъка на този пряк подход. Първо, отговорът може да се промени, когато опциите бъдат пренаредени. Второ, вероятностите не са калибрирани.
Документът за нивата посочва 2 причини:
- Първата е предварителното отклонение: моделът предпочита някои етикети, например „Да“ пред „Не“, независимо от входа.
- Втората е позиционното отклонение: моделът предпочита определени позиции в списъка с опции.
Как работи AnyJev: L0 и L1
Всяко решение съдържа поле level.
L0 (без етикети, включено по подразбиране) прилага 2 корекции:
- Циклични отмествания. При въпрос с K опции списъкът се показва в K ротации, така че всяка опция да се появи веднъж на всяка позиция. Резултатите се комбинират в логаритмичното пространство като геометрично средно. Ако позиционното отклонение е адитивно в логитното пространство, това го премахва напълно.
- Корекция на предварителното отклонение. По подразбиране AnyJev използва пакетна калибрация. Тя поддържа текуща средна стойност на предсказаните разпределения върху реални входове и я разделя със сила 0,75. Корекцията започва след 8 елемента.
L0 изисква K предварителни изчисления за всяко решение, пакетирани върху споделен префикс. Това е около 0,25 секунди на решение при пакет от 32 на един H100, с K = 20.
L1 (от 100 до 500 етикета на въпрос) добавя мащабиране на температурата върху L0. Напаснатите стойности се запазват като малък JSON артефакт. L1 променя увереността, но не променя класирането на отговорите.
Резултати от сравнителните тестове
При Qwen3-8B с BANKING77 (20 възможности, 300 тестови елемента) числата изглеждат така:
| Метрика | Сурови логити | AnyJev L0 | AnyJev L1 |
|---|---|---|---|
| Необходими етикети | 0 | 0 | от 100 до 500 |
| Честота на промяна при обръщане на опциите | 0.230 | 0.073 | 0.077 |
| Точност | 0.747 | 0.803 | 0.807 |
| Грешка при калибриране (ECE) | 0.240 | 0.184 | 0.095 |
| Автоматично решими при 5% грешка | 7.7% | 46.3% | 52.0% |
Няколко други резултата от хранилището:
- L0 намали промените при пренареждане във всичките 9 тествани реда с модели и задачи.
- При набор от типизирани решения Qwen3-32B с L1 достигна ECE от 0.036 в сравнение с публикуваните за Jev 0.144. По отношение на точността фино настроеният Laya все още води.
- Пълната таблица с аблации обхваща моделите Qwen, OLMo, Granite, Phi и Mistral.
- Wu казва, че екипът е изпробвал AnyJev върху вътрешен проблем на Nokia, свързан с маршрутизирането, и е получил обещаващи резултати.
Как да използвате AnyJev
# pip install "anyjev[hf]"
from anyjev import Decider, Question
from anyjev.backends.hf import HFBackend
d = Decider(HFBackend("Qwen/Qwen3-8B"))
route = Question.choice("Which team should handle this?",
["billing", "technical", "sales", "other"], name="route")
r = d.decide({"conversation": [...]}, [route])
r["route"].distribution # probabilities per optionЗа обслужване стартирате vLLM с кеширане на префикси и насочвате към него VLLMBackend.
Основни изводи
- AnyJev превръща отворените LLM модели в типизирани модели за вземане на решения в стил Jev, без обучение.
- L0 използва циклични отмествания и пакетно предварително разпределение, за да премахне позиционното и етикетното отклонение.
- При Qwen3-8B BANKING77 честотата на промяна при обръщане на реда спада от 0.230 до 0.073.
- Трафикът, който може да се обработва автоматично при 5% грешка, нараства от 7.7% до 52.0% с L1.
- Проектът е под лиценз Apache-2.0 в PyPI, с бекендове за Hugging Face и vLLM.
Разгледайте GitHub хранилището. Всички заслуги са на изследователя на този проект. Също така можете да ни последвате в Twitter и не забравяйте да се присъедините към нашия ML SubReddit с над 150 хил. членове и да се абонирате за нашия бюлетин. Чакайте! В Telegram ли сте? Сега можете да се присъедините към нас и в Telegram.
Искате да си партнирате с нас за популяризиране на вашето GitHub хранилище, страница в Hugging Face, продуктово представяне, уебинар и т.н.? Свържете се с нас
Преведено автоматично от английски. Оригиналната статия е на връзката по-долу.