결정 모델(Decision Models): 소개
요약
본 글은 '결정 모델(Decision Models)'이라는 새로운 AI 개념을 소개합니다. 챗봇이 단어 출력을 목표로 한다면, 결정 모델은 if 문에 사용되는 숫자 형태의 확률적 결과를 반환하는 것이 특징입니다. 이는 상태와 스키마를 기반으로 noul, choice, score 세 가지 유형의 질문에 답할 수 있습니다.
핵심 포인트
- 결정 모델은 단어 대신 숫자로 된 확률을 출력합니다.
- noul(예/아니오), choice(옵션 선택), score(순서화된 척도)가 주요 결과 유형입니다.
- 별도의 학습 없이 자연어로 질문만 작성하여 활용할 수 있습니다.
결정 모델! 이 카테고리는 허브에 약 3주 전에 등장한 새로운 유형인데, 이름 때문에 오해를 사기 쉽습니다. 모두가 이것을 '결정을 내리는 모델'로 읽고 마치 에이전트가 비행기를 예약하는 것을 상상합니다.
실제로는 그렇지 않습니다. 이 개념이 생소하다면 계속 읽어보세요!
⏳ 빠르게 훑어보는 분들을 위한 요약:
챗봇(chatbot) → 단어(words)를 원할 때 사용합니다.
결정 모델(decision model) → if 문에 넣을 수 있는 숫자(number)를 원할 때 사용합니다.
알아두면 좋은 핵심 용어들
- noul: 예/아니오(yes/no) 유형입니다. 이것이 사실인가요? → 하나의 숫자로 '예'일 확률을 나타냅니다.
- choice: 이 2~16개 옵션 중 어느 것인가요? → 각 옵션에 대한 확률을 나타냅니다.
- score: 이 순서화된 척도에서 어디쯤인가요? → 레벨별 확률과 평균값을 함께 제공합니다.
결정 모델이 실제로 무엇인지
사용자는 상태(state) (여기서는 '견종 입양 목록에 제출된 사진'이라는 문구와 함께 사진)와 **스키마(schema)**를 전송합니다. 이것은 제 워크플로우에서 사용한 정확한 형식입니다:
{
"breed": {
"criteria": {
...
그리고 다음과 같은 결과가 반환됩니다:
{
"breed": {
"choice": "newfoundland",
...
이 과정은 모든 내용을 모델을 통해 한 번에 실행합니다.
거의 모든 것을 다루는 세 가지 질문 유형(noul, choice, score)이 있습니다. 호출하는 순간 평범한 영어로 직접 질문을 작성하면 됩니다. 별도의 학습 단계가 필요 없고 고정된 카테고리 목록도 없습니다. 문구나 답변만 바꾸면 결과가 달라집니다.
같은 사진, 두 모델
저는 이 두 모델 모두에게 뉴펀들랜드의 같은 사진과 네 가지 질문(개견인가요?, 어떤 견종인가요 (뉴펀들랜드, 세인트 버나드, 베르네즈 또는 골든 리트리버), 작은 아파트에 적합한가요?, 사진은 얼마나 좋은가)을 제공했습니다. 하나는 챗봇이고 다른 하나는 결정 모델입니다. 둘 다 27b 크기입니다. 결과물을 보세요.
입력값. 공원 속의 뉴펀들랜드견.
여기 채팅봇, Qwen3.8-27B가 있습니다:
네, 사진에 개가 확실히 있습니다. 큰 개이고, 옆모습으로 서서 머리를 카메라 쪽으로 돌리고 혀를 내밀고 있습니다.
채팅봇의 답변은 정확합니다. 개이며, 뉴펀들랜드견입니다. 하지만 그것이 말한 어떤 것도 값(value)이 아닙니다. '뉴펀들랜드'와 '훌륭하다(excellent)'라는 결론에 도달하는 데 1,702자가 사용되었지만, 그 어디에서도 얼마나 확신하는지 말해주지는 않습니다. 마치 개라는 사실만큼이나 품종에 대해 확실한 것처럼 들립니다. 당신은 그것을 기반으로 분기할 수 없고, 코드도 마찬가지입니다.
결정 모델(Decision Model)이 말한 것
이것이 clef의 전체 출력입니다.
멋진 부분은 어떤 분류기(classifier)도 답할 수 없는 질문입니다
flat_friendly를 보세요. 아무도 clef에게
챗봇은 같은 실행에서 뉴펀들랜드(newfoundland)를 언급했고, 동일한 옵션으로 다른 실행에서는 티베탄 마스티프(tibetan mastiff)를 언급했습니다. 두 경우 모두 이유 목록과 함께, 위에서 보이는 것과 똑같이 확신에 찬 어조로 말했습니다.
...이것이 결정 모델(decision models)이 존재하는 이유입니다!
if answers["dog_present"]["noul"] < 0.5:
reject(photo) # 0.98 — skipped
elif answers["breed"]["confidence"] > 0.9:
...
이 목록은 품종을 확인하기 위해 사람에게 전달될 것이며, 두 거대견 품종이 비슷하게 보일 때 올바른 조치입니다.
워크플로우(workflow)를 만든 방법
전체 비교 과정은 하나의 gradio gr.Workflow 그래프입니다. 이 정확한 워크플로우는 여기에서 찾을 수 있습니다.
노드는 세 가지 종류로 구성됩니다. 왼쪽으로 들어오는 입력(사진), 질문 스키마와 상태를 담고 있는 세 개의 텍스트 상자, 그리고 챗봇을 위한 동일한 질문의 영어 버전이 적힌 텍스트 상자입니다. 중간에 두 개의 모델이 있고, 오른쪽으로 나가는 출력이 있습니다.
중간에 있는 두 모델은 완전히 다른 출처에서 왔습니다. clef는 제가 올린 gradio space입니다. qwen은 hf inference를 통해 호출하는 호스팅된 모델입니다. 일반적으로 이것은 두 개의 다른 라이브러리, 사진을 전송하는 두 가지 다른 방법, 그리고 처리해야 할 답변의 두 가지 다른 형태를 의미합니다. 캔버스에서는 그저 두 개의 노드일 뿐입니다. 사진에서 각각의 노드로 와이어만 끌어다 놓으면 끝입니다. 둘 다 접착 코드(glue code)가 필요 없습니다.
그리고 이 사진 노드는 두 모델 모두에 피드를 제공하므로, 어느 모델도 다른 모델이 받지 못한 것을 받을 수 없습니다.
여기에 또 하나의 작은 노드가 있습니다: render_decisions. 이것은 clef의 원시 답변을 시각화하는 저만의 일반 파이썬 함수입니다. bind=를 사용하여 함수를 전달하면 캔버스에 노드로 표시되며, 따라서 space, 호스팅된 모델, 그리고 저의 코드가 모두 같은 그래프 안에 위치하게 됩니다.
import gradio as gr
def render_decisions(response) -> str:
...
이것이 앱입니다. 이 그래프는 캔버스에서 편집하는 json 파일입니다. 세 가지 출력 모두가 그 하나의 사진에 연결되어 있기 때문에, gradio는 이를 하나의 연결된 워크플로우로 취급하고 세 가지를 한 번에 반환하는 단일 API 엔드포인트를 제공합니다. 캔버스와 앱은 동일한 객체입니다:
from gradio_client import Client, handle_file
app = Client("hmb/what-a-decision-model-does")
...
같은 그래프에 브라우저가 필요 없습니다.
직접 실행해 보기! 자신만의 사진을 넣거나, 질문을 다시 작성하여 완전히 다른 것을 물어볼 수 있습니다.
알아두면 유용한 몇 가지 사항
이것은 단순히 분류기(classifier)인가요? 어느 정도는 그렇습니다. 보정된 분류기(calibrated classifiers)는 오랫동안 좋았습니다. 새로운 부분은 호출 시점에 영어로 카테고리를 작성한다는 것이며, 훈련할 필요가 없고 하나의 모델이 예/아니오, 하나 선택, 그리고 점수화 질문을 같은 패스에서 처리합니다.
Noul이란 무엇인가요? 단순히 예/아니오 질문입니다. 0과 1 사이의 하나의 숫자를 받게 되는데, 이는 "예"일 확률을 나타냅니다. 0.97은 거의 확실히 '예'이고, 0.03은 거의 확실히 '아니오'이며, 0.5는 진정으로 알지 못한다는 의미입니다. 재미있는 사실! 💡 이 이름은 동전 던지기를 뜻하는 수학 용어인 "베르누이(Bernoulli)"에서 유래했습니다. 이것이 별도의 신뢰도 숫자가 없는 유일한 유형인 이유이기도 합니다. 확률 자체가 이미 신뢰도를 나타내기 때문입니다.
챗봇보다 똑똑한가요? 아닙니다. 위에 언급된 두 모델 모두 뉴펀들랜드에 대해 올바르게 답했습니다. 차이점은 답변의 형태이며, 그중 하나는 얼마나 근접했는지 알려줍니다.
대신 LLM에 JSON으로 프롬프트를 요청할 수 있나요? 할 수 있으며 실제로 그렇게 하는 사람들도 있습니다. 확률처럼 보이는 숫자를 받지만 텍스트로 생성되었기 때문에 반올림된 값에 머무르고, 실행마다 변동하며, 이를 측정하는 것은 아무것도 없습니다. 일회성 사용에는 괜찮지만, 임계값으로는 불안정합니다.
선택지는 몇 가지가 가능한가요? 2개부터 16개까지입니다. 점수(score)는 사용자가 정의하는 고정된 순서형 척도입니다. Noul은 단순히 참/거짓(true/false)입니다.
이미지를 처리하나요? Clef가 합니다. 이 워크플로우에 있는 것이 바로 그것이며, 상태(state)는 사진이었습니다. 일부는 텍스트 전용입니다.
속도는 어떤가요? 모델을 한 번 통과하며 답변을 읽어냅니다. 챗봇이 거의 모든 시간을 보내는 '글을 쓰는' 과정이 없습니다. 작은 규모의 경우 GPU에서 수십 밀리초(milliseconds)밖에 걸리지 않습니다. Space를 통한 호출은 약 10초가 걸리지만, 이는 모델 자체가 느려서가 아니라 앞에 대기열이 있는 무료 공유 GPU 덕분입니다.
재배포 없이 질문을 바꿀 수 있나요? 예. 스키마(schema)는 설정(config)이 아니라 입력값입니다. 위의 Space에 있는 것은 캔버스에서 편집할 수 있는 텍스트 노드입니다.
작성 도구:
• hmb/what-a-decision-model-does: 본 기사에서 다루는 워크플로우 실행
• Cloudflare/clef: 27B 결정 모델, apache-2.0, qwen3.8-27b에서 사후 학습됨
• hugging-apps/clef-decision-model: 해당 공간이 호출하는 곳
• huggingface.co/models?other=decision-model: huggingface에서 발견할 수 있는 더 많은 결정 모델
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기