본문 바로가기
C.W.K.
Stream
Lesson 03 of 08 · published

Eval Metric 과 evaluate 라이브러리

~24 min · training, eval, metrics

Level 0스카우트
0 XP0/50 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

평가 함수는 예측과 정답을 지표로 바꿔

Trainer는 평가 시점마다 compute_metrics(pred)를 불러. pred.predictions에는 logit이나 예측, pred.label_ids에는 정답이 들어 있고, 함수가 dict를 돌려주면 Trainer가 기록하고 추적해.

표준 지표는 Evaluate에서 불러와

evaluate.load('accuracy')처럼 accuracy, F1, BLEU, ROUGE, BERTScore, perplexity, exact match를 Hub에서 불러올 수 있어. 한 번에 계산할 때는 compute(), 여러 batch를 누적할 때는 add_batch()를 사용해.

편한 지표가 아니라 실패를 드러내는 지표를 골라

균형 분류에는 accuracy, 불균형 분류에는 F1이 더 적합해. 번역과 요약의 BLEU·ROUGE는 사람 판단과 어긋날 수 있으므로 대화 평가에서는 BERTScore나 embedding 유사도, 사람 검토를 함께 써.

Code

evaluate 와 compute_metrics·python
import evaluate
import numpy as np

f1 = evaluate.load("f1")
acc = evaluate.load("accuracy")

def metrics(pred):
    preds = pred.predictions.argmax(-1)
    return {
        "accuracy": acc.compute(predictions=preds, references=pred.label_ids)["accuracy"],
        "f1_macro": f1.compute(predictions=preds, references=pred.label_ids, average="macro")["f1"],
    }
큰 eval 셋의 streaming aggregation·python
import evaluate
acc = evaluate.load("accuracy")

# 100k eval set 가정; pred 한 번에 다 materialize 원치 않음.
for batch in eval_loader:
    with torch.no_grad():
        preds = model(**batch).logits.argmax(-1)
    acc.add_batch(predictions=preds.cpu().numpy(), references=batch["labels"].cpu().numpy())

print(acc.compute())

External links

Exercise

0 번 레슨의 IMDB run 에 compute_metrics 추가. accuracy, F1 macro, F1 weighted 추적. TensorBoard 가 셋 다 보이는지 검증. 어떤 게 끝에 가장 높은가? 어떤 게 가장 fluctuate? 샘플 리뷰 몇 개에 human-perceived quality 가장 잘 예측?

Progress

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

댓글 0

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

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