SASEvaluator

SASEvaluator

SASEvaluator는 Haystack 파이프라인이 예측한 답변을 정답(ground truth) 라벨로 평가해요. 파인튜닝된 언어 모델로 예측 답변과 정답 답변의 시맨틱 유사도를 검사하죠. 이 메트릭을 시맨틱 답변 유사도(semantic answer similarity, SAS)라고 불러요.

출처: 문서

본문

항목 내용
파이프라인에서 가장 흔한 위치 단독으로, 또는 평가 파이프라인에서 사용. Evaluator의 입력을 생성한 별도 파이프라인 뒤에 사용해요
필수 init 변수 없음
필수 run 변수 ground_truth_answers: 정답 답변이 담긴 문자열 목록. predicted_answers: 평가할 예측 답변이 담긴 문자열 목록
출력 변수 다음을 담은 딕셔너리: score: 예측 답변과 정답 답변의 모든 쌍에 대한 평균 SAS 점수를 나타내는 0.01.0 숫자. individual_scores: 예측 답변과 정답 답변의 모든 쌍에 대한 0.01.0 범위의 SAS 점수 목록
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

추가 참고 자료

더 알아보기 (Learn more)