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.0individual_scores — 각 입력 쌍(검색 문서 리스트와 ground truth 문서 리스트)에 대한 개별 평균 정밀도 점수(0.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)
- DocumentMAPEvaluator — Haystack 공식 문서