평가셋
Struct4Search 평가셋은 같은 문서와 질문으로 검색·답변 품질을 반복해서 비교하기 위한 고정 자료입니다. 질문만 모아 둔 파일이 아니라, 질문마다 찾아야 할 문서, 답변에 포함되어야 할 필수 내용, 그 내용을 확인한 원문 근거를 함께 보관합니다.
이 페이지에서는 다음 내용을 설명합니다.
- 어떤 평가셋이 있으며 각각 언제 사용하는지
- 질문과 정답 데이터가 어떤 구조로 구성되는지
- 질문을 어떤 기준으로 만들고 검증했는지
- 평가 자료를 변경할 때 무엇을 함께 갱신해야 하는지
실행 명령과 결과 파일 확인 방법은 평가 실행과 결과 확인 페이지에서 설명합니다.
평가 자료에는 원본 문서와 정답 근거가 포함되므로 Git 저장소에 포함하지 않습니다. 서버에 보관된 고정 자료를 환경변수로 지정해 사용합니다.
평가셋 종류
Struct4Search는 빠른 회귀 확인용 평가셋과 전체 코퍼스 최종 평가셋을 구분해 사용합니다.
| 평가셋 | 검색 대상 | 질문 | 질문 구성 | 사용하는 경우 |
|---|---|---|---|---|
| 100문서 평가셋 | 고정 문서 100건 | 100건 | single-hop 75건, multi-hop 25건 | 코드·모델·프롬프트·검색 설정을 변경한 뒤 전체 평가 전에 회귀를 확인할 때 |
| 전체 문서 평가셋 | 문서 2,567건 | 200건 | single-hop 150건, multi-hop 50건 | 전체 검색 대상을 기준으로 최종 검색·답변 품질을 확인할 때 |
각 평가셋은 정해진 파일 구성과 해시 또는 예상 수량으로 식별합니다. 질문이나 정답을 수정한 자료는 기존 평가셋과 같은 버전으로 취급하지 않습니다.
질문 하나에 포함되는 정보
평가셋의 기본 단위는 질문입니다. 질문 하나에는 검색 평가와 답변 평가에 필요한 정보가 함께 연결됩니다.
| 구성 요소 | 의미 |
|---|---|
| 질문 ID | 질문을 식별하는 고유 ID입니다. 전체 평가셋은 q001부터 q200까지 사용합니다. |
| 질문 | 실제 QueryService에 입력하는 질의입니다. |
| 정답 문서 | 질문에 답하기 위해 검색되어야 하는 문서와 관련도입니다. |
| 필수 내용 | 정답에 반드시 포함되어야 하는 내용을 c1, c2처럼 나눈 항목입니다. |
| 정답 예시 | 필수 내용을 빠짐없이 통합한 기준 답변입니다. |
| 원문 근거 | 각 필수 내용을 확인한 원본 PDF의 문장, 표 또는 그림 위치입니다. |
| 질문 속성 | single-hop·multi-hop 여부, 주된 질문 유형, 질문 표현 방식과 근거 형식입니다. |
따라서 답변 평가는 기준 답변과 문장을 그대로 일치시키는 방식이 아닙니다. 생성된 답변이 필수 내용을 충족하는지, 그리고 그 내용이 기록된 원문 근거와 일치하는지를 확인합니다.
전체 200개 질문의 구성
전체 평가셋은 짧은 사실 확인만 측정하지 않습니다. 질문의 추론 범위, 주된 유형, 표현 방식과 근거 형식을 각각 구분해 구성했습니다.
추론 범위
| 구분 | 질문 수 | 의미 |
|---|---|---|
| single-hop | 150 | 한 위치의 근거로 답할 수 있는 질문 |
| multi-hop | 50 | 여러 페이지 또는 여러 문서의 근거를 함께 찾아야 답할 수 있는 질문 |
multi-hop은 반드시 여러 문서를 요구한다는 뜻은 아닙니다. 같은 문서 안에서도 서로 떨어진 여러 페이지의 근거를 결합해야 한다면 multi-hop으로 분류할 수 있습니다.
질문 유형
각 질문은 ViDoRe v3 질문 유형을 기준으로 하나의 주된 유형으로 분류했습니다.
| 주된 질문 유형 | 질문 수 | 묻는 내용 |
|---|---|---|
| 서술형 | 28 | 작업 절차나 조치 방법을 설명하도록 요구 |
| 원문 추출형 | 28 | 문서에 명시된 기준이나 문구를 확인 |
| 비교형 | 28 | 두 조건·방법·대상의 차이를 비교 |
| 참·거짓형 | 28 | 특정 설명이나 조치가 맞는지 판단 |
| 수치형 | 28 | 압력, 농도, 시간과 같은 정확한 값 확인 |
| 여러 근거 결합 | 32 | 떨어진 근거를 함께 사용해 답을 구성 |
| 목록형 | 28 | 여러 항목을 빠뜨리지 않고 제시 |
single-hop·multi-hop은 근거를 결합하는 범위, 위 표는 질문의 주된 과업 유형을 나타내므로 서로 다른 분류축입니다. 예를 들어 비교형 질문도 여러 페이지의 근거가 필요하면 multi-hop일 수 있습니다.
평가셋을 만든 방법
각 질문은 원본 근거를 먼저 확인한 뒤 질문과 정답을 작성하는 순서로 만듭니다.
- 산업안전 문서에서 실제로 확인할 필요가 있는 작업 절차, 기준, 수치, 비교 항목 또는 목록을 고릅니다.
- 원본 PDF에서 답을 뒷받침하는 문장, 표 또는 그림의 위치를 확인합니다.
- 확인한 근거를 바탕으로 질문을 작성하고, 검색되어야 할 정답 문서를 기록합 니다.
- 정답에 반드시 포함되어야 하는 내용을
c1,c2처럼 나누고 각 항목의 원문 근거를 연결합니다. - 한 근거로 답할 수 있는지에 따라 single-hop 또는 multi-hop으로 분류하고, 질문 유형·표현 방식·근거 형식을 기록합니다.
- 질문의 답변 가능성, 필수 내용과 원문 근거의 연결, ID와 파일 구성을 검사한 뒤 승인합니다.
multi-hop 질문은 여러 근거를 실제로 결합해야만 답할 수 있는지 별도로 확인합니다. 한 근거만으로 전체 답을 만들 수 있는 질문은 multi-hop으로 승인하지 않습니다.
최종 평가셋 승인 기준
평가셋에 포함되는 질문은 다음 조건을 충족해야 합니다.
| 확인 항목 | 승인 조건 |
|---|---|
| 답변 가능성 | 제공된 검색 대상 문서 안에서 질문에 답할 수 있어야 합니다. |
| 정답 완전성 | 답변에 필요한 필수 내용이 빠짐없이 정의되어 있어야 합니다. |
| 근거 연결 | 모든 필수 내용에 원본 PDF에서 확인한 근거가 있어야 합니다. |
| multi-hop 타당성 | multi-hop 질문은 하나의 근거만으로 전체 답을 만들 수 없어야 합니다. |
| 식별자 | 질문 ID가 q001부터 q200까지 중복 없이 이어져야 합니다. |
| 구조 검사 | 필수 파일, 수량과 연결 관계에 오류가 없어야 합니다. |
전체 평가셋은 원본 PDF 확인을 마 쳤으며, 구조 검사 결과는 오류 0건·경고 0건이고 최종 상태는 approved입니다.
질문 예시
다음은 전체 평가셋의 q001입니다.
| 항목 | 내용 |
|---|---|
| 질문 | 질소를 사용한 교반기에서 첨가제를 투입하려면 어떻게 준비해야 하나요? |
| 추론 범위 | 같은 문서의 서로 다른 두 페이지를 함께 찾아야 하는 multi-hop 질문 |
| 필수 문서 | 교반기 첨가제 투입 중 질식 사고와 예방조치를 설명한 문서 1건 |
필수 내용 c1 | 맨홀 개방 전에 잔류압력을 확인하고 내부를 충분히 환기합니다. |
필수 내용 c2 | 개방한 뒤 산소농도가 18% 이상 23.5% 미만인지 확인합니다. |
필수 내용 c3 | 적정공기를 확인하기 전에는 접근하지 않고 작업 감시, 절차와 교육을 함께 시행합니다. |
| 정답 예시 | 맨홀 개방 전 잔류압력이 없는지 확인하고 내부를 충분히 환기한다. 개방 직후 교반기 내부와 투입구 주변의 산소를 측정해 18% 이상 23.5% 미만인지 확인한다. 확인 전에는 개구부에 접근하지 않고 작업감시·절차·교육을 병행한다. |
이 예시처럼 multi-hop 여부는 정답 문서 수가 아니라, 전체 답을 만들기 위해 결합해야 하는 원문 근거의 수와 위치를 기준으로 판단합니다.
평가 자료 파일
두 평가셋은 같은 개념을 사용하지만 일부 파일 이름과 묶음 방식이 다릅니다.
| 역할 | 100문서 평가셋 | 전체 문서 평가셋 | 들어 있는 내용 |
|---|---|---|---|
| 검색 대상 | documents.jsonl | corpus_manifest.jsonl | 평가 실행에서 사용할 문서 목록 |
| 질문 | queries.jsonl | queries.jsonl | 질문 ID, 질문과 질문 속성 |
| 검색 정답 | qrels.jsonl | qrels.jsonl | 질문별 정답 문서와 관련도 |
| 답변 정답 | answers.jsonl | qa_gt.jsonl | 정답 예시와 답변의 필수 내용 |
| 원문 근거 | evidence.jsonl | qa_gt.jsonl | 필수 내용을 확인한 원문 위치 |
| 통합 레코드 | dataset.jsonl | dataset.jsonl | 질문, 검색 정답과 답변 정답을 질문별로 합친 자료 |
| 정답 문서 목록 | 평가 문서·qrels에서 확인 | gt_documents.jsonl | 전체 코퍼스 중 정답으로 사용되는 고유 문서 목록 |
| multi-hop 정보 | multi_hop_dependencies.jsonl | queries.jsonl, qrels.jsonl | multi-hop 분류와 답변에 필요한 정답 문서 |
| 무결성·승인 | release_manifest.jsonl | VALIDATION_REPORT.json, TERRA_ULTRA_FINAL_AUDIT.json | 파일·수량 검사와 최종 승인 결과 |
100문서 평가셋은 release_manifest.jsonl에 기록된 파일과 SHA-256이 일치해야 합 니다. 전체 평가셋의 필수 파일 이름과 예상 수량은 configs/evaluation-release.json에 정의되어 있습니다.
평가 데이터셋을 변경할 때
질문, 정답 문서, 정답 답변 또는 원문 근거를 수정하면 기존 파일을 덮어쓰지 않고 별도의 새 평가셋으로 보관합니다.
변경할 때는 다음 항목을 함께 갱신합니다.
- 질문과 연결된 qrels, 필수 내용과 원문 근거
- 통합
dataset.jsonl - 파일 수량, 해시와 검증 보고서
- 변경된 평가셋으로 다시 계산한 기준 결과
평가셋이나 검색 대상 문서가 달라지면 이전 점수와 같은 조건의 결과가 아니므로 직접 비교하지 않습니다. 변경된 자료로 새 기준 결과를 만든 뒤 이후 실행을 그 기준과 비교합니다.
코드 참조
| 확인할 내용 | 파일·심볼 |
|---|---|
| 전체 평가셋 파일·수량 정의 | configs/evaluation-release.json |
| 전체 평가셋 검사 | backend/struct4search/evaluation/datasets.py |
| 100문서 평가셋 검사 | backend/struct4search/e2e/final_fixture.py |
| 검색 정답과 순위 점수 처리 | backend/struct4search/evaluation/retrieval.py · score_prediction_rows |
| 답변 점수 형식과 집계 | backend/struct4search/evaluation/qa.py, terra_judgments.py |
| 서버별 평가 자료 경로 | configs/machine-paths.yaml |