AL,ML 학부연구생/공부 기록

metrics.py 평가 지표들 (ROUGE-1/2/L, BERT Score, BELU Score, P/R/F1, Agenda Completeness, Linking/Mentioned/Resolution Accuracy)

김형준 2026. 5. 18. 16:14
반응형

1. ROUGE-1 / ROUGE-2 / ROUGE-L

구현:
compute_rouge()

scorer = rouge_scorer.RougeScorer(
    ["rouge1", "rouge2", "rougeL"],
    use_stemmer=True
)
 

정의

모델이 생성한 summary(prediction)와 정답 summary(reference)가 얼마나 단어 수준에서 겹치는지 측정하는 지표입니다.

Clinical summarization에서 가장 전통적으로 쓰이는 평가입니다.


ROUGE-1

의미

1-gram(단어 1개 단위) overlap

정답:

"persistent cough for three weeks"

예측:

"cough lasting three weeks"

공통 단어:

  • cough
  • three
  • weeks

같은 단어가 얼마나 많이 겹치는지 평가합니다.

평가하는 것

  • 핵심 키워드 보존 여부
  • 중요한 clinical term 포함 여부

즉:

  • cough
  • diabetes
  • chest pain
  • lisinopril

같은 의료 핵심 단어를 잘 잡았는지 평가합니다.


ROUGE-2

의미

2-gram(연속된 두 단어) overlap

예시:

정답:

"chest pain worsening"

예측:

"chest pain increasing"

공통 bigram:

  • chest pain

평가하는 것

단순 단어가 아니라 문장 구조와 phrase 수준 일치성을 평가합니다.

ROUGE-1보다 더 엄격합니다.

clinical phrase:

  • chest pain
  • shortness of breath
  • blood pressure

같은 표현을 정확히 재현했는지 봅니다.


ROUGE-L

의미

Longest Common Subsequence 기반

즉:
문장 순서를 유지하면서 얼마나 긴 공통 sequence가 존재하는지 평가합니다.

평가하는 것

문장 전체 구조 유사성

예시:

정답:

patient reports cough for three weeks

예측:

patient reports severe cough for three weeks

공통 subsequence:

patient reports cough for three weeks

길이가 길기 때문에 점수가 높습니다.

값 범위

  • 0 ~ 1
  • 높을수록 좋음

이 프로젝트에서 의미

Agenda summary가:

  • ground truth annotation과
  • lexical하게 얼마나 비슷한지

평가합니다.

즉: "문장을 얼마나 비슷하게 썼는가"


2. BERTScore

구현: compute_bertscore()

score(... model_type="microsoft/deberta-xlarge-mnli")

정의

ROUGE는 단어가 정확히 같아야 높은 점수가 나오지만,
BERTScore는 의미(semantic similarity)를 평가합니다.

Transformer embedding 공간에서 cosine similarity를 계산합니다.

예시

정답:

patient has chest pain

예측:

patient reports thoracic discomfort

ROUGE:

  • 거의 낮음

BERTScore:

  • 의미가 비슷하므로 높음

평가하는 것

Semantic correctness

  • 의미 보존
  • paraphrase 허용
  • 의학적 의미 일치

를 평가합니다.

계산 방식

대략적으로:

  1. 문장을 embedding
  2. token 간 cosine similarity 계산
  3. 최적 matching 수행
  4. precision/recall/F1 계산

출력값

원래는:

  • Precision
  • Recall
  • F1

하지만 현재는

return F1.mean().item()
 

semantic similarity F1 하나만 반환합니다.

값 범위

보통:

  • 0 ~ 1
  • clinical task에서는 0.80 이상이면 꽤 높음

이 프로젝트에서 의미

모델이:

  • wording은 달라도
  • 임상 의미를 유지했는지

평가합니다.

ROUGE보다 clinical summarization에 더 중요합니다.


3. BLEU Score

정의

BLEU(BiLingual Evaluation Understudy)는
모델이 생성한 문장이 정답 문장과 얼마나 정확하게 n-gram 수준에서 일치하는지 평가하는 precision 기반 지표입니다.

의미

모델 출력이:

  • 정답 표현을
  • 얼마나 정확하게
  • 같은 단어 순서와 phrase로

재현했는가를 평가합니다.

평가 단위

BLEU는 보통:

  • unigram (1-gram)
  • bigram (2-gram)
  • trigram (3-gram)
  • 4-gram

precision을 조합해서 계산합니다.

계산 방식

1. n-gram precision 계산

정답:

patient reports chest pain for two weeks

예측:

patient reports chest discomfort for two weeks

공통 unigram:

  • patient
  • reports
  • chest
  • for
  • two
  • weeks

공통 bigram:

  • patient reports
  • for two
  • two weeks

2. Brevity Penalty(BP)

모델이 너무 짧은 문장을 출력하면 패널티를 부여합니다.

예시:

정답:

patient reports severe chest pain for two weeks

예측:

chest pain

precision만 보면 높을 수 있지만,
정보를 과도하게 생략했으므로 penalty 적용

평가하는 것

평가 요소설명
표현 정확성 annotation wording을 얼마나 정확히 따라했는가
phrase consistency clinical phrase를 제대로 재현했는가
문장 구조 유사성 단어 순서와 연결이 유사한가
lexical precision 불필요한 단어 생성이 적은가

값 범위

  • 0 ~ 1
  • 높을수록 좋음

이 프로젝트에서 의미

Agenda summary가:

  • human annotation wording과
  • 얼마나 정확하게 일치하는가
  • annotation style consistency
  • 표현 정확성
  • phrase-level fidelity

ROUGE / BERTScore/ BELUScore  차이

정식 이름 Recall-Oriented Understudy for Gisting Evaluation BERTScore BiLingual Evaluation Understudy
핵심 목적 정답 내용을 얼마나 많이 포함했는가 의미가 얼마나 비슷한가 정답 표현을 얼마나 정확히 따라했는가
평가 중심 Recall 중심 Semantic similarity 중심 Precision 중심
비교 방식 단어 overlap embedding similarity n-gram precision
기반 기술 문자열 비교 Transformer/BERT embedding 문자열 n-gram
의미 이해 가능? 거의 불가능 가능 거의 불가능
단어가 달라도 의미 같으면? 낮게 나옴 높게 나옴 낮게 나옴
문장 순서 영향 있음 상대적으로 적음 매우 큼
paraphrase 허용 약함 강함 매우 약함
clinical NLP 적합성 중간 매우 높음 낮은 편
summarization 적합성 매우 많이 사용 최근 가장 중요 상대적으로 덜 사용
translation 적합성 중간 중간 매우 강함
평가 대상 정보 누락 여부 의미 보존 여부 표현 정확성
잘 보는 것 핵심 키워드 포함 semantic correctness wording fidelity
못 보는 것 의미 유사성 exact wording semantic paraphrase
계산 단위 unigram/bigram/LCS contextual embedding 1~4gram precision
대표 세부 지표 ROUGE-1/2/L Precision/Recall/F1 BLEU-1~4
출력 범위 0~1 0~1 0~1
높을수록 정답 내용을 많이 포함 의미가 유사 표현이 정확
계산 비용 낮음 높음 낮음
속도 빠름 느림 빠름
LLM 평가 적합성 보통 매우 높음 제한적
hallucination 탐지 어려움 일부 가능 어려움
semantic paraphrase 평가 거의 불가 매우 강함 약함

4. Precision / Recall / F1 (Detection Metrics)

구현: compute_detection_metrics()

무엇을 평가?

이건 summary 품질이 아니라:

"이 utterance를 올바른 type으로 분류했는가" 평가합니다.

클래스들

 
ALL_CLASSES = [
    "agenda_item",
    "detail",
    "medication",
    "social_history",
    "follow_up",
    "question",
    "question_unanswered",
    "irrelevant"
]
 

Precision

정의

모델이 어떤 클래스로 예측한 것 중 실제로 맞은 비율

수식: Precision=TP / TP + FP

예시

모델이:

  • medication 10개 예측

실제로:

  • 7개만 medication

Precision = 7/10 = 0.7

의미

거짓 탐지(false positive)가 적은가?

즉: "쓸데없는 agenda를 얼마나 덜 만들었는가"


Recall

정의

실제 존재하는 항목 중
모델이 찾아낸 비율

Recall = TP / TP + FN

예시

실제 medication:

  • 20개 존재

모델이:

  • 15개 발견

Recall = 15/20 = 0.75

의미

놓친 정보(FN)가 적은가?

clinical에서는 매우 중요합니다.


F1

정의

Precision과 Recall의 조화평균

F1=2PR / P + R

의미

  • precision만 높아도 안 됨
  • recall만 높아도 안 됨

둘의 균형 평가


5. Agenda Completeness

구현:
compute_agenda_completeness()

정의

실제 존재하는 agenda item 중
시스템이 얼마나 발견했는가

계산 방식

각 ground truth agenda item에 대해:

BERTScore(system_summary, reference_item)
 

를 계산하고,

threshold:

> 0.85
 

면 발견했다고 간주합니다.

예시

실제 agenda:

  • cough
  • chest pain
  • hypertension
  • smoking history

모델이:

  • cough
  • hypertension
  • smoking

찾음

→ completeness = 3/4 = 0.75

평가하는 것

전체 visit에서:"핵심 이슈를 얼마나 빠짐없이 추적했는가"


6. Linking Accuracy

구현:
compute_linking_accuracy()

정의

detail이 올바른 agenda item에 연결되었는가

예시

agenda:

  • cough
  • diabetes

detail:

"yellow sputum"

정답:

  • cough에 연결

시스템:

  • diabetes에 연결

→ 오답

평가 대상

state_tracker.py의 linking 시스템입니다.

embedding similarity 기반으로 parent agenda item 찾습니다.


7. Mentioned / First Mention Accuracy

구현:
compute_first_mention_accuracy()

정의

새로운 정보인지, 이미 나온 정보 반복인지 정확히 판별했는가

예시

처음:

patient has cough

나중:

cough still persistent

두 번째는 repeat입니다.

평가하는 것

conversation memory tracking 능력

구현 방식

state_tracker.py

cosine similarity > threshold
 

이면 repeated로 판단합니다.


8. Resolution Accuracy

구현:
compute_resolution_accuracy()

정의

agenda item 상태를 올바르게 추적했는가

상태:

  • mentioned
  • discussed
  • resolved
  • unresolved

예시

환자가:

chest pain 있어요

의사가:

검사합시다

→ resolved

근데 시스템이:

  • discussed로 남김

→ 오답

반응형