기술 글

선택지를 고르는 결정 모델과 네 갈래로 갈린 비교 기준

발행일
글쓴이
HDATF

결정 모델은 선택지를 미리 받아 선택지마다 확률을 돌려주는 모델입니다. 2026년 9월 19일부터 10월 8일 사이에 올라온 글 다섯 개가 그 구조와 공개 순위와 학습 도구를 다뤘습니다. 이 글에서는 그 다섯 개를 하나의 주제로 읽고, 출처마다 어디까지 뒷받침하는지 표시합니다.

업무 기록 한 장과 선택지 두 개가 큰 상자로 들어가고, 상자는 결과 하나를 오른쪽 네 개의 판으로 보냅니다. 판마다 눈금 간격이 다른 자가 붙어 있어 같은 결과가 판마다 다른 높이에 찍힌 그림입니다.

이 글이 다루는 질문

AI 제품은 보통 언어 모델에게 답을 쓰게 한 뒤 그 글을 다시 읽어 들입니다. 결정 모델은 순서가 반대입니다. 판단할 자료와 질문과 선택지 목록을 먼저 받고, 선택지마다 확률을 돌려줍니다.

2026년 9월 19일부터 10월 8일 사이에 글 다섯 개가 이 한 주제를 서로 다른 각도에서 다뤘습니다. 점수를 매기는 구조, 공개 보드의 순위, 직접 학습에 필요한 것입니다. 따로 읽으면 작은 소식 다섯 개로 보입니다.

같이 읽으면 질문 하나에 답이 됩니다. 제품의 작은 판단을 결정 모델에 맡길 때, 그 모델이 쓸 만한지를 무엇으로 확인하느냐입니다. 짧게 답하면 공개된 측정이 네 가지 있고 서로 어긋납니다. 네 가지가 서로 다른 것을 재기 때문입니다.

먼저 알아 둘 용어 네 가지

결정 모델
결정 모델은 판단할 자료와 미리 정한 질문과 선택지 목록을 받습니다. 선택지마다 확률을 돌려주고 거기서 끝납니다.
forward pass
forward pass는 입력이 모델을 한 번 통과하는 것입니다. 문장을 쓰려면 토큰 하나마다 한 번씩 통과해야 합니다. 정해진 선택지에 점수를 매기는 일은 한 번의 통과로 끝낼 수 있습니다.
보정(calibration)
보정은 모델이 말한 확신이 실제 적중률과 맞는지를 보는 것입니다. 백 건에서 0.9라고 말하고 그중 아흔 건쯤 맞히면 보정이 잘된 상태입니다. 확신 숫자 자체는 모델이 만들어 낸 값으로 남습니다.
LoRA
LoRA는 얼린 기본 모델 옆에 작은 학습용 가중치를 붙이는 방법입니다. 학습이 붙인 가중치만 건드리므로 한 번 돌리는 데 드는 메모리가 크게 줄어듭니다.

환불 문의 하나로 보는 입력과 출력

고객 지원 창구에 문의가 하나 들어온 상황을 놓고 봅니다. 언어 모델에는 답장과 분류를 글로 써 달라고 시킵니다. 결정 모델에는 더 좁은 것을 시킵니다.

상태
문의 글과 그 문의가 가리키는 주문 기록과 계정 이력입니다. Cloudflare가 공개한 코드는 이것을 record라고 부르고 한 번만 인코딩합니다.
질문
환불 요청인가, 반품 기간 안에 들어오는가, 사람이 봐야 하는가입니다. 질문은 한 번 써 두고 계속 다시 씁니다.
선택지
공개된 코드는 질문 종류를 셋으로 나눕니다. 예 또는 아니요로 답하는 질문, 이름 붙은 선택지 가운데 하나를 고르는 질문, 순서가 있는 눈금에서 점수를 읽는 질문입니다.
출력
선택지마다의 확률입니다. 공개된 코드에서 예 또는 아니요 질문은 참일 확률을 소수점 넷째 자리까지 반올림해 돌려주고, 고르기 질문은 고른 항목의 이름을 돌려주며, 점수 질문은 눈금 전체에 대한 기댓값을 돌려줍니다.
기록은 한 번만 인코딩합니다. 질문마다 자기 선택지에 대해 같은 forward pass 안에서 점수를 받고, 질문마다 따로 확률이 나옵니다.

출력에는 해석할 문장도 따를 지시도 없습니다. 환불 질문에 0.93이 나왔다면 모델이 그 선택지에 매긴 점수를 운영자에게 알려 준 것입니다. 그대로 실행할지는 제품이 따로 정하는 문제로 남습니다.

선택지에 점수를 매기는 세 가지 구조

공개된 모델 카드와 코드는 선택지마다 확률을 얻는 방법을 세 가지로 설명합니다. 아래 이름은 출처가 직접 쓴 말입니다.

선택지 글자의 점수 읽기
선택지를 글자로 붙여 보여 주고, 모델이 그 글자에 매긴 점수를 문장을 쓰기 전에 바로 읽습니다. Quyet-1.0-Large가 자기 출력을 이렇게 설명하면서 option-letter logits라고 적었습니다.
일을 위해 붙인 머리
기본 모델 위에 점수를 내는 층을 따로 얹고, 그 층이 확률을 직접 만듭니다. Cloudflare의 Clef는 그 층을 joint schema head라고 부릅니다.
두 벡터를 견주기
자료와 선택지를 각각 벡터로 바꾸고 가장 가까운 선택지를 고릅니다. Laya의 카드는 인코더로 ModernBERT-large를 쓴다고 적었습니다.

셋 가운데 Clef의 머리만 코드가 전부 공개되어 있어 한 번 따라가 볼 만합니다.

  1. record를 한 번 인코딩합니다. 질문마다, 선택지마다 해당하는 구간의 hidden state를 모아 벡터 하나씩으로 만듭니다.
  2. 언어 모델이 쓰던 출력 임베딩 가중치에서 단어 쪽 벡터를 함께 읽습니다. 그래서 선택지에 적힌 단어도 점수에 영향을 줍니다.
  3. evidence 층이 record 전체를 훑어 참고하고, joint field transformer가 질문 쪽과 선택지 쪽을 함께 디코딩합니다.
  4. 마지막 점수는 셋을 더해 만듭니다. 단어 쪽 사전 점수, 두 벡터의 코사인 점수, 그리고 나머지 항입니다. softmax는 질문마다 따로 돌아서, 한 번의 forward pass로 모든 질문이 답을 받습니다.

여기에 한계 두 가지가 붙습니다. 공개 코드에서 Clef의 encode_record 기본값은 16384 토큰이고, 호스팅 서비스는 더 큰 창을 알립니다. 서비스가 받는 상한과 함수 기본값은 서로 다른 숫자입니다. 또 다른 제품과 같은 모양의 요청을 받는 접속 방법을 제공하더라도, 그 뒤의 가중치는 만든 쪽의 것으로 남습니다.

같은 모델을 재는 네 개의 서로 다른 기준

결정 모델을 재는 공개 측정이 네 가지 있습니다. 네 가지 모두 2026년 10월 8일에 열어 봤습니다. 점수 정의가 서로 달라서 순서도 다르게 나옵니다.

같은 결과를 네 가지 눈금으로 잰 모습입니다. 여기 높이는 설명을 위해 그린 값이고, 네 측정이 점수를 서로 다르게 정의하므로 따로 둡니다.
네 가지 공개 측정이 스스로를 설명한 내용
측정무엇을 보고하는가그 숫자를 옮기기 어려운 이유
JevBench봉인된 문제 묶음에서 Capability Score와 Composite Score방법이 1.6.1판으로 바뀌었고, 점수 옆에 비용과 지연 관문이 붙었습니다. 능력 점수가 높아도 관문 밖에 놓일 수 있습니다.
S1Bench공개된 여섯 묶음의 macro accuracy와 발표값과의 차이각 줄이 호스팅과 로컬과 CPU로 서로 다르게 실행되고 context와 자르기 설정도 다릅니다. macro accuracy는 표본을 합치는 대신 묶음별 점수를 평균합니다.
Decision Index0.2.1판의 더 넓은 묶음, 만든 쪽이 직접 실행만든 쪽이 돌리고 보고한 값입니다. 블로그 글에 추린 열 개 과제는 전체 묶음보다 적습니다.
JevArena모델 카드가 인용하는 별도 arena 점수같은 카드에 적힌 index 점수와 눈금이 달라서 둘을 더하거나 견줄 수 없습니다.
  • 다시 재는 것만으로 숫자가 바뀝니다. S1Bench에서 같은 발표 모델이 같은 여섯 묶음에 대해 0.7751을 받았고 발표값은 0.7682였습니다. 0.69퍼센트포인트 차이가 모델 변경 없이 재측정에서 나왔습니다.
  • 스냅숏은 스냅숏입니다. Laya의 62.5퍼센트는 이 날짜의 S1Bench 실행과 맞는 값이고, 그 실행에 속한 숫자로 읽어야 합니다.
  • 9월 순위는 이미 움직였습니다. 다섯 글 가운데 하나가 9월 보드를 인용해 한 모델이 75.3으로 앞서고 다른 모델이 74.6으로 뒤따랐다고 적었습니다. 10월 8일에 읽은 보드는 그 줄들의 순서가 다르고, 같은 능력 점수가 지금은 비용 관문 밖에 놓여 있습니다.
  • 이 글들의 속도 비교는 실행 방식이 섞여 있습니다. 어떤 그림은 호스팅 API 호출과 로컬 GPU 실행과 CPU 실행을 같은 축에 놓습니다. 거기서 읽은 배수는 모델 자체의 속도보다 그 실행 환경을 설명합니다.
  • 인기 목록은 수요를 매깁니다. 어떤 글은 OpenRouter 화면을 띄워 결정 모델 항목 여덟 개를 차례로 보여 줬습니다. 그 화면은 요청 수를 세므로, 그날 가장 많이 호출된 것이 무엇인지를 알려 줍니다.

직접 학습이 가능해진 자리

다섯 번째 출처는 모델 대신 학습 도구입니다. Unsloth가 Clef 계열 backbone을 불러오고 joint schema head를 붙여 LoRA로 학습하는 경로를 공개했습니다.

공개된 loader를 읽으면 무엇이 실제로 학습되는지가 정리됩니다. full fine-tuning 없이 불러오면 기본 가중치는 갱신을 받지 않도록 설정됩니다. 설정된 경로는 그 얼린 기본 위에 LoRA 어댑터를 올리고, 32비트로 두는 head와 함께 그 어댑터를 학습합니다. head만 학습하는 실행은 별도 선택지로 들어 있습니다.

같은 도구에 보정 단계가 있어 보류한 자료의 정확도와 보정 오차와 손실을 보고합니다. 학습한 머리를 숫자로 따져 볼 수 있게 만드는 자리가 그 단계입니다.

기본 모델은 얼린 채로 두고 붙인 가중치와 머리를 학습합니다. 보정은 떼어 둔 자료의 정확도를 보고하고, 관문은 기준값 아래를 사람에게 넘기려고 붙잡아 둡니다.

그 발표에 붙은 메모리와 정확도 수치는 도구를 만든 쪽이 보고한 값입니다. 전체 실행을 담은 페이지를 이 글을 쓸 때 열지 못해서, 만든 쪽의 주장으로 두고 읽었습니다.

읽을 때 조심할 것

  • 실행 권한은 분류 결과와 따로 정합니다. 환불 선택지를 돌려준 모델은 항목에 점수를 매긴 것입니다. 송금과 삭제와 배포는 별도 승인과 별도 검증을 거쳐야 합니다.
  • 확신과 실제 정확도는 서로 다른 숫자입니다. 0.93이라는 값은 보류한 자료에서 0.93이 얼마나 자주 맞았는지를 확인한 뒤에 뜻이 생깁니다.
  • 네 측정의 점수는 따로 둡니다. 더하거나 평균 내거나 하나의 순위로 합치면 네 측정 가운데 어디에서도 정의한 적 없는 숫자가 나옵니다.
  • 오염 제거는 평가를 돌린 쪽이 한 말입니다. 독립된 실행이 재현하기 전까지는 평가자의 진술로 두고 읽습니다.
  • 목록에 이름이 없는 것은 그 목록이 무엇을 실었는지만 알려 줍니다. 공식 문서는 기본 모델 목록이 텍스트 모델을 돌려준다고 적었습니다. 그래서 목록에 없는 이름은 따로 확인해야 합니다.

지금 해 볼 수 있는 순서

  1. 제품에서 이미 사람이 손으로 내리는 판단 하나를 고르고, 그 질문과 선택지를 각각 한 줄로 적습니다.
  2. 사람이 답한 과거 사례를 몇백 건 모으고, 일부는 학습에 들어가지 않도록 떼어 둡니다.
  3. 먼저 단순한 기준선을 잽니다. 단어 규칙과 기존 언어 모델 prompt 둘 다 넘어야 할 숫자를 만들어 줍니다.
  4. 떼어 둔 자료를 결정 모델에 통과시키고 정확도와 보정 오차를 나란히 읽습니다. 한국어 자료는 한국어로 확인합니다.
  5. 내보내기 전에 기준값 세 개를 정합니다. 어디부터 결과를 쓰고, 어디부터 보류하고, 언제 사람에게 넘길지입니다.

마지막 단계가 나머지를 안전하게 지킵니다. 보류한 결과는 시간을 조금 쓰지만, 잘못된 기준에서 쓴 결과는 그 뒤에 붙은 행동만큼의 비용을 치릅니다.

확인하지 못한 것

  • 학습 도구의 메모리와 정확도 수치를 뒷받침하는 전체 실행입니다. 그 페이지를 열지 못해서 수치는 만든 쪽의 보고로 기록했습니다.
  • 한 번의 forward pass가 긴 질문 목록을 질문 하나와 같은 비용으로 처리하는지입니다. 공개된 중앙값 지연은 GPU 한 장에서 질문 하나를 처리한 값입니다.
  • 봉인된 문제 묶음의 평가셋과 집계 코드입니다. 보드는 점수를 공개하고 묶음은 닫아 둡니다.
  • 인기 화면에 적힌 제품 이름 몇 개입니다. 화면에 있는 항목으로만 두었고, 이름마다 모델이 있는지에 대해서는 어느 쪽으로도 말하지 않았습니다.
  • 이 모델들의 한국어 정확도입니다. 네 측정 가운데 한국어 묶음을 보고하는 곳이 없어서, 쓰려는 쪽이 자기 자료로 직접 재야 합니다.

출처