상·하한 채점

정답지에 없는 것을 만났을 때, 오답으로 셀지 정답으로 셀지 양쪽 다 세어보는 방법.

무엇이 문제인가

골든셋은 보통 어떤 검색기가 뽑아온 후보만 사람이 읽어서 만든다. 전 문서를 다 읽을 수는 없기 때문이다.

질문 → 검색기 A가 후보 40개 뽑음 → 사람이 그중에서 정답 고르기
        └──── 이 풀 밖의 청크는 라벨이 아예 없다 ────┘

그 다음 검색기 B를 평가하면 문제가 생긴다. B가 풀 밖에서 진짜 정답을 찾아와도 라벨이 없어서 오답으로 세어진다.

B가 잘할수록 손해를 본다. 정답지가 A에 맞춰져 있기 때문이다.

다루는 법 — 세 가지 가정으로 세 번 채점한다

이름라벨 없는 청크를누구에게 유리
하한 (비관)오답으로 센다A. 흔히 쓰는 기본 채점이 이것
응축순위에서 빼고 센다 (판정된 것끼리만 겨룸)중립
상한 (낙관)정답으로 센다B

하한 ≤ 응축 ≤ 상한이 항상 성립한다. 진짜 값은 이 구간 어딘가에 있다.

어떻게 판정하나

하한에서도 B가 이긴다   → 라벨링 없이 채택 확정
상한에서도 B가 진다     → 라벨링 없이 기각 확정 (라벨을 더 붙여도 못 이긴다)
구간이 걸친다           → 이때만 추가 라벨링

전부 라벨링하지 않아도 되는 게 핵심이다. 판정이 갈리는 경우에만, 그것도 판정을 뒤집을 수 있는 청크(B가 상위에 올렸는데 아무도 본 적 없는 것)만 읽으면 된다.

우리 프로젝트에서

정답지가 e5-small(M0)이 뽑은 후보로 만들어져 있어, 2차 실험의 새 임베딩에 구조적으로 불리했다.

조합리랭킹 상위 10개 중 미판정 비율
e5 + R1 (현행)0.7%
bge-m3 + R126.0%
KURE + R132.0%

그리고 상·하한 폭 자체가 그 편향을 그대로 보여줬다 — M0는 0.0018, 새 모델은 0.05 안팎.

구간이 걸쳐서 결국 라벨링으로 풀었고, 그 뒤 미판정률이 전 조합 **0.0%**가 되며 상한 = 응축 = 하한으로 구간이 한 점에 붕괴했다. 전 과정 → 검색 실험 결과 §8

상한은 "있을 수 있는 최댓값"이지 예상값이 아니다

라벨링해보니 미판정 청크 2,105개 중 **진짜 정답은 2.0%**뿐이었고, 실제 상승분도 상한이 시사한 폭(+0.056)의 절반가량인 +0.0297이었다. 상한이 높다고 “잘하면 이만큼 오른다”로 읽으면 안 된다. 그건 판정을 유보할 근거일 뿐이다.

그렇다고 정답률이 낮다 = 영향이 없다로 읽어도 안 된다

우리가 실제로 저지른 실수다. 1.3%라는 비율을 보고 “하한이 참값이니 기각”이라고 적었는데, 그 정답을 채점에 반영해보니 7개만으로 도전 모델이 +0.0078 올랐다.

MRR은 상위 순위에 가혹하게 민감해서 정답 하나가 한 문항 점수를 0 → 0.5로 바꾼다. 개수 비율이 아니라 지표에 반영해서 봐야 한다.검색 실험 결과 §9

관련

골든셋 · paired bootstrap · MRR · 검색 실험 결과 §8