1. STS(Sentence Textual Similarity) 이란?
STS는 두 문장의 의미적 유사성을 평가하는 방법입니다. 문장 벡터 간의 유사도를 계산한 후, 그 값을 실제 라벨과 비교하여 성능을 평가합니다. 라벨은 0~5 사이의 연속적인 값으로 주어질 수 있고, 0 또는 1로 이진화된 경우도 있습니다. 이에 따라 평가 방법도 달라집니다.
1.1 Cosine Similarity
코사인 유사도는 두 벡터 간의 각도를 이용하여 문장 간 유사도를 계산합니다. 두 벡터가 이루는 각도가 작을수록 유사하다고 평가합니다.
계산식:
$$ Cosine Similarity = \frac{A \cdot B}{\|A\| \|B\|} $$
여기서:
- $ A \cdot B $ 두 벡터의 내적입니다.
- $ \| A \| 와 \| B \| $는 각 벡터의 크기(길이)입니다.
from sklearn.metrics.pairwise import cosine_similarity
cos_sim = cosine_similarity(vector1, vector2)
2. STS 라벨이 0~5일 때 성능 평가
2.1 Pearson Correlation Coefficient
Pearson 상관계수는 코사인 유사도와 실제 라벨 간의 선형 상관관계를 측정합니다. 이 지표는 두 변수의 관계가 얼마나 직선적인지를 평가합니다.
계산식:
$$ r= \frac{\sum (X_i - \bar{X})(Y_i - \bar{Y})}{\sqrt{\sum (X_i - \bar{X})^2} \sqrt{\sum (Y_i - \bar{Y})^2}} $$
여기서:
- $X_i$는 코사인 유사도 값입니다.
- $Y_i$는 실제 라벨(0~5)입니다.
- $\bar{X}$와 $\bar{Y}$는 각각의 평균입니다.
import numpy as np
# 코사인 유사도와 Pearson 상관계수 계산
pearson_corr = np.corrcoef(cos_sim, true_labels)[0, 1]
2.2 Spearman Correlation Coefficient
Spearman 상관계수는 순위 기반 상관관계입니다. 코사인 유사도 값과 실제 라벨의 순위를 매긴 후, 그 순위 간의 상관관계를 측정합니다. 비선형적인 관계도 반영할 수 있습니다.
계산식:
$$ρ=1 - \frac{6 \sum d_i^2}{n(n^2 - 1)}$$
여기서:
- $d_i$는 각 문장의 순위 차이입니다.
- $n$은 문장의 개수입니다.
from scipy.stats import spearmanr
# 코사인 유사도와 실제 라벨의 순위 상관계수 계산
spearman_corr, _ = spearmanr(cos_sim, true_labels)
3. STS 라벨이 0 또는 1일 때 성능 평가
3.1 ROC-AUC (Receiver Operating Characteristic - Area Under Curve)
ROC-AUC는 이진 분류 모델의 성능을 평가하는 지표입니다. 모델이 0과 1 사이를 얼마나 잘 구분하는지에 대한 평가를 나타냅니다.
ROC 곡선:
- $x$축: False Positive Rate (FPR)
- $y$축: True Positive Rate (TPR)
AUC 계산 원리: ROC 곡선 아래의 면적을 계산하며, 1에 가까울수록 좋은 성능을 의미합니다.
from sklearn.metrics import roc_auc_score
roc_auc = roc_auc_score(true_labels, cos_sim)
3.2 Accuracy (정확도)
정확도는 전체 예측 중 맞춘 비율입니다.
계산식:
$$Accuracy=\frac{TP + TN}{TP + TN + FP + FN}$$
여기서:
- $TP$: True Positive (참 긍정)
- $TN$: True Negative (참 부정)
- $FP$: False Positive (거짓 긍정)
- $FN$: False Negative (거짓 부정)
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(true_labels, cos_sim)
3.3 Precision (정밀도)
정밀도는 모델이 1로 예측한 것 중 실제로 1인 비율을 의미합니다.
계산식:
$$Precision = \frac{TP}{TP + FP}$$
from sklearn.metrics import precision_score
precision = precision_score(true_labels, cos_sim)
3.4 Recall (재현율)
재현율은 실제 1인 것 중 모델이 1로 예측한 비율을 나타냅니다.
계산식:
$$Recall=\frac{TP}{TP + FN}$$
from sklearn.metrics import recall_score
recall = recall_score(true_labels, cos_sim)
3.5 F1-Score
F1-Score는 정밀도와 재현율의 조화 평균을 나타냅니다.
계산식:
$$F1=2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}$$
from sklearn.metrics import f1_score
f1 = f1_score(true_labels, cos_sim)
4. 결론 및 마무리
이처럼 STS 성능 평가에서는 라벨의 범위와 평가 지표에 따라 다양한 계산 방법을 적용할 수 있습니다. 연속형 라벨(0~5)에서는 Pearson 및 Spearman 상관계수를 통해 유사도와 라벨 간의 상관관계를 측정하며, 이진 라벨(0 또는 1)에서는 ROC-AUC, Precision, Recall 등의 이진 분류 평가 지표를 사용할 수 있습니다.
'LLM' 카테고리의 다른 글
[LLM] LangGraph를 활용한 RAG 시스템 구축 가이드 (2) | 2024.10.28 |
---|---|
[LLM] Sentence_transformers를 이용해 커스텀 EmbeddingSimilarityEvaluator 만들기 (0) | 2024.10.16 |
[LLM] PAWS-X 한국어 데이터셋을 이용한 HuggingFace Embedding 모델 Finetuning (4) | 2024.10.08 |
자연어 처리(NLP)에서 자주 사용되는 문장 유사도 및 의미 관계 평가 데이터셋 정리 (2) | 2024.09.27 |
랭체인(Langchain)을 이용한 RAG 시스템 만들기 (0) | 2024.04.20 |