[meow] Bert-score : 문장 간 의미 유사도 평가
LLM 말투변환에서 원문의 의미를 유지하면서
말투만 변화시키는 것이 중요하다.
Introduction
- 기존의 방식은 "Exact Match" 혹은 "n-gram match"를 기반으로 를 평가한다.
- Exact Match : ex) 답답형 문제 정답
- 방식 : 완벽하게 동일한 결과를 도출했는지 평가
- 한계 : 동일한 의미의 다른 표현에 대해 오답으로 평가 (구조적-의미적 차이 반영x)
- n-Gram Matching Approach : ex) BLEU Score, METEOR Score
- 방식 : 단어 묶음의 일치를 기반으로 평가
- 한계 : 문장 구조의 변화와 의미 유사성 등을 완벽히 반영하지 못함.
- Exact Match : ex) 답답형 문제 정답
- Bert Score는 임베딩을 통한 유사도를 평가한다.
- Embedding-Based Metrics : Bert의 임베딩을 통해 유사도를 계산
- Bert 방식 : contextual embedding + Cosine similarity
- IDF 가중치 추가 가능 : 드물게 등장하는 문장에 대해 높은 가중치 부여
- Precision, Recall, F1 기반으로 평가
- 장점 : 동의어, 유사 표현, 문장 재구성 등 반영하여 평가 가능
"contextual embeddings, such as BERT (Devlin et al., 2019) and ELMO (Peters et al., 2018),
can generate different vector representations for the same word in different sentences depending on
the surrounding words, which form the context of the target word."
- BERT를 사용하여 두 문장의 모든 토큰을 임베딩 : 이때 다른 문장의 동일한 단어를 서로 다른 벡터값으로 계산 (문맥 내 의미 반영)
- 두 문장 : 참조 문장 - x / 생성 문장 - y
- 유사도 매칭 : Cosine similarity를 값으로 사용한 계산
- Recall : x의 각 토큰을 y의 가장 유사한 토큰에 매핑하여 평균 유사도 계산
- = 참조 문장(x) 기준으로, 생성 문장(x̂)에서 얼마나 의미를 잘 복원했는가
- Precision : y의 각 토큰을 x의 가장 유사한 토큰에 매핑하여 평균 유사도 계산
- = 생성 문장(x̂) 기준으로, 참조 문장(x)에 얼마나 의미적으로 적합한 토큰이 있는가
- F1 score : Precision과 Recall의 조화 평균
- = BERT Score 최종값
- Recall : x의 각 토큰을 y의 가장 유사한 토큰에 매핑하여 평균 유사도 계산
Bert Score Discussion
- BERTScore는 기존의 n-gram 기반 지표의 한계를 극복하기 위해 제안된 의미 기반 텍스트 평가 방식임.
- 문장을 BERT 임베딩 후 cosine 유사도를 계산하여, 표현이 달라도 의미가 비슷하면 높은 점수를 부여함.
- 다양한 실험에서 BLEU, METEOR 등 기존 지표보다 더 높은 사람 평가 상관도를 보였음.
- 다만, 하나의 설정이 모든 태스크에 항상 최고 성능을 내는 것은 아니므로, 상황에 따라 모델과 파라미터를 선택해야 함.
- 영어에는 RoBERTa-large, 번역에는 FBERT, 다국어에는 multilingual BERT 사용을 권장함.
Ko-BERTScore
- 기본 설명
- BERTScore using pretrained Korean BERT.
- This package provides re-implemented version of BERTScore.
- 사용가능한 Ko-Bert Score 모델
model | layer index | indexcorrelation(F) | etc |
'beomi/kcbert-base' ✅ | 4 | 0.622 | 안정성과 상관도 점수 가장 높음 |
'monologg/distilkobert' | 12 | 0.334 | |
'monologg/kobert' | 2 | 0.190 | |
'monologg/koelectra-base-v2-discriminator' | 12 | 0.098 |
- 선택한 모델 : 'beomi/kcbert-base'
- 안정성과 상관도 점수(F1 score) 가장 높음
- 4 번째 레이어 사용 : 4번째 층의 출력값을 의미 유사도 평가(BERTScore)에 사용
precision, recall, f1 = kobert_score(
refs, hyps,
model_type='kcbert-base',
num_layers=4 # ← 바로 이 부분이 "4번 레이어" 지정임
)
데이터에 적용
- 현재 데이터 구조 : Jsonl
- instruction : 프롬프트 지시사항
- input : 입력값 (변환전 사용자 요청글)
- output : 출력값 (변환후 사용자 반환글)
{"instruction": "다음 문장을 cat의 sad한 말투로 바꿔줘.", "input": "오늘은 되려나?", "output": "오늘은. 되려나 냥.🐾 혼자 남겨진 기분인 냐옹.😢"}
{"instruction": "다음 문장을 cat의 happy한 말투로 바꿔줘.", "input": "오늘은 유난히 햇살이 좋아서 산책을 다녀왔어요. 기분이 한결 나아졌네요.\\r\\n\\r\\n", "output": "냐하하! 오늘따라 햇살이 따스해서 기분 좋게 🐾 산책 다녀왔다냥! 볕이 좋으니 꼬리도 살랑살랑 신이 나는 거 있지, 냐옹! 기분이 아주 째진다냥! ✨"}
{"instruction": "다음 문장을 dog의 grumpy한 말투로 바꿔줘.", "input": "출근길에 커피를 흘려서 하루가 시작부터 꼬였어요. 짜증이 확 밀려오네요.\\r\\n\\r\\n", "output": "주인, 아침부터 🐾 커피 쏟고 난리다멍! 산책은 안 가고, 낑낑거리는 소리 시끄럽다왈. 간식이나 내놓으라개. 😤"}
...
- KoBert 적용 후
{"instruction": "다음 문장을 dog의 normal한 말투로 바꿔줘.",
"input": "귀여움 최강은 당연 나 골댕이다!",
"output": "귀여움 최강은 당연히 나, 🐾 골댕이 아니겠냐왈! 내가 제일 귀엽다멍!",
"kobertscore_f1": 0.8013136386871338 }
{"instruction": "다음 문장을 dog의 angry한 말투로 바꿔줘.",
"input": "출근길에 커피를 흘려서 하루가 시작부터 꼬였어요. 짜증이 확 밀려오네요.\\r\\n\\r\\n",
"output": "주인, 낑낑! 아침부터 웬 이상한 물 웅덩이다왈! 킁킁, 🐾 으르렁! 내 산책 길을 망치다니, 용서 못한다멍! 으아르릉! 오늘 간식은 없다 멍! 🔥",
"kobertscore_f1": 0.29795435070991516}
kobertscore_f1 분포 확인
- 점수 범위 : 0~1 점
- 0.9점은 변환 전과 후가 거의 동일한 상태일 가능성 높음.
- 0.5~0.8점이 문장 구조를 변경하면서 말투 변환 가능성 있음.
참고자료
https://arxiv.org/abs/1904.09675
BERTScore: Evaluating Text Generation with BERT
We propose BERTScore, an automatic evaluation metric for text generation. Analogously to common metrics, BERTScore computes a similarity score for each token in the candidate sentence with each token in the reference sentence. However, instead of exact mat
arxiv.org
https://heygeronimo.tistory.com/28
[논문이해] BERTSCORE: EVALUATING TEXT GENERATION WITH BERT
논문명: BERTSCORE: EVALUATING TEXT GENERATION WITH BERT https://arxiv.org/abs/1904.09675 BERTScore: Evaluating Text Generation with BERT We propose BERTScore, an automatic evaluation metric for text generation. Analogously to common metrics, BERTScore c
heygeronimo.tistory.com
https://github.com/lovit/KoBERTScore
GitHub - lovit/KoBERTScore: BERTScore for Korean
BERTScore for Korean. Contribute to lovit/KoBERTScore development by creating an account on GitHub.
github.com