Jev를 파이썬 25줄로 재현한 NobodyWho 글은 패러디였다, 확률은 선택 토큰 로짓에서 뽑아
- NobodyWho가 Duarte O.Carmo 명의로 2026년 9월 22일 공개한 파이썬 25줄 구현은 llama_cpp에 Qwen3-0.6B-Q8_0 GGUF를 올려 "A", "B", "C" 토큰의 마지막 logits만 추출하는 방식임
- 각 토큰 logits에서 logaddexp를 빼 로그확률을 만들고 지수화한 결과 예시 메일이 Phishing 0.885, Spam 0.084, Legitimate 0.031로 분류됨
- 구현은 API 호출과 합성 데이터 생성, RLCD 학습 없이 로컬에서 처리하며 데이터를 외부로 전송하지 않음
- 글 말미에 이 글이 패러디임을 밝히고 OpenJev, openjev-sglang, DiffusionGemma 기반 OpenJev를 더 완전한 구현으로 링크함
- HN 댓글에선 출력 파싱 오류율과 지연시간 비교 부재가 지적되고, 챗 모델 logprob 기반 분류의 캘리브레이션 한계와 선택 토큰 분포 점검 필요가 거론됨
Hacker News opinions
지연시간이랑 컴퓨트 비교가 빠졌는데 비교글이라면 이건 반드시 들어가야 하는 부분임.
벤치마킹 Jev가 아직 ToS 위반이라는 얘기가 있던데, 아예 비교가 가능한 상황인지부터 의문임.
25줄짜리 패러디에 대고 자기 제품과 다른 백 가지 작은 점을 설명해야 하는 작성자 입장은 꽤 고통일 듯. 근데 지금은 골드러시라 동정은 잘 안 나옴.
OneDrive를 SFTP 10줄로 만들었다는 그 유명한 글이랑 같은 결임. 기술적으로는 맞지만 같은 물건은 아님.
에러율 비교도 없고 출력이 항상 파싱 가능한 형태인지도 확인이 없음. 마지막에 패러디라고 썼는데 제목에도 농담이라고 밝히는 게 낫겠음.
지연시간이랑 컴퓨트는 로컬 셋업에 따라 완전히 달라서 비교가 애매하고, 에러율은 더 좋은 모델로 갈아타면 그만임.
챗 모델 베이스로 logprob 뽑는 건 항상 찝찝함. 모델이 산문을 쓰려는 성향이 섞여서 선택 토큰 확률이 희석되거든.
A/B/C 대신 "Legitimate" 같은 실제 선택지 토큰을 직접 생성하게 하고 그 logprob을 보는 게 나음. llama.cpp --grammar에 BNF 문법 파일 넣어서 생성을 제약하는 방법도 있음.
logprob으로 불확실성을 수치화하는 건 LLM이랑 잘 안 맞음. 뉴럴넷이 캘리브레이션이 약해서 애매한 입력에도 99.8% 같은 과신을 뱉음. GPT-4로 분류 돌려봤을 때 정답은 99.99%인데 오답도 99.8% 나왔음.
그래도 확률을 뽑아내는 게 목적이면 logprob이 가장 신뢰할 만함. 다만 선택지 토큰이 출력 분포의 95~99%를 차지하는지 검사하고, 보기 순서를 섞어서 여러 번 물어본 뒤 평균내야 함. 모델이 A를 유독 좋아함.
Jev 대비 LLM의 근본적인 이점은 test-time compute로 정확도를 올릴 수 있다는 거임. Jev 쪽도 언젠가 test-time compute를 쓰게 되겠지만 공식화가 훨씬 어려워 보임.
45문항을 200ms에 돌리고 malformed output 0%를 맞출 수 있냐고 했는데, 제약 디코딩을 걸면 malformed가 나올 수가 없음. 배치로 병렬 처리해서 질문당 한두 토큰만 예측하면 끝임.
질문 길이 계산해 보면 120자짜리 45개가 약 1317 토큰이고 프롬프트 처리가 대략 0.24초 정도임. 오래된 홈 하드웨어에서 26B 모델로 127ms 나왔다는 데모도 링크돼 있음.
"빠르다"는 비교 대상이 있을 때 상대적으로 써야지. Jev랑 같으면 빠른 거고 100배 느리면 그냥 느린 거임.
근데 설계상 Jev보다 현저히 느릴 수가 없음. 프롬프트 처리는 양쪽 다 똑같이 걸리고 출력은 병렬 배치로 한두 토큰만 예측하면 되니까.
분류기에 reasoning을 왜 빼는지 모르겠음. 속도랑 비용 말고는 다 트레이드오프인데.
이걸로 로컬 프롬프트 라우터 만들면 좋을 듯. 조회성 질문은 haiku로, 추론은 opus로, 구현은 sonnet으로 보내는 식으로.
"X를 Y줄로 만들었다"는 글 진짜 싫음. 라이브러리가 수십만 줄을 감추고 있는데.