본문 바로가기
C.W.K.
Stream
Lesson 04 of 06 · published

퍼플렉서티, F1, 분류 지표

~18 min · metrics, classification, perplexity

Level 0추측자
0 XP0/55 lessons0/10 achievements
0/150 XP to next level150 XP to go0% complete

과제 구조에 맞는 지표를 골라

퍼플렉서티, 정확도, 정밀도, 재현율, F1, AUC는 고전 머신러닝의 기본 지표야. LLM 출력을 분류 레이블이나 확률로 나타낼 수 있을 때도 그대로 적용할 수 있어.

퍼플렉서티

퍼플렉서티는 언어 모델이 주어진 텍스트를 얼마나 예측하기 어려워하는지 측정해. 수치가 낮을수록 좋아. 주로 기본 언어 모델을 평가할 때 써. 예를 들어 모델이 자연스러운 영어에 합리적인 확률을 부여하는지 확인할 수 있지. 제품 기능을 직접 평가하는 데는 적합하지 않지만, 미세 조정으로 모델 성능이 망가지지 않았는지 빠르게 점검할 때 유용해.

분류 지표

의도 분류, 콘텐츠 검열, 감성 분석처럼 출력에 레이블을 지정하는 과제에서는 다음 네 가지 지표를 주로 써:

  • 정확도 — 전체 예측 가운데 정답의 비율이야. 클래스 분포가 균형을 이룰 때 특히 유용해.
  • 정밀도 — 양성으로 예측한 항목 가운데 실제 양성의 비율이야. “양성으로 예측한 항목 가운데 실제 양성은 얼마나 많아?”에 답해.
  • 재현율 — 실제 양성 가운데 찾아낸 비율이야. “놓친 양성은 얼마나 많아?”에 답해.
  • F1 — 정밀도와 재현율의 조화 평균이야. 불균형한 이진 분류에서 기본적으로 보고하는 지표지.
원칙: 과제에 레이블이 있다면 정밀도와 재현율을 따로 보고해. F1만 보면 둘 중 어느 쪽에서 성능이 무너졌는지 알 수 없어.

다중 클래스와 다중 레이블

다중 클래스 분류에서는 매크로 F1이나 가중 F1을 써. 매크로 F1은 클래스별 점수를 가중치 없이 평균 내므로 모든 클래스를 동등하게 다뤄. 가중 F1은 사례 수에 따라 가중치를 주므로 클래스 빈도를 반영해. 매크로 F1은 드문 클래스의 낮은 성능을 더 뚜렷하게 보여주고, 가중 F1은 사용자가 체감하는 전체 정확도에 더 가까워.

다중 레이블 분류처럼 출력이 여러 클래스에 속할 수 있다면 레이블별로 F1을 계산한 뒤 평균을 내.

혼동 행렬은 진단 도구야

단일 F1은 성능을 요약한 수치고, 혼동 행렬은 상세 진단서야. 어떤 클래스를 다른 어떤 클래스로 혼동하는지 보여주지. 분류 지표를 보고할 때는 항상 혼동 행렬도 기록해.

Code

scikit-learn 분류 보고서·python
from sklearn.metrics import classification_report, confusion_matrix

y_true = ["refund", "complaint", "praise", "refund", "complaint", "praise", "refund"]
y_pred = ["refund", "complaint", "praise", "complaint", "complaint", "praise", "refund"]

print(classification_report(y_true, y_pred, digits=3))
# Per-class precision, recall, F1, support, then macro & weighted averages.

print(confusion_matrix(y_true, y_pred, labels=["refund", "complaint", "praise"]))
# Rows = true class, columns = predicted class. Off-diagonal = errors.
실전 퍼플렉서티 — 기본 모델 빠른 점검·python
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.

External links

Exercise

제품에 의도 분기, 검열, 콘텐츠 태깅 같은 분류 단계가 있다면 최근 평가 결과에서 클래스별 정밀도, 재현율, F1을 계산해. 혼동 행렬도 출력해. 가장 큰 비대각 원소가 다음 프롬프트 개선 대상이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.