허깅페이스 리더보드에서 JEV를 5위로 밀어내고 1위를 차지한 한국의 ZTC 기술 분석

생성하지 않고 판정하는 27B 모델: Darwin-27B-ZTC의 판정 엔진 리더보드 1위와 분석

요약: 비드래프트(VIDRAFT)의 판정 엔진 Darwin-27B-ZTC가 Hugging Face 공식 Typed Decisions 리더보드에서 1위(정확도 0.743, zero-shot)를 했고, 후속 모델 Darwin-27B-ZTC-v2가 판정 엔진 102개가 겨루는 S1MB 리더보드에서 두 가지 순위 방식 모두 1위(Borda 89.58, Task Avg 66.46)를 했습니다. 두 모델은 질문 하나에 순전파 한 번으로 모든 선택지의 확률을 내고, 토큰을 하나도 생성하지 않습니다. 이 글에서는 판정 엔진이라는 분야, ZTC의 구조, 세 리더보드의 측정 방식과 결과, 그리고 측정 과정에서 얻은 교훈을 정리합니다. 가중치와 추론 코드는 모두 공개되어 있습니다.


1. 판정 엔진이란 무엇인가

LLM을 실제 서비스에 붙이면, 생각보다 많은 호출이 「글을 쓰는 일」이 아니라 「고르는 일」입니다.

  • 이 고객 문의는 환불, 상담원 연결, 종료 중 무엇으로 처리해야 하는가?
  • 이 보안 경보는 닫아도 되는가, 조사해야 하는가, 차단해야 하는가?
  • 이 문서는 질문과 얼마나 관련이 있는가? 0부터 4까지 등급을 매겨라.
  • 이 에이전트 실행 기록은 사람이 검토해야 하는가?

이런 질문에 생성형 LLM을 쓰면 몇 가지 문제가 생깁니다. 답을 문장으로 생성한 뒤 다시 파싱해야 하고, 형식이 깨질 수 있고, 생각 과정까지 생성하면 비용과 지연이 커집니다. 무엇보다 「얼마나 확신하는가」를 숫자로 받기 어렵습니다.

그래서 최근 판정 엔진(decision engine) 이라는 분야가 빠르게 커지고 있습니다. 판정 엔진은 상황(state)과 형식이 정해진 질문(typed question)을 받아서, 모든 선택지에 대한 확률 분포를 돌려줍니다. 질문 형식은 보통 세 가지입니다.

형식 의미 출력
noul 예/아니오 판정 참일 확률
choice N개 중 하나 고르기 선택지별 확률
score 순서가 있는 등급(루브릭) 등급별 확률과 기댓값

이 요청 형식은 TypeSafe의 System One API(POST /v1/systemone)에서 시작되어, 지금은 여러 회사와 연구자가 같은 형식으로 모델을 내놓고 있습니다. TypeSafe Jev, Liquid AI d1, Perplexity 계열 판정 모델, Cloudflare, Fastino 등이 이 분야에서 경쟁하고 있습니다.


2. ZTC: 토큰을 만들지 않는 판정

ZTC는 Zero-Token Classification의 줄임말입니다. 이름 그대로, 판정할 때 토큰을 하나도 생성하지 않습니다.

2.1 동작 방식

  1. 상황과 질문, 선택지 설명을 하나의 프롬프트로 구성합니다. 선택지에는 짧은 코드(A, B, C …)를 붙입니다.
  2. 27B 백본으로 순전파를 한 번 수행합니다.
  3. 마지막 위치의 은닉 상태를 판독 헤드(readout head) 에 넣어, 선택지 코드마다 점수 하나를 얻습니다.
  4. 점수에 softmax를 적용해 확률 분포를 만들고, 학습 뒤 맞춘 스칼라 온도(temperature)로 확률을 보정합니다.

이 방식의 장점은 분명합니다.

  • 비용과 지연: 질문 하나에 순전파 한 번입니다. 생성 루프가 없으니 출력 길이에 따라 지연이 늘지 않습니다. B200 한 장 기준으로 요청 하나의 중간 지연은 약 50ms였습니다.
  • 형식 안정성: 출력은 언제나 「선택지 수만큼의 확률」입니다. 파싱 실패가 구조적으로 생기지 않습니다.
  • 보정된 확신도: 확률 자체가 출력이므로 ECE, Brier, KL 같은 보정 지표로 직접 평가할 수 있습니다.

2.2 구현 기반

판독 구조와 추론 코드는 공개된 autojev(MIT) 판정 모델 코드를 바탕으로 합니다. 우리는 여기에 글자 전용 백본을 불러오는 기능을 더했습니다. 백본은 비드래프트의 Darwin-27B-RSI이고, 이 백본 전체를 판정 엔진으로 학습했습니다. 공개 저장소에는 추론 코드(autojev/), POST /v1/systemone 서버(ztc_server.py), Decision Index 평가 도구용 엔진(ztc_engine.py)을 함께 넣었습니다.

import sys
from huggingface_hub import snapshot_download

path = snapshot_download("FINAL-Bench/Darwin-27B-ZTC-v2")
sys.path.insert(0, path)
from autojev.model import DecisionModel

model = DecisionModel(checkpoint=path)
row = {
    "state": {"ticket": "같은 주문이 두 번 결제되었습니다."},
    "question": {
        "type": "choice",
        "instructions": "상담 담당자는 어떻게 처리해야 합니까?",
        "criteria": {
            "refund": "중복 결제를 환불한다.",
            "escalate": "결제팀으로 넘긴다.",
            "close": "처리하지 않는다.",
        },
    },
}
print(model.predict([row])[0])  # criteria 순서대로 선택지별 확률

BF16 가중치는 약 54GB라서 GPU 한 장에 올라갑니다.


3. 결과 1: Typed Decisions, Hugging Face 공식 리더보드 1위

3.1 벤치마크

LocalLLaMA/typed-decisions는 2026년 10월 Hugging Face가 공식 벤치마크로 지정한 판정 엔진 벤치마크입니다. 네 가지 업무 흐름(에이전트 실행 기록 점검, 고객 상담, 송장 처리, 보안 경보)에서 사례 400개, 판정 2,000개를 시험합니다. 정답은 하나의 레이블이 아니라 확률 분포로 주어지고, 정확도와 함께 KL, Brier, ECE로 확률 품질을 잽니다.

3.2 결과

Darwin-27B-ZTC는 이 벤치마크의 학습 데이터를 한 번도 보지 않은 상태(zero-shot)에서 다음 점수를 받았습니다.

지표 Darwin-27B-ZTC
정확도 ↑ 0.743
정답 분포와의 KL ↓ 0.204
Brier ↓ 0.097
질문 형식 판정 수 정확도
noul (예/아니오) 600 0.845
choice 600 0.732
score (등급) 800 0.675
  • 판정 2,000개를 모두 답했고 오류는 0건이었습니다.
  • Hugging Face 공식 리더보드(모델 카드의 .eval_results를 자동 수집하는 표)에서 1위입니다.
  • 데이터셋 운영자가 직접 관리하는 zero-shot 표 기준으로는 meraGPT Decider 1(0.768) 다음이고, Liquid AI d1(0.742), TypeSafe Jev 1.13(0.727)보다 높습니다.

3.3 측정 방식

  • 데이터셋 README와 똑같이 사례 하나에 요청 하나로, 상황과 다섯 질문을 함께 보냈습니다.
  • 우리 채점기가 README에 있는 Uniform 기준값(KL 0.444, Brier 0.238)을 그대로 재현하는지 먼저 확인했습니다. 지표 정의가 맞는지 확인하는 단계입니다.
  • 같은 조건으로 두 번 측정했습니다(0.741, 0.743). 판정 2,000개 중 14개가 달랐고, 사례 단위 부트스트랩 95% 구간은 −0.002~+0.006이었습니다. 서버가 동시 요청의 질문을 묶어 계산하기 때문에, 거의 동점인 판정이 실행마다 뒤집히는 정도의 차이입니다. 모델 카드의 모든 숫자는 예측을 저장한 두 번째 실행 하나에서 가져왔습니다.

4. 결과 2: S1MB, 판정 엔진 102개 중 1위

4.1 벤치마크

S1MB(System One Mosaic Benchmark)는 판정 엔진을 가장 넓게 비교하는 공개 리더보드입니다. 영어 벤치 137개를 세 질문 형식으로 나눕니다.

형식 벤치 수 예
Choice 57 자연어 추론, 의도 분류, 상식 추론
Noul 59 유해성 판정, 사실 확인, 지시 검색
Score 21 검색 관련도 등급, 제어 과제 평가

참가자는 공식 평가 도구로 측정하고 결과 파일을 PR로 냅니다. 운영자가 예측값, 지표, 입력 해시를 다시 검증한 뒤 병합합니다.

4.2 두 가지 순위 방식

S1MB 화면에는 두 가지 순위가 있습니다.

  • Borda 점수(기본 정렬): 벤치마다 모델 순위를 매겨 1등에 100점, 꼴찌에 0점을 주고, 137개 벤치를 똑같은 비중으로 평균합니다. 점수 차이의 크기가 아니라 순위만 봅니다. 그래서 「여러 벤치에서 고르게 앞서는가」를 봅니다.
  • Task Avg: 벤치마다 기준선 대비 보정 점수(0~100)를 구해 형식별로 평균하고, 세 형식을 다시 똑같은 비중으로 평균합니다.

4.3 결과

리더보드 화면의 계산 코드를 공개 결과 파일에 그대로 적용한 값입니다. 137개 벤치를 모두 끝낸 모델 102개가 대상입니다.

순위 모델 Borda Task Avg Noul Choice Score
1 Darwin-27B-ZTC-v2 89.58 66.46 67.66 71.51 60.21
2 openjev 87.50 62.60 65.22 67.74 54.83
3 AutoJev-27B 87.07 60.80 64.96 68.11 49.34
4 Eikos-27B 85.43 59.86 64.14 67.61 47.83
5 TypeSafe Jev 1.13 85.05 59.59 64.63 67.22 46.92

4.4 분석

세 형식 모두 1위입니다. 특정 형식 하나에서 크게 앞서 평균을 끌어올린 결과가 아닙니다.

가장 큰 차이는 Score(등급) 형식에서 났습니다. 2위보다 5.38점 높습니다. 등급 판정은 「관련 있다/없다」가 아니라 「얼마나」를 묻기 때문에, 판정 엔진에게 가장 어려운 형식입니다. v1에서 이 형식이 43.97이었는데, v2에서 60.21이 되었습니다. 이번 개선의 대부분이 여기서 나왔습니다.

Choice 형식은 v1부터 이미 강했습니다. v1도 70.12로 이 형식에서는 전체 1위였습니다. 판독 헤드 방식이 선택지 사이의 비교에 특히 잘 맞는다는 점을 보여 줍니다.

Borda와 Task Avg가 같은 방향을 가리킵니다. Task Avg는 점수 크기를, Borda는 순위의 고르기를 봅니다. 두 지표 모두에서 1위라는 것은 「일부 벤치에서 압도」와 「대부분의 벤치에서 앞섬」을 함께 만족한다는 뜻입니다.

4.5 v1에서 v2로: 가중치 평균

v2를 만든 방법은 간단합니다.

  1. v1을 출발점으로, 공개된 제어·업무 판정 과제의 학습 분할로 이어서 학습했습니다.
  2. 이어서 학습한 모델과 v1의 가중치를 반씩 평균했습니다.

이어서 학습만 한 모델은 새 과제에서는 크게 좋아졌지만, 원래 잘하던 과제에서는 조금 내려갔습니다. 새 과목을 공부하면 원래 과목이 조금 흐려지는 익숙한 현상입니다. 가중치를 평균하자 원래 과제의 성능은 거의 그대로 돌아오고, 새 과제의 개선은 대부분 남았습니다. 우리 점검 세트에서 평균 비율을 30%, 50%, 70%로 바꿔 보니, 새 모델 비중을 높일수록 새 과제 점수가 오르고 원래 과제 점수가 조금씩 내려가는 매끄러운 곡선이 나왔습니다. 그중 50%가 두 쪽을 가장 잘 맞췄습니다. 추가 학습 없이 체크포인트 두 개만으로 균형점을 고를 수 있다는 점에서, 판정 엔진처럼 여러 분야를 한 모델에 담아야 하는 경우에 실용적인 방법입니다.

4.6 학습 데이터 공개

S1MB에는 Open-Jev 과제의 시험 분할로 만든 벤치 22개가 있습니다. 우리는 같은 과제의 학습 분할(CC0)을 썼습니다. 이 사실은 모델 카드와 제출 PR에 밝혔습니다. 또한 S1MB 시험 사례 전부(상황, 질문, 문서, 행 ID)를 학습 데이터와 대조해서 겹침이 0건임을 확인했습니다. 대조 필터가 실제로 겹침을 잡는지는, 시험 사례를 일부러 섞은 대조군으로 먼저 확인했습니다.


5. 결과 3: Decision Index 0.3 제출

Decision Index는 판정 엔진 분야의 또 다른 대표 리더보드입니다. 0.3판부터 최종 점수가 공개 문제 20%, 운영자가 직접 돌리는 비공개 문제 80% 로 구성됩니다. 공개 문제에만 맞춘 모델은 최종 순위에서 이득을 보기 어렵게 설계했습니다.

  • Darwin-27B-ZTC로 공개 0.3판 문제 14만 건을 전부 풀었습니다. 오류와 미지원은 0건이고, 공개 점수는 62.63 입니다.
  • 결과 파일과 서버 코드를 공개하고 PR #98로 제출했습니다.
  • 최종 순위는 운영자가 비공개 문제를 직접 돌린 뒤에 정해집니다. 현재 운영자의 처리를 기다리고 있습니다.

이 리더보드에는 「RTX PRO 6000 한 장, 요청 하나에 1초 이내」라는 속도 조건이 있습니다. ZTC는 순전파 한 번이라서 이 조건과 잘 맞습니다.


6. 측정 과정에서 배운 것

리더보드 작업은 점수를 올리는 일만큼, 점수를 정직하게 만드는 일이 큽니다. 이번 작업에서 실제로 겪은 일을 정리합니다.

6.1 표와 대표 점수는 같은 실행에서 가져와야 한다

Typed Decisions를 두 번 측정했는데, 처음 공개한 모델 카드에는 대표 점수(0.743)는 두 번째 실행에서, 형식별 점수는 첫 번째 실행에서 가져온 숫자가 섞여 있었습니다. 커뮤니티의 한 분이 「형식별 점수를 가중 평균하면 0.741이 나오고 0.743이 안 된다」고 지적했습니다. 바로 두 번째 실행 기준으로 모든 숫자를 맞추고, 지적에 감사하는 문장과 함께 카드를 고쳤습니다. 숫자 하나하나는 맞아도, 서로 다른 실행의 숫자를 섞으면 표 전체가 틀립니다.

6.2 리더보드는 「점수」가 아니라 「자격 + 점수」다

리더보드마다 제출 조건이 다릅니다. 속도 제한, 하드웨어 조건, 운영자 재현 가능성, 비공개 문제 비중 같은 조건입니다. 점수를 올리는 구성을 찾기 전에 제출 규칙부터 읽어야 합니다. 조건을 지키지 않은 점수는 아무리 높아도 순위에 오르지 않습니다.

6.3 순위 계산 방식을 직접 확인하라

S1MB의 기본 정렬이 Task Avg가 아니라 Borda라는 것은, 화면 코드를 읽고 나서야 확인했습니다. 순위를 주장하기 전에 리더보드가 실제로 쓰는 계산을 그대로 재현해야 합니다. 이번에는 두 방식 모두에서 1위라서 결론은 같았지만, 차이의 크기는 방식에 따라 달랐습니다(Borda +2.08, Task Avg +3.86).

6.4 지표 정의는 기준값으로 검증하라

Brier 점수 하나도 「선택지별 오차의 평균」과 「합」 두 가지 정의가 있습니다. 데이터셋 README의 기준값(Uniform 0.238)을 우리 채점기로 재현해 보고 나서야 「합」이 맞다는 것을 확인했습니다. 채점기를 믿기 전에, 이미 알려진 기준값부터 맞춰 보는 것이 가장 싼 검증입니다.

6.5 입력을 자르지 말고, 한도를 밝혀라

S1MB의 qasper 벤치에는 기본 입력 한도(8,192토큰)를 넘는 문서가 있었습니다. 공식 어댑터는 입력을 자르지 않고 그 판정을 실패로 기록합니다. 우리는 한도를 32,768토큰으로 늘려 그 벤치만 다시 측정했고, 그 설정이 결과 메타데이터에 남도록 했습니다. 입력을 몰래 자르면 점수는 나오지만, 그 점수는 다른 모델과 비교할 수 없습니다.


7. 마치며

판정 엔진은 화려하지 않지만, 실제 서비스에서 가장 자주 호출되는 AI입니다. 고객 문의를 분류하고, 경보를 걸러 내고, 검색 결과의 관련도를 매기는 일은 하루에도 수백만 번 일어납니다. 이런 일에 필요한 것은 긴 글을 쓰는 능력이 아니라, 빠르고, 형식이 깨지지 않고, 얼마나 확신하는지 정직하게 말하는 모델입니다.

ZTC는 27B 모델 하나로 순전파 한 번에 판정하고, 공개 리더보드 두 곳에서 1위를 했습니다. 가중치와 코드는 모두 공개했습니다. 판정 엔진에 관심 있는 분들이 직접 돌려 보고, 자기 업무의 판정 문제에 적용해 보시기를 바랍니다. 질문과 의견은 언제든 환영합니다.


링크