Jevstiller는 유한 표본 경계를 통해 Jev와의 98% 일치율을 보장합니다

TL;DR – Jevstiller의 성과

Jevstiller는 Jev의 예측을 바탕으로 경량 분류기를 학습시키며, 엄격하게 보정된 신뢰도 임계값을 적용하여 전체 요청의 2% 이하만이 Jev가 부여하지 않았을 라벨을 받도록 보장합니다. 로컬 모델은 CPU에서 약 15ms 만에 응답하여, 직접 Jev를 호출할 때 발생하는 300ms의 네트워크 지연 시간을 단축합니다.


시스템 구축 방법

모델 아키텍처

  • 인코더: 고정된 bge‑small 문장 인코더 (384차원, CPU에서 ONNX Runtime 사용).
  • 헤드: Jev의 상위 라벨뿐만 아니라 전체 확률 분포를 학습한 다항 로지스틱 회귀 (단일 선형 계층 + 소프트맥스).
  • 크기 및 지연 시간: 수백 킬로바이트 수준; 단일 CPU 코어에서 추론 ≈15ms.
  • 학습 주기: 새로운 Jev 응답 2,000개마다 재학습, 수천 개의 행을 사용하여 몇 초 만에 완료.

라우팅 구성 요소

  1. k‑NN OOD 스코어러 – 학습 임베딩을 사용하여 분포 외(out‑of‑distribution) 입력을 감지합니다.
  2. 신뢰도 라우터 – 임계값과 OOD 차단값을 적용하여 로컬 헤드가 응답할지 여부를 결정합니다.

두 구성 요소 모두 프로젝트의 DESIGN.md (§7.3‑§7.6)에 설명되어 있습니다.


하나의 방정식으로 정의된 계약

트래픽 윈도우 내의 특정 작업에 대해:

  • c = 커버리지 (로컬에서 응답한 요청의 비율).
  • e = 로컬 불일치율 (응답된 요청 중 Jev와 라벨이 다른 요청의 비율).
  • Jev와의 전체 일치율: A = 1 – c·e.

목표 일치율 A* = 98%를 설정하면 예산 β = 1 – A* = 2%가 산출됩니다. 라우터는 c·e ≤ β를 유지해야 합니다.

핵심 포인트: 이 계약은 정답 정확도에 대해서는 아무것도 언급하지 않으며, 오직 Jev와의 불일치만을 제한합니다.


단순한 신뢰도 임계값 스윕이 실패하는 이유

일반적인 접근 방식:

  1. 보정 데이터를 따로 보관합니다.
  2. 신뢰도 임계값을 스윕합니다.
  3. 경험적 불일치가 ≤ β인 가장 느슨한 임계값을 선택합니다.

5개의 공개 분류 작업(각 20개의 무작위 분할)에서, 이 점 추정 규칙은 작업당 20개의 분할 중 6~12개에서 2% 예산을 초과했으며, 때로는 예산을 최대 1%까지 초과했습니다.

작업 커버리지 (점 추정) 평균 불일치 최악의 불일치 예산 초과
Banking77 79.8% 1.90% 2.70% 9/20
CLINC150 84.3% 2.09% 2.85% 12/20
AG News 90.3% 2.06% 2.65% 11/20
TweetEval sentiment 28.2% 1.99% 2.60% 8/20
TweetEval offensive 36.8% 1.81% 2.70% 6/20

실패의 원인은 통계적입니다. 선택된 임계값은 노이즈로 인해 표본 불일치가 우연히 낮았던 값입니다. 새로운 트래픽에서는 실제 불일치가 더 높을 수 있습니다.


Jevstiller의 통계적으로 건전한 대안

네 가지 엄격한 선택을 통해 모든 프로덕션 버전에서 ≥ 95% 신뢰도로 98% 보장이 유지되도록 합니다.

  1. 손실 = 계약 – 각 보정 행(학습 시 보지 못한 데이터)에 대해 로컬 모델이 응답하고 Jev와 불일치하면 이진 손실 1을, 그렇지 않으면 0을 기록합니다. 평균 손실은 정확히 c·e입니다. 이는 이항 비율이므로 정확한 Clopper–Pearson 신뢰 구간을 적용할 수 있습니다.
  2. 고정 그리드, 엄격한 우선 테스트 – 후보 임계값은 미리 정의됩니다. 가장 엄격한 것부터 가장 느슨한 것 순으로 평가하며, 95% 구간의 상한을 위반하는 첫 번째 지점에서 중단합니다. 이 고정 순서 테스트("Learn Then Test")는 다중 테스트 보정 없이 가족 단위 오류율(family‑wise error)을 제어합니다.
  3. 보정 누출 없음 – OOD 차단값은 학습 세트에서만 도출되며, 보정 세트는 임계값 테스트에만 사용됩니다. 이는 동일한 데이터가 임계값을 선택하고 평가하는 고전적인 점 추정의 함정을 피합니다.
  4. 여유 공간 및 섀도우 감사 – 선택된 임계값은 예산의 85%에 맞춰 조정됩니다. 보정 행과 실시간 섀도우 트래픽의 풀링된 세트에 대한 두 번째 확인을 통해 전체 예산을 검증합니다. 지속적인 감사 트래픽(전체 요청의 2%)은 항상 Jev로 전송되어 일치율에 대한 편향되지 않은 실시간 추정치를 제공합니다. 실시간 경계가 목표치 아래로 떨어지면 라우팅은 Jev로 복귀하고 재학습이 시작됩니다.

초기 구현에서는 1단계와 2단계를 누락하여 가끔 예산 위반이 발생했으나, 수정 후 Banking77 리플레이에서의 커버리지는 보장이 유지된 상태에서 70.6%에서 70.7%로 향상되었습니다.


Jev의 자체 신뢰도 하한까지 보장 확대

Jev는 응답당 신뢰도 점수를 반환합니다. 많은 애플리케이션은 낮은 신뢰도를 "불확실"로 처리하여 해당 사례를 사람 검토자에게 라우팅합니다.

  • 버전 0.4.0 이전에는 Jevstiller가 라벨에 대한 일치만 보장했습니다.
  • 0.4.0부터는 작업에 confidence_floor를 지정할 수 있습니다. 보정 및 감사 중에 Jev의 신뢰도가 이 하한 아래로 떨어지면 로컬 응답도 불일치로 간주됩니다.
  • 이제 동일한 2% 예산이 라벨 불일치와 Jev의 불확실 사례를 모두 포함합니다.
  • 커버리지에 미치는 영향: 5개 벤치마크 작업에서 0.6의 하한은 커버리지를 4~12% 포인트 감소시킵니다.

프로덕션에서 보장 유지하기

정적인 경계를 위협하는 두 가지 역학:

  1. 모델 드리프트 – 로컬 헤드는 새로운 Jev 응답에 대해 주기적으로 재학습됩니다.
  2. 데이터 드리프트 – 트래픽 분포나 Jev의 동작이 변경될 수 있습니다.

Jevstiller는 다음을 통해 이를 완화합니다:

  • 항상 Jev에 쿼리하는 2%의 영구 감사 슬라이스를 유지합니다.
  • 이 슬라이스에서 버전별 실시간 일치율을 측정합니다. 신뢰 구간이 목표치를 넘어서면 감사 비율을 높이고 시스템은 Jev로 복귀합니다.
  • 빠른 복구 입증: 12시간째에 인위적인 Jev 변경이 발생했을 때, 로컬 커버리지는 4분 만에 90%에서 9%로 떨어졌으나, 새로운 응답으로 재학습한 후 49분 만에 90%로 회복되었습니다.

커버리지와 일치율의 상충 관계

  • 이 경계는 보수적입니다. 벤치마크 작업에서 단순 점 추정 규칙에 비해 4~8%의 커버리지를 희생합니다.
  • (상위 라벨만 사용하는 대신) Jev의 전체 확률 분포를 학습하면 다중 클래스 작업에서 2~3%의 커버리지를 회복합니다.
  • 목표 일치율을 조정하면(예: 98%에서 95%로) 트윗 감성 작업의 커버리지가 대략 두 배로 늘어나고, 의도 분류 커버리지는 약 70%에서 80% 초반 범위로 상승합니다.
  • 90~99% 일치율 스펙트럼 전반에 걸쳐, Jevstiller의 인간 라벨 대비 정확도는 Jev의 정확도와 ±1% 이내를 유지합니다. 로컬 모델이 Jev와 불일치할 때 Jev만큼 자주 정답을 맞히기 때문입니다.
  • 커버리지는 Jev의 일관성과 상관관계가 있습니다. TweetEval 작업에서 Jev의 인간 라벨과의 일치율은 64~74%에 불과하여 로컬 모델의 자신 있는 공유 범위를 제한합니다.

Jevstiller가 약속하지 않는 것

  • 정확도: 보장은 Jev와의 일치에 관한 것이지, 실제 정답에 대한 정확성이 아닙니다.
  • 클래스별 예산: 현재 계약은 집계된 것입니다. 희귀 클래스가 불일치 예산을 독점할 수 있습니다.
  • 정적 트래픽 가정: 유한 표본 경계는 보정 행이 미래 트래픽의 무작위 표본이라고 가정합니다. 상당한 분포 변화는 경계를 무효화하므로 실시간 감사가 필수적입니다.

관련 연구

  • 위험 보장이 있는 선택적 분류 – Geifman & El‑Yaniv (2017).
  • 고정 순서 테스트 – "Learn Then Test" (2021).
  • 대형 모델을 증류하는 캐스케이드 – OCaTS (EMNLP 2023), Cache & Distil (ACL 2024).
  • 유한 표본 일치 계약 – 배치 처리를 위한 BARGAIN (2025); 의미론적 캐싱을 위한 vCache (ICLR 2026).

Jevstiller의 참신함은 이러한 아이디어들을 결합하여 증명 가능한 일치 계약을 갖춘, 지속적으로 재학습되고 감사되는 프로덕션 준비 시스템을 만드는 데 있습니다.


시작하기

git clone https://github.com/tomerglick57/Jevstiller && cd Jevstiller && pip install .
# Banking77 결과 재현 (API 키 필요 없음, ~10분)
bash experiments/reproduce.sh
# 전체 벤치마크 실행 (5개 작업 모두, ~1‑2시간)
bash experiments/bench.sh --no-record

Docker 이미지를 Jev의 드롭인 프록시로 실행:

docker run -d -p 8080:8080 -v jevstiller-data:/data ghcr.io/tomerglick57/jevstiller

TYPESAFE_BASE_URL을 컨테이너를 가리키도록 구성하십시오. 수천 개의 요청 후 서비스는 달성된 경계와 실시간 감사 간격을 출력합니다.

코드는 Apache 2.0 라이선스 하에 배포됩니다.

Sources

관련