nokia-applied-research/AnyJev
Turn any LLM into a Jev-style decision model: typed decisions, real probabilities, no training. (continue updating, welcome any issue and PR request)
📦 AnyJev – 모든 LLM을 보정된 결정 모델로 전환
AnyJev(Any Jev)는 오픈소스 LLM에 유형화된 질문(예: 객관식, 예/아니오, 숫자 평가)을 하고 모델의 next‑token 로짓에서 직접 확률 기반 결정을 받을 수 있는 Python 라이브러리입니다. 텍스트를 생성하지 않으며, 미세 조정이 필요 없고, 제로 라벨 예제로도 작동합니다. 수백 개의 라벨이 있으면 더 높은 정확도의 "L2" 헤드로 업그레이드할 수 있으며, 실행 비용은 본질적으로 단일 전방 패스와 같습니다.
🎯 어떤 문제를 해결하나요?
- LLM의 원시 로짓은 불안정합니다 – 답변 옵션의 순서를 바꾸면 모델의 예측이 바뀌는 경우가 많고, 신뢰 점수도 제대로 보정되지 않습니다.
- 점수를 신뢰할 수 없기 때문에 대부분의 파이프라인은 인간 검토로 폴백하여 리소스를 낭비합니다.
- AnyJev는 세 가지 수준의 보정을 제공합니다:
- L0 – 옵션 순서 편향을 제거하는 제로 라벨 보정.
- L1 – 질문당 100-500개 라벨을 사용하는 온도 스케일링.
- L2 – 100-300개 라벨로 훈련된 폐쇄형 선형 헤드(축소 LDA / ridge). 단일 절단 전방 패스 비용으로 보정된 확률을 제공합니다.
🚀 빠른 시작(README에서)
pip install "anyjev[hf]"
from anyjev import Decider, Question
from anyjev.backends.hf import HFBackend
d = Decider(HFBackend("Qwen/Qwen3-8B"))
# 유형화된 질문 정의
route = Question.choice(
"어느 팀이 이 작업을 처리해야 하나요?",
["billing", "technical", "sales", "other"],
name="route"
)
risky = Question.noul("이 도구 호출이 파괴적인가요?", name="risky")
done = Question.score("작업 완료도는?", bins=5, name="done")
# 결정 실행
state = {"conversation": [...], "tool_call": {...}}
result = d.decide(state, [route, risky, done])
print(result["route"].distribution) # {'billing': 0.81, 'technical': 0.07, ...}
print(result["risky"].p_true) # 0.12
print(result["done"].value) # 0.35
print(result.level) # "L0"
나중에 라벨을 추가하여 L1/L2로 업그레이드:
# 질문에 대해 100‑500개의 라벨 예제 수집
d.calibrate(risky, states, labels) # L1 – 온도 스케일링
d.fit_head(route, states, labels) # L2 – 폐쇄형 헤드
d.save_artifacts("qwen3-8b.json") # 헤드 저장(≈100 KB)
이제 d.decide(..., level="auto")는 헤드가 있으면 자동으로 L2를 사용하고, 그렇지 않으면 L1 또는 L0으로 폴백합니다.
🧠 작동 방식(높은 수준)
| 수준 | 필요한 라벨 | 기능 | 하지 않는 것 |
|---|---|---|---|
| raw | 없음 | 각 옵션의 토큰 로짓에 대한 soft‑max를 반환합니다(순진한 기준선). | 편향 보정이나 보정은 전혀 하지 않습니다. |
| L0 | 없음 | 옵션 목록을 K번 회전시키고 로짓을 평균화하고 추정된 라벨 사전 분포로 나눕니다. 순서 반전 편향을 제거합니다. | 모델의 불확실성을 통계적으로 보정하지 않습니다. |
| L1 | 질문당 100‑500 | L0 위에 온도 스케일링을 피팅합니다. | 옵션의 순위를 변경하지 않습니다. |
| L2 | 질문당 100‑300 | 모델 깊이의 약 ⅔ 지점의 은닉 상태에서 폐쇄형 선형 헤드(축소 LDA / ridge)를 풉니다. 입력당 한 번의 프롬프트, 서빙 시 저렴한 행렬 곱셈. | 재피팅 없이는 다른 질문이나 모델로 전송할 수 없습니다. |
L2 헤드는 [hidden, K] 행렬, 편향, 표준화 벡터, 온도를 포함하는 작은 아티팩트(≈100 KB)입니다. CPU에서 몇 초 만에 계산되며 단일 절단 전방 패스(예: 36블록 모델의 블록 24에서 중지)로 추론에 사용됩니다.
📊 보고된 결과(BANKING77 20-way 벤치마크에서 Qwen3‑8B)
| 메트릭 | 원시 로짓 | AnyJev L0(제로 라벨) | AnyJev L1(100‑500 라벨) | AnyJev L2(100‑300 라벨) |
|---|---|---|---|---|
| 답변 순서 반전률 | 0.230 | 0.073 | 0.077 | – |
| 정확도 | 0.747 | 0.803 | 0.807 | – |
| 기대 보정 오차 | 0.240 | 0.184 | 0.095 | – |
| 자동 결정 가능 @ ≤5 % 오류(안전하게 자동화할 수 있는 트래픽 비율) | 7.7 % | 46.3 % | 52.0 % | – |
지연 시간: L2의 비용은 Qwen3‑8B에서 전체 전방 패스의 ≈0.68×(프롬프트 하나를 조기 중지). L0는 K번의 프리필이 필요합니다(H100에서 K=20일 때 결정당 약 0.25 초).
🛣️ 로드맵(README 기준)
- ✅ 단일 프리필로
choice,noul,score질문 구현. - ✅ L0(제로 라벨) 및 L1 아티팩트, 수준 강제.
- ✅ L2 폐쇄형 헤드, 자동 라벨 프리 적응,
observe루프. - ✅ 5개의 Qwen3 모델용 사전 구축 헤드 및 데모 CLI.
- ⏳ 모든 결정을 더 저렴하게 만드는 속도 최적화.
- ⏳ vLLM / SGLang을 통한 서빙 지원(고정 블록에서 잔차 스트림 사용).
- ⏳ 실제 에이전트 내에서 LLM을 대체하는 전체 에이전트 루프 평가.
- ⏳ 헤드용 공개 허브, 대화형 Space, 기술 보고서.
- ⏳ 더 많은 기본 모델(Llama, Gemma, Mistral, DeepSeek) 및 더 큰 옵션 세트(>26)로 확장.
⚠️ 제한 사항(명시적으로 나열)
- 정확도는 교사 LLM에 대해 측정되며, 인간의 골드 스탠다드가 아닙니다.
- L2 헤드는 질문별, 모델별로 고유합니다. 질문 간 또는 다른 모델로 전송할 수 없습니다(현재 Qwen3 헤드만 제공).
- 보정은 모델이 작업(예: 미로 탐색, 지뢰 찾기)에 단순히 답할 수 없는 경우를 보상할 수 없습니다.
- 하나의 라벨이 사전 분포를 지배하는 경우 L0는 정확도를 해칠 수 있습니다.
- 이 라이브러리는 현재 선택당 최대 26개 옵션을 지원합니다(스팬 판독 계획 중).
- 5 % 위험에서의 커버리지 추정치는 n = 300 테스트 항목에서 분산이 큽니다.
- 모든 결정은 엔드투엔드 에이전트 루프 내가 아닌 단독으로 평가됩니다.
📦 설치 및 라이선스
- 선택적 Hugging‑Face 백엔드로 설치:
pip install "anyjev[hf]". - 패키지는 PyPI(
anyjev)에 게시되어 있으며 Python 3.8+를 지원합니다. - 라이선스: Apache‑2.0.
📚 추가 자료 및 인용
- 전체 메서드 설명:
docs/method_v3.md. - 벤치마크:
docs/results_bench.md,docs/results_exit.md. - 데모 스크립트:
demo/jev_mode,demo/games(2048, 지뢰 찾기). - 인용:
@software{anyjev2026,
title = {AnyJev: Turn any LLM into a Jev-style decision model},
author = {Zhang, Jiamu and Yang, Tianze and Shi, Yucheng and Wu, Liang},
year = {2026},
url = {https://github.com/nokia-applied-research/AnyJev}
}
결론: AnyJev는 모든 오픈소스 LLM의 원시적이고 노이즈가 많은 로짓을 신뢰할 수 있고 확률적으로 보정된 결정으로 변환하는 실용적이고 라벨이 필요 없는 방법을 제공하며, 경량 폐쇄형 헤드(L2)로 최소한의 추론 비용으로 최첨단에 가까운 정확도를 제공합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트