12.5.4 빈 결과 집합(Empty Result Set)에 대한 오검증 방지 대책
수많은 AI 모델 에이전트들이 제출한 쿼리를 채점하는 거대한 오라클 파이프라인을 운영하다 보면, 아키텍트들이 설계 단계에서 미처 예상하지 못했지만 라이브 환경에서 가장 치명적이고 빈번하게 논란을 일으키는 치명적인 사각지대가 하나 존재한다. 그것은 바로 런타임에 쿼리가 어떠한 데이터도 스캔하지 못하고 그저 껍데기만 반환해 버리는 ‘빈 결과 집합(Empty Result Set)’, 즉 수학적 공집합(\emptyset)의 기만적인 처리 문제다.
1. 텅 빈 텐서의 함정과 거짓 양성(False Positive)의 지옥
가상화된 샌드박스 내부에서 “현재 전체 데이터베이스에서 회사의 창업자보다 급여를 많이 받는 직원의 이름과 이메일을 모두 찾아라“라는 매우 타당한 비즈니스 질문을 던졌다고 가정해 보자. 인간 전문가가 작성한 정답 쿼리(Golden SQL)를 엔진에 스캔하면, 데이터베이스 내부의 급여 테이블에는 당연히 그러한 조건을 만족하는 튜플이 단 하나도 존재하지 않으므로, 엔진은 논리적으로 완벽하게 텅 빈 공집합 행렬 [] (Empty List Tensor)을 반환하게 된다.
그런데 우리의 평가 대상인 AI 모델이 쿼리 구조를 작성하다가 문맥적 환각(Hallucination)을 심하게 일으켜, “회사의 창업자보다 근속 연수가 적은 파트타임 직원의 취미를 찾아라“라고 완전히 안드로메다로 향하는 엉뚱하고 미친 쿼리(Predicted SQL)를 작성했다고 쳐보자. 그런데 불행하게도 이 테스트 데이터베이스 환경상 우연히 파트타임 직원에 대한 데이터가 존재하지 않는다면, 이 엉터리 쿼리 역시 데이터베이스로부터 어처구니없게도 정답과 똑같이 생긴 텅 빈 [] 집합을 반환받게 된다.
이 절망적인 순간, 앞서 우리가 그토록 정교하게 설계했던 비교 판별기(Comparator)는 두 텐서를 해시 맵핑으로 대조하며 hash([]) == hash([]) 라는 이산 등호 연산을 수행하고 만다. 그 결과, 엔진은 명백하게 비즈니스 논리가 완전히 틀려먹은 쓰레기 쿼리를 작성한 AI에게 “정답과 완벽히 100% 동일한 결과 집합을 반환했다“라고 칭송하며 1점(True) 만점의 월계관을 씌워주는 최악의 **오검증(False Positive, 거짓 양성)**을 저지르고 만다. 이것이 바로 실행 기반 평가 체계(Execution-based Evaluation)가 가진 가장 아프고 취약한 아킬레스건이 폭로되는 순간이다.
2. Empty Penalty: 공집합 하드 블로킹(Hard Blocking) 방어 정책
이러한 실행 테스트의 태생적이고 구조적인 억울한 모순을 근본적으로 타파하기 위해, 최고 수준의 오라클 시스템 설계자는 데이터 정규화 파이프라인의 가장 전방 입구에 **‘공집합 하드 블로킹(Hard Blocking)’**이라는 무자비한 검열 단계를 구축해야만 한다.
판별기에 도달한 정답 텐서(T_{gold})가 기수성(Cardinality) 0을 나타내는 완벽한 빈 텐서 레이어로 인출되는 그 즉시, 오라클은 채점 로직을 기계적으로 강제 중단(Halt)시키고 시스템 콘솔에 치명타 경고 플래그(WARNING_EMPTY_GOLDEN_SET_DETECTED)를 붉게 띄우며 다음의 2단계 비상 방어 우회 프로토콜을 가동한다.
- 데이터 동적 시딩(Dynamic Data Seeding) 재요청 피드백: 정답 데이터 자체가 텅 빈 공집합이 튀어나오는 벤치마크 테스트 케이스는, 평가 지표로서의 변별력 밀도가 0에 수렴하는 쓰레기 세트다. 오라클은 이 테스트의 결론을 보류(Pending) 상태로 격리 던져버리고, 도커 컨테이너의 샌드박스로 시그널을 즉시 역송금(Feedback)하여 “해당 쿼리가 어떻게든 1개 이상의 레코드를 반드시 뱉어낼 수 있도록, 테스트 DB의 타겟 스키마에 더미(Dummy) 데이터를 지금 당장 강제로 삽입(Seeding)하라“는 자동화된 환경 재생성 명령을 트리거(Trigger)한다.
- 구문 분석기 스위칭 및 공집합 무효화(Empty Nullification) 처리: 만약 메모리 제약이나 철저히 단절된 프로덕션 제약으로 인해 동적 시딩을 도저히 돌릴 수 없는 닫힌 환경이라면, 오라클은 과감하게 해당 벤치마크 질문 자체의 기여 가중치를 0으로 물리적 무효화시켜 버린다. 혹은 최후의 수단으로 채점 알고리즘의 궤도를 즉각 스위칭(Fallback)하여, 실행 검증을 포기하고 AST(추상 구문 트리) 기반의 텍스트 논리 검증 엔진을 억지로 깨워 ’구문적 의미론 대조’로 우회 채점을 진행해야만 한다.
오라클의 철학에서 볼 때 ’공집합’은 AI가 위대하게 “맞힌 것“이 결코 아니다. 그것은 그저 시스템이 “결과를 증명할 물리적 데이터가 없는 무의미한 상태“에 빠졌음을 의미할 뿐이다. 막강한 실행 오라클이 이 차이를 인스턴스 수준에서 철학적으로 깨닫지 못하고 맹목적으로 판별 루프를 돌린다면, 그 평가 벤치마크는 존재하는 모든 오답에게 정답의 면죄부를 뿌려대는 거짓 양성의 끔찍한 쓰레기 늪으로 전락하고 말 것이다.