퍼플렉서티, 정확도, 정밀도, 재현율, F1, AUC는 고전 머신러닝의 기본 지표야. LLM 출력을 분류 레이블이나 확률로 나타낼 수 있을 때도 그대로 적용할 수 있어.
퍼플렉서티
퍼플렉서티는 언어 모델이 주어진 텍스트를 얼마나 예측하기 어려워하는지 측정해. 수치가 낮을수록 좋아. 주로 기본 언어 모델을 평가할 때 써. 예를 들어 모델이 자연스러운 영어에 합리적인 확률을 부여하는지 확인할 수 있지. 제품 기능을 직접 평가하는 데는 적합하지 않지만, 미세 조정으로 모델 성능이 망가지지 않았는지 빠르게 점검할 때 유용해.
분류 지표
의도 분류, 콘텐츠 검열, 감성 분석처럼 출력에 레이블을 지정하는 과제에서는 다음 네 가지 지표를 주로 써:
정확도 — 전체 예측 가운데 정답의 비율이야. 클래스 분포가 균형을 이룰 때 특히 유용해.
정밀도 — 양성으로 예측한 항목 가운데 실제 양성의 비율이야. “양성으로 예측한 항목 가운데 실제 양성은 얼마나 많아?”에 답해.
재현율 — 실제 양성 가운데 찾아낸 비율이야. “놓친 양성은 얼마나 많아?”에 답해.
F1 — 정밀도와 재현율의 조화 평균이야. 불균형한 이진 분류에서 기본적으로 보고하는 지표지.
원칙: 과제에 레이블이 있다면 정밀도와 재현율을 따로 보고해. F1만 보면 둘 중 어느 쪽에서 성능이 무너졌는지 알 수 없어.
다중 클래스와 다중 레이블
다중 클래스 분류에서는 매크로 F1이나 가중 F1을 써. 매크로 F1은 클래스별 점수를 가중치 없이 평균 내므로 모든 클래스를 동등하게 다뤄. 가중 F1은 사례 수에 따라 가중치를 주므로 클래스 빈도를 반영해. 매크로 F1은 드문 클래스의 낮은 성능을 더 뚜렷하게 보여주고, 가중 F1은 사용자가 체감하는 전체 정확도에 더 가까워.
다중 레이블 분류처럼 출력이 여러 클래스에 속할 수 있다면 레이블별로 F1을 계산한 뒤 평균을 내.
혼동 행렬은 진단 도구야
단일 F1은 성능을 요약한 수치고, 혼동 행렬은 상세 진단서야. 어떤 클래스를 다른 어떤 클래스로 혼동하는지 보여주지. 분류 지표를 보고할 때는 항상 혼동 행렬도 기록해.
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
model_id = "meta-llama/Llama-3.2-1B"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
text = "The quick brown fox jumps over the lazy dog."
ids = tok.encode(text, return_tensors="pt")
with torch.no_grad():
loss = model(ids, labels=ids).loss
perplexity = torch.exp(loss).item()
print(f"perplexity: {perplexity:.2f}")
# A reasonable English sentence on a 1B model: ~10-30.
# Above ~100 means something is broken.