모델 기반 평가
모델 기반 평가 (Model-Based Evaluation)
Haystack은 다양한 종류의 모델 기반 평가를 지원해요. 이 페이지에서는 모델 기반 평가가 무엇인지, 그리고 Haystack에서 쓸 수 있는 옵션들을 함께 살펴볼게요.
출처: 공식문서
모델 기반 평가란 무엇인가요? (What is Model-Based Evaluation)
Haystack의 모델 기반 평가는 언어 모델을 사용해 파이프라인의 결과를 검사하는 방식이에요. 이 방법은 대개 출력에 대한 라벨이 필요 없어서 쓰기 쉽습니다. Retrieval-Augmented Generative(RAG) 파이프라인과 함께 자주 쓰이지만, 어떤 파이프라인이든 적용할 수 있어요.
현재 Haystack은 완전한 RAG 파이프라인의 엔드투엔드(end-to-end) 모델 기반 평가를 지원합니다.
LLM으로 평가하기 (Using LLMs for Evaluation)
모델 기반 평가에서 흔한 전략 중 하나는 OpenAI의 GPT 모델 같은 **LLM을 평가자 모델(golden model)**로 사용하는 거예요. 기본적으로 Haystack의 LLM 기반 Evaluator들은 OpenAIChatGenerator를 golden model로 사용합니다. 이 모델로 RAG 파이프라인을 평가할 때는, 파이프라인의 결과와 때로는 추가 정보를, 그리고 평가 기준을 설명하는 프롬프트와 함께 모델에 넘겨줘요.
LLM을 평가자로 쓰는 방식은 매우 유연해서 다양한 지표를 노출시켜 줍니다. 결국 이 지표들은 모두 "결과를 어떻게 평가하고 점수화하라"고 LLM에 알려주는 정교하게 만들어진 프롬프트예요. 흔한 지표로는 faithfulness(충실도), context relevance(문맥 관련성) 등이 있어요.
로컬 LLM 사용하기 (Using Local LLMs)
모델 기반 Evaluator를 로컬 모델과 함께 쓰려면, Evaluator를 초기화할 때 chat_generator 파라미터로 로컬 모델을 가리키는 Chat Generator를 넘겨주면 됩니다. 이때 Chat Generator는 JSON 객체를 반환하도록 설정되어야 해요.
다음 예제는 OllamaChatGenerator를 통해 Ollama를 사용합니다.
먼저 Ollama를 다운로드해서 설치한 뒤, 평가에 쓸 모델을 pull 하세요. Ollama는 기본적으로 http://localhost:11434에서 서비스되는데, 바로 그곳을 OllamaChatGenerator가 바라봅니다.
ollama pull qwen3:1.7b
그다음 통합 패키지를 설치합니다.
pip install ollama-haystack
OllamaChatGenerator는 response_format 파라미터를 받으므로, "json"으로 설정하기만 하면 Evaluator의 JSON 요구 조건을 충족할 수 있어요.
from haystack.components.evaluators import FaithfulnessEvaluator
from haystack_integrations.components.generators.ollama import OllamaChatGenerator
questions = ["Who created the Python language?"]
contexts = [
[
(
"Python, created by Guido van Rossum in the late 1980s, is a high-level general-purpose programming "
"language. Its design philosophy emphasizes code readability, and its language constructs aim to help "
"programmers write clear, logical code for both small and large-scale software projects."
),
],
]
predicted_answers = [
"Python is a high-level general-purpose programming language that was created by George Lucas.",
]
evaluator = FaithfulnessEvaluator(
chat_generator=OllamaChatGenerator(model="qwen3:1.7b", response_format="json"),
)
result = evaluator.run(
questions=questions,
contexts=contexts,
predicted_answers=predicted_answers,
)
print(result["score"])
print(result["results"][0]["statement_scores"])
0.5
[1, 0]
Evaluator는 답변을 두 개의 문장(statement)으로 나누는데, 첫 번째 문장만 문맥에서 뒷받침되므로 답변 점수가 0.5가 됩니다.
평가에 작은 Cross-Encoder 모델 사용하기 (Using Small Cross-Encoder Models for Evaluation)
LLM과 함께, 평가에는 작은 cross-encoder 모델도 쓸 수 있어요. 이런 모델들은 예를 들어 **의미적 답변 유사도(semantic answer similarity)**를 계산할 수 있습니다. LLM 기반 지표와 달리 작은 모델 기반 지표는 모델 제공자의 API 키가 필요 없어요.
이렇게 작은 cross-encoder 모델을 평가자로 쓰는 방식은 실행이 더 빠르고 저렴하지만, 평가할 수 있는 측면은 더 유연하지 않아요. 작은 모델이 평가하도록 훈련된 부분만 평가할 수 있습니다.
Haystack의 모델 기반 평가 파이프라인 (Model-Based Evaluation Pipelines in Haystack)
Haystack에서 모델 기반 평가를 수행하는 방법은 두 가지로, 둘 다 파이프라인과 Evaluator 컴포넌트를 활용합니다.
- 평가 파이프라인을 독립적으로 만들고 실행할 수 있어요. 이 경우 평가 파이프라인에 필요한 입력을 직접 제공해야 합니다. RAG 파이프라인과 평가 파이프라인을 분리하면 RAG 파이프라인의 결과를 저장해 두고 나중에 다른 평가 지표를 골라 시도할 수 있어서, 매번 RAG 파이프라인을 다시 실행할 필요가 없어요. 그래서 이 방법을 권장합니다.
- 다른 방법으로는 RAG 파이프라인 끝에 평가자 컴포넌트를 추가하는 거예요. 이렇게 하면 RAG 파이프라인과 평가를 하나의
pipeline.run()호출 안에서 함께 실행하게 됩니다.
검색된 문서의 모델 기반 평가 (Model-Based Evaluation of Retrieved Documents)
ContextRelevanceEvaluator
문맥 관련성(context relevance)은 쿼리와 관련된 문서가 검색되었는지를 나타내는 정도예요. 이 측면을 판단하는 데 LLM이 사용됩니다. LLM은 먼저 문서에서 쿼리에 답하는 데 관련된 문장들을 추출하고, 관련 문장이 하나 이상 발견되면 각 질문에 1점을, 그렇지 않으면 0점을 부여하죠.
생성되거나 추출된 답변의 모델 기반 평가 (Model-Based Evaluation of Generated or Extracted Answers)
FaithfulnessEvaluator
충실도(faithfulness), 땅에 근거했다는 뜻의 groundedness라고도 불러요. 생성된 답변이 검색된 문서에 얼마나 근거하고 있는지를 평가합니다. LLM이 답변에서 문장들을 추출해서 각각에 대해 충실도를 확인하는 방식이죠. 답변이 문서에 근거하지 않으면, 그 답변 또는 답변의 일부를 **환각(hallucination)**이라고 부릅니다.
SASEvaluator (Semantic Answer Similarity)
의미적 답변 유사도(Semantic answer similarity)는 transformer 기반 모델(넘겨주는 모델에 따라 bi-encoder 또는 cross-encoder)을 사용해 두 답변의 의미적 유사성을 평가해요. 어휘가 겹치는 정도(lexical overlap)를 보는 대신 의미를 비교하죠. F1과 EM은 "100"과 "100 %"를 유사도 0으로 점수화하지만, SAS는 이런 경우에 높은 점수를 주도록 훈련되어 있어요. SAS는 F1이 예측된 답변의 타당성을 잘 드러내지 못하는 경우를 찾아낼 때 특히 유용합니다. SAS에 대해 더 알아보려면 Semantic Answer Similarity for Evaluating Question-Answering Models 논문을 읽어보세요.
평가 프레임워크 통합 (Evaluation Framework Integrations)
현재 Haystack은 DeepEval과 Ragas와의 통합을 제공해요. 각 프레임워크마다 사용할 수 있는 Evaluator 컴포넌트가 하나씩 있습니다.
RagasEvaluatorDeepEvalEvaluator
| 기능/통합 | RagasEvaluator | DeepEvalEvaluator |
|---|---|---|
| 평가 모델 | Ragas가 지원하는 모든 프로바이더 (OpenAI, Anthropic, Google, Groq, Mistral 등), ragas.llms.llm_factory로 각 지표마다 설정 |
OpenAI의 모든 GPT 모델 |
| 지원되는 지표 | ragas.metrics.collections의 모든 지표, 예: Faithfulness, AnswerRelevancy, ContextPrecision, ContextRecall, AnswerCorrectness, SemanticSimilarity |
ANSWER_RELEVANCY, FAITHFULNESS, CONTEXTUAL_PRECISION, CONTEXTUAL_RECALL, CONTEXTUAL_RELEVANCE |
| 응답 평가용 커스터마이즈 가능한 프롬프트 | ✅ DomainSpecificRubrics 같은 루브릭 기반 지표와 함께 사용 가능 | ❌ |
| 점수에 대한 설명 | ❌ | ✅ |
| 모니터링 대시보드 | ❌ | ❌ |
지표에 대한 더 자세한 정보는 각 평가 프레임워크의 문서에서 확인할 수 있어요.
- Ragas 지표: https://docs.ragas.io/en/latest/concepts/metrics/index.html
- DeepEval 지표: https://docs.confident-ai.com/docs/metrics-introduction
더 알아보기 (Learn more)
- 모델 기반 평가 (Model-Based Evaluation) — 원문 문서.
- 통계 기반 평가 (Statistical Evaluation) — 라벨을 비교하는 또 다른 평가 방식.
- 📓 튜토리얼: Evaluating RAG Pipelines