SASEvaluator
SASEvaluator
SASEvaluator는 Haystack 파이프라인이 예측한 답변을 정답(ground truth) 라벨로 평가해요. 파인튜닝된 언어 모델로 예측 답변과 정답 답변의 시맨틱 유사도를 검사하죠. 이 메트릭을 시맨틱 답변 유사도(semantic answer similarity, SAS)라고 불러요.
출처: 문서
본문
| 항목 | 내용 |
|---|---|
| 파이프라인에서 가장 흔한 위치 | 단독으로, 또는 평가 파이프라인에서 사용. Evaluator의 입력을 생성한 별도 파이프라인 뒤에 사용해요 |
| 필수 init 변수 | 없음 |
| 필수 run 변수 | ground_truth_answers: 정답 답변이 담긴 문자열 목록. predicted_answers: 평가할 예측 답변이 담긴 문자열 목록 |
| 출력 변수 | 다음을 담은 딕셔너리: score: 예측 답변과 정답 답변의 모든 쌍에 대한 평균 SAS 점수를 나타내는 0.0individual_scores: 예측 답변과 정답 답변의 모든 쌍에 대한 0.0 |
| API reference | Evaluators |
| GitHub 링크 | sas_evaluator.py |
| 패키지 이름 | haystack-ai |
개요
SASEvaluator 컴포넌트로 RAG 파이프라인 같은 Haystack 파이프라인이 예측한 답변을 정답 라벨과 비교해 평가할 수 있어요.
SASEvaluator를 초기화할 때 bi-encoder 또는 cross-encoder 모델을 제공할 수 있어요. 기본적으로 sentence-transformers/paraphrase-multilingual-mpnet-base-v2 모델을 사용하죠.
한 번에 하나의 예측 답변만 하나의 정답 답변과 비교한다는 점을 기억하세요. 이 컴포넌트는 같은 질문에 대한 여러 정답 답변이나 같은 질문에 대해 예측된 여러 답변을 지원하지 않아요.
사용법
단독으로 사용하기
SASEvaluator 컴포넌트로 두 답변을 평가하고 정답 답변과 비교하는 예시예요.
from haystack.components.evaluators import SASEvaluator
sas_evaluator = SASEvaluator()
result = sas_evaluator.run(
ground_truth_answers=["Berlin", "Paris"],
predicted_answers=["Berlin", "Lyon"],
)
print(result["individual_scores"])
# [1.0, 0.5174766182899475]
print(result["score"])
# 0.7587383091449738
파이프라인에서 사용하기
파이프라인에서 AnswerExactMatchEvaluator와 SASEvaluator를 함께 사용해 두 답변을 평가하고 정답 답변과 비교하는 예시예요. 개별 컴포넌트 대신 파이프라인을 실행하면 두 개 이상의 메트릭을 계산하기가 더 간단해져요.
from haystack import Pipeline
from haystack.components.evaluators import AnswerExactMatchEvaluator, SASEvaluator
pipeline = Pipeline()
em_evaluator = AnswerExactMatchEvaluator()
sas_evaluator = SASEvaluator()
pipeline.add_component("em_evaluator", em_evaluator)
pipeline.add_component("sas_evaluator", sas_evaluator)
ground_truth_answers = ["Berlin", "Paris"]
predicted_answers = ["Berlin", "Lyon"]
result = pipeline.run(
{
"em_evaluator": {
"ground_truth_answers": ground_truth_answers,
"predicted_answers": predicted_answers,
},
"sas_evaluator": {
"ground_truth_answers": ground_truth_answers,
"predicted_answers": predicted_answers,
},
},
)
for evaluator in result:
print(result[evaluator]["individual_scores"])
# [1, 0]
# [1.0, 0.5174766182899475]
for evaluator in result:
print(result[evaluator]["score"])
# 0.5
# 0.7587383091449738
추가 참고 자료
- 🧑🍳 Cookbook: Prompt Optimization with DSPy