Build your own decision model
직접 만들어보는 의사결정 모델
고정된 선택지 중 하나를 고르는 의사결정 모델을 일반 LLM의 다음 토큰 확률로 구현하고, CommonsenseQA에서 성능과 확률 보정을 평가합니다. Qwen3-1.7B 모델의 기본 정확도는 59.38%였으며, temperature scaling으로 과도한 확신을 줄이는 방법도 소개합니다.
- 주제
AI 요약
일반적인 언어 모델은 JSON처럼 형식이 정해진 출력을 만들더라도 토큰을 하나씩 생성합니다. 반면 의사결정 모델은 선택지를 미리 정해두고 그중 하나를 고릅니다. 글에서는 이 방식을 Qwen3-1.7B로 직접 구현합니다. 입력 프롬프트 뒤에 A부터 E까지 선택지와 “Answer:”를 붙이고, 모델이 다음 토큰으로 낼 수 있는 값을 각 선택지 토큰으로 제한합니다. 마지막 위치의 로짓(logits)에서 해당 토큰에 해당하는 값만 골라 softmax를 적용하고, 확률이 가장 높은 선택지를 답으로 반환합니다. 예시로 “하늘은 무슨 색인가요?”라는 질문에 모델은 B, 즉 파란색을 골랐습니다.
정확도 평가
CommonsenseQA 데이터셋에서 무작위로 뽑은 홀드아웃 1,221개 문항을 평가했습니다. 미세 조정 전 정확도는 59.38%, macro F1은 0.5844였습니다. 같은 데이터셋으로 짧게 미세 조정한 뒤에는 정확도가 62.41%, macro F1이 0.6234로 올랐습니다. 결과는 모델 크기가 1.7B여도 선택지 분류를 수행할 수 있음을 보여주지만, 선택지별 성능은 고르지 않습니다. 미세 조정 전 D의 재현율은 0.3904였고, E는 0.4255였습니다.
확률은 정답 확률과 다릅니다
선택지 토큰의 확률을 답에 대한 신뢰도로 간주해도 정확한 정답 확률이 되지는 않습니다. 이 방식으로 얻은 확률은 추가 학습 없이는 모델이 다음 토큰을 얼마나 확신하는지에 가까울 수 있습니다. 글에서는 “박쥐를 어디에서 가장 흔히 볼 수 있나요?”라는 모호한 질문에 모델이 동굴을 0.9978로 선택한 예를 듭니다. 평가 결과에서도 모델이 0.9~1.0의 확신을 보인 809개 예측 중 실제 정답은 70.09%였습니다. 0.8~0.9 구간의 정확도도 47.11%에 그쳤습니다.
Temperature scaling
저자는 확률 분포를 평탄하게 조정하는 temperature scaling으로 보정을 시도했습니다. 평가 데이터에 맞춰 temperature를 3.797280788421631로 설정한 뒤, 0.9~1.0 구간에서는 평균 확신도 0.9333과 정확도 0.9541을 기록했습니다. 0.5~0.6 구간도 평균 확신도 0.5475, 정확도 0.5482로 가까워졌습니다. 글은 데이터셋 구성과 평가, 미세 조정, 확률 보정을 실습할 수 있는 코드를 함께 제공하고, 다른 크기의 모델에서도 시험해보라고 권합니다.
Hacker News 반응
- @bellajbadr — 이건 고정된 JSON 출력을 얻는 데만 쓰는 건가요?
- @howunfortunate — 여러 해 동안 분류기에 관심을 끌려고 애써온 머신러닝 엔지니어로서, Jev를 둘러싼 열풍을 보면 속으로 소리를 지르게 됩니다. 제로샷 분류기가 기존 방식보다 편리하다는 건 압니다. 꽤 멋지기도 합니다. 하지만 일반 LLM도 꽤 오래전부터 값싸고 쓸 만한 제로샷 분류기로 쓸 수 있었는데, 그 생각을 하면 다시 속으로 소리를 지르게 됩니다.
- @JMKH42 — 시기가 관건이었던 것 같습니다. 지난 1년 동안 LLM을 API로 쓰는 제품을 많이 만들었고, 여러 단계로 LLM을 호출하다 보면 특정 선택지를 고르거나 순위를 매기길 원하는데 엉뚱한 출력을 내는 경우가 답답합니다. 그런 작업에 붙여 쓸 수 있고 더 안정적이며 빠르고 저렴한 도구가 나타났으니 왜 관심을 끄는지 바로 이해합니다.
- @firasd — Jev가 주목받은 이유 중 하나는 API가 if(...)나 switch문처럼 느껴지기 때문이라고 생각합니다. 사람들은 채팅형 API에 익숙해져서 채팅 모델에 이모지 몇 개를 보내고 지금 상황에 가장 맞는 것을 고르게 하는 식의 사용을 떠올리지 못했을 수 있습니다. 같은 작업에서 채팅 모델은 더 비싸고 거부 응답 같은 엉뚱한 결과도 낼 수 있습니다.
- @jofzar — Jev는 특히 아주 싸고 빨라서 예전에는 비용을 정당화하기 어려웠던 작업에도 시험 삼아 써볼 수 있다는 점이 다릅니다. 빠르게 테스트하는 것 말고는 할 일이 거의 없습니다.
- @demibabs — 벤치마크에 맞춰 temperature만 바꿔 모델이 보정된 것처럼 보이게 하는 게 허용되는 일인가요? p-해킹처럼 느껴집니다.
- @JMKH42 — 작동한다면 쓸 만합니다. 테스트 세트가 충분히 크고 다양하다면 아무것도 안 하는 것보다는 낫습니다. 여러 종류의 작업을 시험하고 확신도가 얼마나 달라지는지 확인하면 견고성을 평가할 수 있습니다.
- @sva_ — Jev나 의사결정 모델로 만든 흥미로운 사례가 있나요? 이렇게 화제가 될 정도라면 쓸 만한 사례가 있을 것 같습니다.
- @JLO64 — 진지한 용도는 아니지만, 제가 만드는 Nintendo 3DS 게임의 테스트 도구에 OpenAI Decisions API를 붙였습니다. 입력마다 약 200~300ms가 걸리는데, 이 작업에는 그 속도가 필요합니다.
- @UltraSane — Claude Code 훅에서 위험한 명령을 감지하는 데 Jev를 씁니다.
- @nico — 더 가볍고 CPU에서 실행하고 학습할 수 있는 비슷한 도구를 찾는다면 Jeffy를 써보세요.
- @nico — Jev와 비슷한 모델은 탐색과 적절한 작업 흐름을 찾는 데 좋습니다. 하지만 분류 작업이 고정되면 데이터를 많이 모으지 않고 CPU에서 빠르게 학습하는 전용 분류기가 더 효율적인 경우가 많습니다. 이메일 50~100개로 이메일 분류기의 정확도나 F1을 95%까지 올릴 수 있습니다.
- @sachaa — 이 방법은 시작점으로 좋지만 Qwen 같은 LLM은 로컬 실행 성능이 이상적이지 않습니다. 순수 의사결정 모델인 Laya를 브라우저에서 실행하도록 바꿨고 응답 시간이 200ms보다 짧습니다.
- @make3 — Laya는 ModernBERT를 미세 조정한 모델입니다. 양방향 모델일 뿐 여전히 언어 모델입니다. 의사결정 모델을 신비한 개념처럼 부르지 말고 정확히 부릅시다.
원문: nishtahir.com / 번역·요약: Trawling