🤖 AI/ML

ROUGE

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()}

🗣️ 실무에서 이렇게 말하세요

💬 회의에서
"요약 모델 성능은 ROUGE-L F1 기준 0.45입니다. 참조 요약과 약 45% 수준의 단어 중복이 있다는 의미예요."
💬 면접에서
"ROUGE-1은 단어 수준, ROUGE-2는 문구 수준의 유사도를 측정합니다. 추상적 요약에는 ROUGE-L이 더 적합해요."
💬 기술 토론에서
"ROUGE만으로는 의미적 유사성 평가가 어렵습니다. BERTScore와 함께 사용하거나, LLM 기반 평가를 병행하는 게 좋아요."

⚠️ 흔한 실수 & 주의사항

ROUGE만으로 품질 판단: ROUGE는 표면적 단어 중복만 측정합니다. 의미가 같아도 다른 표현이면 점수가 낮게 나옵니다.
Stemmer 미사용: 영어는 use_stemmer=True로 어간 추출을 해야 공정한 비교가 됩니다. 한국어는 형태소 분석 전처리가 필요합니다.
다중 지표 활용: ROUGE + BERTScore + Human Evaluation을 함께 사용하면 더 신뢰성 있는 평가가 가능합니다.

🔗 관련 용어

📚 더 배우기