생성적 스코어링
생성적 스코어링 (Generative Scoring)
/generative_scoring 엔드포인트는 CausalLM 모델(예: Llama, Qwen, Mistral)로 지정된 토큰 ID가 다음 토큰으로 나타날 확률을 계산합니다. 각 항목(문서)과 쿼리를 이어 붙여 프롬프트를 만들고, 모델이 각 라벨 토큰이 그 프롬프트의 다음 토큰일 가능성을 예측합니다. 이를 활용하면 항목들을 쿼리에 대해 채점할 수 있습니다(예: "이 도시가 프랑스의 수도인가?"를 묻고 각 도시를 모델이 "Yes"라고 답할 가능성으로 채점).
출처: 문서
본문
/generative_scoring 엔드포인트는 CausalLM 모델(예: Llama, Qwen, Mistral)을 사용해 지정된 토큰 ID가 다음 토큰으로 나타날 확률을 계산합니다. 각 항목(문서)이 쿼리와 이어져 프롬프트를 이루고, 모델은 각 라벨 토큰이 그 프롬프트 뒤 다음 토큰일 가능성을 예측합니다. 이는 항목들을 쿼리에 대해 채점할 수 있게 합니다 — 예를 들어 "이것이 프랑스의 수도인가?"를 묻고 각 도시를 모델이 "Yes"라고 답할 가능성으로 채점하는 식입니다.
이 엔드포인트는 서버가 생성 모델(task "generate")로 시작될 때 자동으로 제공됩니다. cross-encoder·bi-encoder·late-interaction 모델을 사용하는 풀링 기반 Score API와는 별개입니다.
요구사항:
label_token_ids파라미터는 필수이며 최소 1개의 토큰 ID를 담아야 합니다.- 라벨 토큰 2개가 주어지면 점수는
P(label_token_ids[0]) / (P(label_token_ids[0]) + P(label_token_ids[1]))(두 라벨에 대한 softmax)입니다. - 라벨이 더 주어지면 점수는 모든 라벨 토큰에 걸친 첫 라벨 토큰의 softmax 정규화 확률입니다.
동작 방식 (How it works)
- 프롬프트 구성: 각 항목에 대해
prompt = query + item을 만듭니다(또는item_first=true면item + query) - 포워드 패스: 각 프롬프트에서 모델을 실행해 next-token logits를 얻습니다
- 확률 추출: 지정된
label_token_ids에 대한 logprobs를 추출합니다 - Softmax 정규화: 라벨 토큰에 대해서만 softmax를 적용합니다(
apply_softmax=true일 때) - 점수: 첫 라벨 토큰의 정규화된 확률을 반환합니다
토큰 ID 찾기 (Finding Token IDs)
라벨의 토큰 ID를 찾으려면 토크나이저를 사용하세요:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B")
yes_id = tokenizer.encode("Yes", add_special_tokens=False)[0]
no_id = tokenizer.encode("No", add_special_tokens=False)[0]
print(f"Yes: {yes_id}, No: {no_id}")
예시 (Example)
curl -X POST http://localhost:8000/generative_scoring \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen3-0.6B",
"query": "Is this city the capital of France?",
"items": ["Paris", "London", "Berlin"],
"label_token_ids": [9454, 2753]
}'
여기서 각 항목이 쿼리에 이어져 "Is this city the capital of France? Paris", "... London" 같은 프롬프트를 만듭니다. 모델은 다음 토큰을 예측하고, 점수는 "Yes"(토큰 9454) 대 "No"(토큰 2753)의 확률을 반영합니다.
응답
{
"id": "generative-scoring-abc123",
"object": "list",
"created": 1234567890,
"model": "Qwen/Qwen3-0.6B",
"data": [
{"index": 0, "object": "score", "score": 0.95},
{"index": 1, "object": "score", "score": 0.12},
{"index": 2, "object": "score", "score": 0.08}
],
"usage": {"prompt_tokens": 45, "total_tokens": 48, "completion_tokens": 3}
}
더 알아보기 (Learn more)
- Score API (풀링) — cross-encoder·bi-encoder 기반 채점
- 온라인 서빙 — vLLM 서빙 개요
- 오프라인 추론 — LLM 클래스 활용