ROUGE
Recall-Oriented Understudy for Gisting Evaluation
요약 품질을 측정하는 지표군. ROUGE-1, ROUGE-L 등.
Recall-Oriented Understudy for Gisting Evaluation
요약 품질을 측정하는 지표군. ROUGE-1, ROUGE-L 등.
ROUGE(Recall-Oriented Understudy for Gisting Evaluation)는 텍스트 요약 품질을 자동으로 평가하는 지표군입니다. 생성된 요약과 참조 요약 간의 n-gram 중복을 측정하여 점수를 산출하며, ROUGE-1, ROUGE-2, ROUGE-L 등 다양한 변형이 있습니다.
ROUGE는 2004년 Chin-Yew Lin이 USC에서 개발했으며, 원래 문서 요약 시스템 평가를 위해 설계되었습니다. BLEU가 기계 번역의 정밀도(Precision)에 초점을 맞춘 반면, ROUGE는 재현율(Recall)을 강조하여 요약 평가에 더 적합합니다.
ROUGE의 핵심 원리는 n-gram 매칭입니다. ROUGE-1은 단어(unigram) 중복, ROUGE-2는 연속 2단어(bigram) 중복을 측정합니다. ROUGE-L은 최장 공통 부분 수열(LCS)을 사용하여 순서를 고려한 유사도를 계산합니다. 일반적으로 F1 점수(Precision과 Recall의 조화평균)를 최종 지표로 사용합니다.
실무에서 ROUGE는 요약, 질의응답, 대화 생성 등 NLG 태스크의 표준 평가 지표입니다. 다만 의미적 유사성을 완벽히 포착하지 못하는 한계가 있어, BERTScore, BLEURT 등 임베딩 기반 지표와 함께 사용하는 추세입니다. LLM 시대에는 GPT-4 기반 평가도 병행됩니다.
rouge-score 라이브러리를 활용한 ROUGE 점수 계산 예제입니다.
# pip install rouge-score
from rouge_score import rouge_scorer
# ROUGE Scorer 초기화
scorer = rouge_scorer.RougeScorer(['rouge1', 'rouge2', 'rougeL'], use_stemmer=True)
# 참조 요약 (정답)
reference = "인공지능은 기계가 인간처럼 학습하고 판단하는 기술입니다."
# 생성된 요약 (모델 출력)
candidate = "AI는 기계가 학습하고 추론하는 기술입니다."
# ROUGE 점수 계산
scores = scorer.score(reference, candidate)
print("=== ROUGE Scores ===")
for metric, score in scores.items():
print(f"{metric}:")
print(f" Precision: {score.precision:.4f}")
print(f" Recall: {score.recall:.4f}")
print(f" F1: {score.fmeasure:.4f}")
# 여러 샘플의 평균 계산
def calculate_avg_rouge(references, candidates):
"""여러 샘플의 평균 ROUGE 점수 계산"""
total_scores = {'rouge1': 0, 'rouge2': 0, 'rougeL': 0}
for ref, cand in zip(references, candidates):
scores = scorer.score(ref, cand)
for metric in total_scores:
total_scores[metric] += scores[metric].fmeasure
return {k: v / len(references) for k, v in total_scores.items()}