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 허용
- 의학적 의미 일치
를 평가합니다.
계산 방식
대략적으로:
- 문장을 embedding
- token 간 cosine similarity 계산
- 최적 matching 수행
- 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로 남김
→ 오답
'AL,ML 학부연구생 > 공부 기록' 카테고리의 다른 글
| 파인튜닝 LoRA의 확장형 QLoRA 는 무엇인가? QLoRA 이해하기 (0) | 2026.05.19 |
|---|---|
| PEFT 중 LoRA 파인튜닝은 무엇인가? LoRA 이해하기 (0) | 2026.05.18 |
| CNN의 순전파 역전파 과정 (0) | 2026.04.10 |
| Optimizer 이란 무엇이고, 이중 ADAM 은 무엇인가? (0) | 2026.04.10 |
| 인터넷 쿠키(Cookie)란 무엇인가 (0) | 2026.03.31 |