LLM 분류 확신 0.7 이상을 '오답 0건'으로 발행했는데, 재검증 일치율은 80%였습니다
오후에 블로그 두 편을 발행했습니다. 그중 한 편은 제목 자체가 '확신 0.7 이상이면 오답 0건'이었습니다. 같은 날 저녁, 다른 세션에서 표본을 늘려 다시 측정했습니다. 확신 0.7 이상 구간의 결과가 기존 라벨과 일치한 비율은 80%였습니다.
숫자를 잘못 해석한 것이 문제의 전부는 아니었습니다. 더 많은 작업이 필요했던 이유는 그 문장이 이미 블로그와 SNS 원고로 옮겨진 뒤였기 때문입니다. 본문에는 정정을 덧붙였고, 미게시 원고에는 표본 조건을 넣었습니다. 이미 게시된 원고 두 건은 이번 작업에서 수정하지 못했습니다. 이 글은 그 하루의 기록입니다.
20건으로 만든 두 문장
사내 문서 지식그래프 검색 도구에 분류 전용 모델(Jev)을 넣을지 검토하던 중이었습니다. 문서 색인 과정에서는 종류(무슨 문서인가)와 저자 편(우리 수행분인가, 다른 곳의 자료인가)을 판정합니다. 이 작업을 범용 대규모 언어 모델(LLM) 대신 비용이 낮은 분류 전용 모델로 처리할 수 있는지 확인하고 있었습니다.
먼저 문서 20건으로 시험하고 두 문장을 기록에 남겼습니다. 여기서 확신은 모델이 자신의 분류 결과에 붙이는 점수입니다.
'빠른 분류기를 넣으면 색인의 LLM 호출 60%가 사라진다'
'확신 0.7 이상이면 오답 0건이다'(해당 구간 12건 중 12건 일치)
이 기록이 며칠 뒤 글감이 됐고, 블로그 두 편으로 작성돼 발행됐습니다. 전체 표본이 20건이고 확신 0.7 이상 구간은 그중 12건이라는 조건은 기록에 있었습니다. 하지만 글로 옮기는 과정에서 결론만 강조되고 표본 조건은 빠졌습니다.
호출을 열어 보니 분류만 떼어낼 수가 없었습니다
같은 날 고객 대표가 분류 전용 모델을 실제 코드에 적용할지 물었습니다. 그래서 문서 색인 코드를 확인했습니다.
문서 정보를 정리하는 카드 생성은 한 번의 LLM 호출로 종류·저자 편·요약·참여자를 함께 추출하고 있었습니다. 분류 전용 모델은 이 중 종류와 저자 편만 판정합니다. 요약과 참여자 추출은 맡길 수 없어서, 분류를 따로 처리해도 기존 호출은 남습니다. 이 구조에서는 기대한 호출 감소에 따른 색인 비용 절감이 없었습니다.
분류 전용 모델로 옮길 수 있는 것은 한 호출이 맡은 작업의 일부였습니다. 그것만으로 호출 횟수가 줄어드는 것은 아니었습니다. 실제 호출 구조를 확인하기 전에는 60% 감소라는 숫자를 뒷받침할 근거가 없었습니다.
대체를 검토할 수 있는 작업은 두 가지였습니다. 분류 체계를 바꿀 때 전체 문서 집합(코퍼스) 9,044건을 다시 분류하는 작업과, 채팅 질문의 처리 경로를 정하는 라우팅입니다. 전량 재분류는 범용 모델 대비 약 30배 저렴해서 여전히 의미가 있습니다. 다만 상시 색인 비용과는 다른, 필요할 때 실행하는 배치 작업입니다.

300건 재검증에서 기존 라벨과의 일치율은 80%였습니다
같은 날 저녁, 별도 세션에서 표본을 300건으로 늘려 다시 측정했습니다. 지시문 버전은 유지하고, 같은 입력을 두 번 실행했습니다. 실행 조건을 맞추는 seed 값도 고정했습니다. 전체 실행에는 176초가 걸렸습니다.
문턱 | 표본 20건 | 표본 300건에서 기존 라벨과 비교한 결과 |
|---|---|---|
확신 0.7 이상 | 12건 중 12건 (오답 0) | 80% |
확신 0.9 이상 | 측정 구간 없음 | 96% |
확신 0.5 미만 | 흔들린다 | 흔들린다 (유지) |
확신 0.7이라는 문턱(그 이상이면 분류 결과를 채택하는 기준) 자체보다, 그 구간에서는 오답이 없다고 단정한 문장이 문제였습니다. 12건 중 12건이 맞았다는 것은 그 표본에서 오답을 관찰하지 못했다는 뜻입니다. 앞으로 같은 조건의 모든 문서가 맞는다는 보장은 아닙니다.
버틴 문장과 무너진 문장의 차이
반면 작은 표본에서 관찰한 현상 중 다시 확인된 것도 있었습니다. 확신 0.5 미만 구간에서 판정이 흔들린다는 관찰입니다. 300건을 두 차례 실행했을 때 판정이 바뀐 16건은 모두 확신 0.5 미만이었습니다.
두 문장은 주장하는 범위가 달랐습니다. 하나는 관찰한 구간을 설명했고, 다른 하나는 특정 문턱 위에서는 오답이 없다고 단정했습니다.
재검증에서도 확인된 관찰: 확신 0.5 미만 구간에서 두 회차의 판정이 달라졌습니다.
유지되지 않은 주장: 확신 0.7 이상 구간에서는 오답이 없다고 단정했습니다.
작은 표본의 관찰이 전부 틀렸다는 뜻은 아닙니다. 이번 사례에서는 불안정한 구간에 대한 관찰은 다시 확인됐지만, 오답이 없다는 단정은 유지되지 않았습니다. 표본에서 본 사실과 그 밖의 데이터에 대한 보장을 구분할 필요가 있었습니다.

불일치의 절반은 모델 문제가 아니었습니다
기존 라벨과 80%만 일치한다는 결과를 보고 처음에는 모델 성능이 부족하다고 생각했습니다. 하지만 불일치 사례를 하나씩 확인하니 절반은 분류 기준으로 명확하게 나누기 어려운 문서였습니다.
같은 문서에 형식을 기준으로 한 이름과 내용을 기준으로 한 이름이 모두 성립하는 경우가 있습니다. 어느 쪽으로 분류해도 사람이 납득할 수 있습니다. 이런 경계에서는 모델을 교체하는 것만으로 기존 라벨과의 불일치를 해결하기 어렵습니다. 먼저 분류 기준을 명확히 할 필요가 있었습니다.
저자 편 판정에서도 문제가 드러났습니다. 확인한 24건 중 13건이 '다른 곳의 자료'에서 '우리 수행분'으로 바뀌었습니다. 발주처의 관리 문서나 인터뷰 회의록 등이었습니다. 우리 수행분인지는 해당 사업에 우리가 수행사로 참여했는지에 달려 있어, 문서 내용만으로 판정하기 어려웠습니다.
재검증에서 정답으로 사용한 값은 기존 데이터의 라벨이었습니다. 그런데 불일치 사례 중 절반이 분류 기준의 모호함에서 나왔다면, 모든 불일치를 모델의 오답으로 셀 수는 없습니다. 그래서 기존 답을 보지 않고 사람이 판정하는 블라인드 정답표 57건(불일치 47건 + 대조군 10건)을 만들었습니다. 이 표가 채워지기 전에는 문턱별 정확도를 확정하지 않기로 했습니다.
발행된 위치에 따라 정정 방법이 달랐습니다
모델 도입에 대한 기술적 판단보다 이후 정정 작업에 더 많은 시간을 썼습니다. 두 주장은 이미 블로그와 SNS 원고로 옮겨진 뒤였고, 공개 여부에 따라 정정할 수 있는 범위가 달랐습니다.
층 | 상태 | 할 수 있었던 것 |
|---|---|---|
발행된 본문 2편 | 공개돼 있지만 내가 소유 | 글 끝에 재실측 결과를 덧붙임 |
미게시 SNS 원고 10건 | 아직 안 나감 | 해당 문구 5곳에 표본 조건 추가 |
이미 게시된 SNS 2건 | 이미 게시됨 | 이번 작업에서는 수정하지 못함 |
본문은 직접 수정할 수 있었고, 미게시 SNS 원고에는 표본 조건을 추가할 수 있었습니다. 이번 작업에서 정정하지 못한 것은 이미 SNS 에 게시된 두 건이었습니다. 어디에 글이 남아 있는지에 따라 정정에 필요한 작업이 달라졌습니다.
SNS 원고를 미리 쌓아 두면 근거가 바뀔 때 수정할 대상도 늘어납니다. 이번에는 문구가 원고마다 복사돼 있어 다섯 곳을 하나씩 열어 고쳤습니다. 원고를 쌓아 두는 경우에는 어떤 근거를 참조했는지 추적하고, 원본이 바뀌면 관련 원고를 함께 확인할 수 있는 구조가 필요했습니다.
기존 글은 내리지 않고 재측정 결과를 덧붙였습니다. 관찰 전체를 폐기하기보다 어느 수치와 주장이 유지되지 않았는지 설명하는 편이 맞다고 판단했습니다. 글의 핵심 결론 자체가 틀렸다면 정정 범위도 달라집니다.

다음부터 발행 전에 보는 것
같은 문제를 줄이려고 발행 전 확인 항목을 네 가지로 정리했습니다. 모든 작업에서 300건 재검증이 가능한 것은 아닙니다. 다만 이번에는 실행 시간이 176초였습니다. 발행 전에 재측정할 수 있는지, 그 비용부터 확인할 여지가 있었습니다.
결론에 숫자가 있으면 표본 크기와 해당 조건을 함께 적습니다. 표본에서 관찰한 결과를 일반적인 보장으로 확대하지 않습니다.
호출 횟수를 줄인다고 말하기 전에 한 번의 호출이 어떤 작업을 함께 처리하는지 확인합니다.
불일치를 모델의 오답으로 세기 전에 분류 기준과 기존 라벨이 명확한지 확인합니다.
재측정에 필요한 시간과 비용을 확인하고, 발행 전에 검증할 수 있는 범위를 정합니다.
원본 기록은 300건 결과로 덮어쓰지 않았습니다. 20건을 측정한 기록 아래에 재측정 결과를 이어 붙였습니다. 처음 어떤 표본을 보고 판단했는지와 그 판단이 어떻게 바뀌었는지를 함께 남기기 위해서입니다.
색인 적용은 보류하고, 남은 용도는 따로 판단했습니다
색인 과정에 분류 전용 모델을 도입하는 것은 보류했습니다. 기대했던 LLM 호출 60% 감소가 실제 구조에서는 성립하지 않았기 때문입니다. 전량 재분류와 채팅 라우팅에 적용할지는 별도로 판단합니다.
표본을 늘리니 기존 라벨과의 일치율을 다시 해석해야 했고, 라벨 자체의 기준도 확인할 필요가 생겼습니다. 작은 표본에서 본 사실을 소개할 때는 표본 조건을 함께 남기고, 일반적인 성능 보장과 구분해서 쓰기로 했습니다.
문턱별 정확도는 블라인드 정답표를 확인한 뒤 판단합니다. 이번에 확인한 일치율은 기존 라벨을 기준으로 한 재검증 결과입니다.