DocumentMAPEvaluator

DocumentMAPEvaluator

DocumentMAPEvaluator는 Haystack 파이프라인이 검색한 문서를 ground truth 레이블과 비교해 평가해요. 검색된 문서 리스트가 ground truth 레이블에 지정된 관련 문서만 포함하는 정도(혹은 관련 없는 문서도 포함하는지)를 검사합니다. 이 측정항목을 MAP(mean average precision)라고 해요.

출처: 문서

본문

항목 내용
파이프라인에서의 일반적인 위치 단독으로 또는 평가 파이프라인에서 사용. Evaluator의 입력을 생성한 별도 파이프라인 뒤에 배치
필수 run 변수 ground_truth_documents — ground truth 문서의 리스트의 리스트. 질문별 ground truth 문서 리스트 하나를 뜻해요. / retrieved_documents — 검색된 문서의 리스트의 리스트. 질문별 검색 문서 리스트 하나를 뜻합니다.
출력 변수 딕셔너리: score — 평균 정밀도를 나타내는 0.01.0 숫자 / individual_scores — 각 입력 쌍(검색 문서 리스트와 ground truth 문서 리스트)에 대한 개별 평균 정밀도 점수(0.01.0) 리스트
API reference Evaluators
GitHub link https://github.com/deepset-ai/haystack/blob/main/haystack/components/evaluators/document_map.py
Package name haystack-ai

Overview

DocumentMAPEvaluator 컴포넌트로 Haystack 파이프라인(예: RAG 파이프라인)이 검색한 문서를 ground truth 레이블과 비교해 평가할 수 있어요. 평균 정밀도가 높을수록 좋으며, 검색된 문서 리스트에 관련 문서가 많고 관련 없는 문서가 거의 없거나 전혀 없다는 뜻입니다.

DocumentMAPEvaluator를 초기화하는 데 필요한 파라미터는 없습니다.

Usage

On its own

아래는 두 쿼리에 대해 검색된 문서를 평가하기 위해 DocumentMAPEvaluator 컴포넌트를 사용하는 예시예요. 첫 번째 쿼리에는 ground truth 문서 1개와 검색 문서 1개가 있습니다. 두 번째 쿼리에는 ground truth 문서 2개와 검색 문서 3개가 있어요.

from haystack import Document
from haystack.components.evaluators import DocumentMAPEvaluator

evaluator = DocumentMAPEvaluator()
result = evaluator.run(
    ground_truth_documents=[
        [Document(content="France")],
        [Document(content="9th century"), Document(content="9th")],
    ],
    retrieved_documents=[
        [Document(content="France")],
        [
            Document(content="9th century"),
            Document(content="10th century"),
            Document(content="9th"),
        ],
    ],
)
print(result["individual_scores"])
# [1.0, 0.8333333333333333]
print(result["score"])
# 0.9166666666666666

In a pipeline

아래는 두 답변을 평가하고 ground truth 답변과 비교하기 위해 DocumentMAPEvaluator와 DocumentMRREvaluator를 파이프라인에서 사용하는 예시예요. 개별 컴포넌트 대신 파이프라인을 실행하면 둘 이상의 지표를 계산하기가 더 간단해집니다.

from haystack import Document, Pipeline
from haystack.components.evaluators import DocumentMRREvaluator, DocumentMAPEvaluator

pipeline = Pipeline()
mrr_evaluator = DocumentMRREvaluator()
map_evaluator = DocumentMAPEvaluator()
pipeline.add_component("mrr_evaluator", mrr_evaluator)
pipeline.add_component("map_evaluator", map_evaluator)

ground_truth_documents = [
    [Document(content="France")],
    [Document(content="9th century"), Document(content="9th")],
]
retrieved_documents = [
    [Document(content="France")],
    [
        Document(content="9th century"),
        Document(content="10th century"),
        Document(content="9th"),
    ],
]

result = pipeline.run(
    {
        "mrr_evaluator": {
            "ground_truth_documents": ground_truth_documents,
            "retrieved_documents": retrieved_documents,
        },
        "map_evaluator": {
            "ground_truth_documents": ground_truth_documents,
            "retrieved_documents": retrieved_documents,
        },
    },
)

for evaluator in result:
    print(result[evaluator]["individual_scores"])
# [1.0, 0.8333333333333333]
# [1.0, 1.0]
for evaluator in result:
    print(result[evaluator]["score"])
# 0.9166666666666666
# 1.0

더 알아보기 (Learn more)