가설: 법령 질문은 그래프가 이긴다
해양 법령은 조문 간 인용·예외·위임 참조가 많습니다. “선박에서 기름이 유출되면 어느 법 어느 조문으로 처벌되는가” 같은 질문은 법률, 시행령, 시행규칙을 가로질러야 답이 나옵니다. 그래서 처음에는 조문 관계 그래프(Neo4j)를 따라가는 검색이 멀티홉 질문에서 벡터 검색을 이길 거라고 생각했습니다. 위임 체인을 명시적으로 따라가는 쪽이, 임베딩 유사도로 한 번에 찾는 쪽보다 구조적으로 유리해 보였기 때문입니다.
가설은 공짜지만 아키텍처 결정은 공짜가 아닙니다. 감으로 결정하지 않으려고 평가 체계를 먼저 만들었습니다.
평가 설계: 골드셋, 지표, 그리고 검정

골드셋. 평가 질의는 180문항입니다. 정답 조문이 있는 질문이 154문항(멀티홉 117 · 단일 조문 29 · 정의형 8)이고, 나머지 26문항은 코퍼스에 답이 없어 거절해야 하는 질문입니다. 거절 문항을 골드셋에 넣은 이유는 따로 있습니다. 법령 QA에서 최악의 실패는 못 찾는 것이 아니라 그럴듯하게 지어내는 것이라서, “안 답하기”도 채점 대상이어야 하기 때문입니다.
조건 고정. 임베더는 KURE-v1, 리랭커는 off, 인덱스는 동일한 것으로 고정하고 검색 전략만 바꿨습니다. 비교 실험에서 바뀌는 변수가 하나여야 점수 차이를 전략의 차이로 읽을 수 있습니다.
지표는 두 질문을 분리해서 봅니다. 순위 지표는 여러 개지만 각자 답하는 질문이 다릅니다.
- hit@1 — 1순위가 정답인가. 사용자가 첫 번째 근거만 읽는다면 체감 품질은 이 지표입니다.
- hit@5 · recall@10 — 정답이 상위 후보 안에 들어는 왔는가. 뒤에 리랭커가 있다면 검색기의 진짜 역할은 이것, 즉 후보 확보력입니다.
- MRR — 정답의 평균 순위를 역수로 요약한 값. 단일 숫자가 필요할 때 씁니다.
hit@1과 recall@10을 분리해서 보는 것이 이 평가의 핵심이었습니다. “1위에 올리는 능력”과 “10위 안에 넣는 능력”은 다른 능력이고, 뒤에서 보듯 전략마다 강한 쪽이 달랐습니다.
불확실성: Wilson 신뢰구간. hit@1 같은 비율 지표에는 95% 신뢰구간을 함께 적었습니다. 흔히 쓰는 정규근사(Wald) 구간은 표본이 작거나 비율이 0과 1에 가까울 때 구간이 [0,1] 밖으로 나가거나 폭이 왜곡되는 문제가 있어서, 그 경계에서도 안정적인 Wilson 구간을 썼습니다. 정의형은 8문항뿐이라 이 선택이 실제로 중요했습니다. 8문항짜리 비율에 Wald 구간을 붙이면 숫자가 통계처럼 보이는 장식이 됩니다.
전략 간 비교: McNemar 검정. 두 전략의 hit@1이 0.479 대 0.248이라는 사실만으로 “다르다”고 말하려면 검정이 필요한데, 여기서 독립 이표본 검정(카이제곱 등)을 쓰면 틀립니다. 두 전략이 같은 문항을 풀었기 때문입니다. 짝지은 이진 결과에는 McNemar 검정이 맞는 도구입니다. 이 검정은 두 전략이 모두 맞았거나 모두 틀린 문항은 버리고, 한쪽만 맞춘 불일치 문항(b: 그래프만 정답, c: 벡터만 정답)만으로 차이가 우연인지 판정합니다. 직관적으로도 자연스럽습니다. 둘 다 맞춘 쉬운 문제는 우열의 증거가 아니니까요.
결과: 가설이 뒤집혔다
| 전략 | hit@1 | hit@5 | recall@10 |
|---|---|---|---|
| 벡터 검색 | 0.539 | 0.844 | 0.896 |
| 하이브리드 | 0.455 | 0.844 | 0.909 |
| 그래프 검색 | 0.279 | 0.890 | 0.945 |
1순위 정답률은 벡터 검색이 가장 높았습니다. 그래프가 유리할 거라 예상했던 멀티홉 117문항에서도 벡터 0.479, 그래프 0.248로 벡터가 앞섰고, McNemar 검정에서 이 차이는 유의했습니다(그래프만 맞춘 문항 17건 vs 벡터만 맞춘 문항 45건, p=0.0005).
한 가지 덧붙이면, hit@1은 검색 인덱스 빌드에 따라 문항 단위로 1건 정도 달라질 수 있어서 리포트 간 수치가 0.273과 0.279처럼 미세하게 다를 수 있습니다. 이 한계는 리포트에 그대로 적어 두었습니다.
그래프 검색의 역할 재정의
그래프 검색을 버리지는 않았습니다. 표를 다시 보면 그래프는 hit@1이 가장 낮은 대신 recall@10이 0.945로 세 전략 중 가장 높습니다. 질문에 지목된 조문을 고정한 뒤 법률 → 시행령 → 시행규칙 위임 체인을 따라가므로, 1순위를 정확히 맞히는 데는 약해도 정답 후보를 가장 넓게 확보합니다. “1위에 올리는 능력”과 “후보에 넣는 능력”을 지표에서 분리해 두었기 때문에 이 구분이 보였습니다.
여기에 cross-encoder 리랭커를 켜면 그림이 달라집니다. 세 전략의 hit@1이 0.727–0.734로 수렴하면서 전략 간 격차가 거의 사라집니다. 결국 이 시스템에서 순위를 결정하는 지배적인 레버는 검색 전략이 아니라 리랭커였고, 그래프의 역할은 “정답을 맞히는 검색”이 아니라 “리랭커에게 넘길 후보를 넓히는 확장 장치”로 정리됐습니다.
배운 것
- 아키텍처 직관은 평가 앞에서 자주 틀립니다. 골드셋과 통계 검정을 먼저 만들어 두지 않았다면, 그래프 중심 설계를 그대로 밀고 갔을 겁니다.
- 지표는 질문별로 고릅니다. hit@1(체감 정확도)과 recall@10(후보 확보력)을 분리했기 때문에 “그래프는 졌지만 쓸모가 있다”는 결론이 가능했습니다. 단일 지표였다면 그래프 검색은 그냥 버려졌을 겁니다.
- 비교 실험의 통계는 설계를 따라갑니다. 같은 문항을 두 전략이 푸는 구조면 McNemar, 소표본 비율이면 Wilson. 도구를 데이터 구조에 맞추는 것이 p값을 읽는 것보다 먼저입니다.
- 가설이 뒤집힌 결과는 숨기지 않고 리포트와 README에 그대로 남겼습니다. 결과가 예상과 달랐다는 사실 자체가 다음 설계 판단의 근거가 됩니다.
수치 출처는 저장소의 reports/significance.md와 reports/embedder_ablation.md이고, 재현 명령도 함께 적어 두었습니다.