7분
V3 자동 채점 하네스
골든 데이터셋과 검증
V3 자동 채점 하네스
골든 데이터셋과 검증 > 골든 데이터셋과 검증
학습 목표
- GD 를 자동 실행·비교·집계하는 채점기를 만든다
- 채점 실패를 정당·부당으로 분류해 처리한다
V3 — 자동 채점 하네스: 검증을 습관으로
GD를 사람이 돌리면 한 번 하고 끝납니다. 채점기를 만들어 파이프라인에 겁니다.
import yaml
from neo4j import GraphDatabase
def grade(gd_file: str, uri: str, auth: tuple) -> dict:
items = yaml.safe_load(open(gd_file, encoding="utf-8"))
results = {"pass": 0, "fail": [], "by_hops": {}}
with GraphDatabase.driver(uri, auth=auth) as drv, drv.session() as s:
for it in items:
got = s.run(it["gold_cypher"]).data()
ok = compare(got, it["expected"]) # 유형별 비교(rowset/scalar/…)
bucket = results["by_hops"].setdefault(it["hops"], {"pass": 0, "total": 0})
bucket["total"] += 1
if ok:
results["pass"] += 1; bucket["pass"] += 1
else:
results["fail"].append({"id": it["id"], "got": got})
return results
by_hops 집계에 주목하세요. 전체 정확도 하나가 아니라 난이도 구간별 성적표가 나옵니다. 이것이 코스 4 자연어 평가의 기준선(baseline)이 됩니다.
실행 규칙 두 가지
① 매 적재 후 (V1 감사와 함께) — 데이터 변경이 정답을 깨뜨렸는지 즉시 확인합니다.
여기서 판단이 갈립니다. 정답이 정당하게 변한 것이면 snapshot_ref를 갱신하고, 부당하게 변했으면 파이프라인 버그입니다. 이 둘을 구분하지 않고 정답을 계속 갱신하면 채점기가 아무것도 못 잡게 됩니다.
② 스키마 변경 전후 — 스펙 개정(코스 2에서 겪은 L1→L2 이관 같은)마다 GD 전 문항 통과가 병합 조건입니다.
소프트웨어의 CI(지속 통합)와 정확히 같은 규율을 그래프에 적용하는 것입니다.
실패 문항은 로그가 아니라 티켓입니다
원인을 넷으로 분류해 처리합니다 — 데이터 / 매핑 / 스키마 / 정답 자체.
그리고 "정답이 틀렸던" 문항의 교정 이력도 GD 파일에 남깁니다. 정답을 조용히 고치면, 다음에 같은 실수를 반복합니다.
에디터 로딩 중...