프롬프트로는 안 됐고, 단계를 나누니 됐다

요약이 얇은 걸 프롬프트로 고치려다 더 나빠졌다. 수치 추출과 문장 작성을 분리하니 재현율 18%p, 실재율 2.6%p가 같이 올랐다

모델 교체를 접고 나니 현행 모델의 약점이 남았다. 틀리지는 않는데 원문 수치의 절반을 빠뜨린다. 프롬프트에 담을 항목을 명시했더니 두 지표가 같이 내려갔고, 수치 추출과 문장 작성을 두 단계로 나누니 같이 올라갔다.

하려던 것

지난번에 모델 교체를 접었다. 후보 셋이 다 밀렸다. 그런데 현행 모델 품질도 성에 차지 않았다. 지표를 보니 어디가 문제인지는 분명했다. 틀리지는 않는다. 얇다.

실적 발표문 요약에서 출력한 숫자가 원문에 실재하는 비율은 97.0%다. 그런데 원문의 헤드라인 수치를 담은 비율은 51.8%다. 절반을 빠뜨린다.

프롬프트를 보니 이유가 짐작됐다. “핵심 포인트 3~5개” 만 요구하고 어떤 수치를 담으라는 말이 없다. 담을 항목을 명시하면 될 것 같았다.

어디서 막혔나

나빠졌다. 두 지표 모두, 두 언어 모두.

조건실재율재현율항목수 준수
기준선97.0%51.8%199/200
수치 항목 명시95.2%46.3%140/200
명시 + 자리 늘림96.6%48.4%131/200
기준선: - 4분기 매출은 3,030만 달러로 전년 동기 3,340만 달러 대비 감소했으며,
          순손실 390만 달러(주당 0.17달러 손실)를 기록했다.
개선안: - 4분기 매출은 $30.3 million이며, 연간 매출은 $119.9 million을 기록했다.

수치는 더 들어갔는데 전년 동기 대비가 사라졌다. 필수 항목을 지정하니 숫자를 한 줄에 몰아넣고 맥락을 버렸다. 항목 2개만 낸 문서가 59건이었다.

그리고 첫 하락 폭이 11.6%p로 너무 커서 채점기를 다시 봤다. 놓친 수치가 무엇인지 세어 보니 현금, 총자산, 자본이었다. 재현율 목표를 “문서에서 제일 큰 값 네 개”로 뒀는데, 실적 기사 요약이 담지 않아도 되는 값이 거기 있었다. 개선안은 매출·이익· EPS로 유도했으니 그쪽을 더 많이 놓쳤다. 편집상 더 나은 선택이 벌점을 받고 있었다.

목표를 손익·가이던스로 좁히고 전 결과를 다시 채점했다. 격차가 5.5%p로 줄었고 순위는 그대로였다. 결론은 같지만, 고치기 전에 보고했다면 과장된 수치를 남겼다.

어떻게 풀었나

한 번의 요청에 “정확하게 · 빠짐없이 · 짧게” 를 동시에 요구한 게 무리였다고 봤다. 그래서 나눴다.

1단이 원문 전문에서 수치만 뽑는다. 문장은 쓰지 않고 한 줄에 하나씩, 원문 표기 그대로. 재무상태표 항목은 뽑지 말라고 했다. 2단은 원문을 다시 읽지 않는다. 뽑힌 수치 목록과 도입부 1,500자만 받아 문장을 쓴다.

측정도 단계로 나눴다. 2단 결과만 보면 어느 단계가 망쳤는지 알 수 없다. 1단 추출 실재율, 1단 추출 재현율, 그리고 2단 유입 — 최종 출력에 1단 목록에 없던 숫자가 섞였는지. 이게 안전장치다.

첫 시도는 실패했다. 1단에 고정 항목 여섯 개만 뽑게 했더니 추출 재현율이 23.7%에서 막혔고, 2단 유입이 42.9%로 튀었다. 1단이 너무 적게 주니 2단이 도입부에서 숫자를 끌어왔다. 병목은 2단이 아니라 1단의 항목 수였다.

1단을 열었다. 손익·전망 수치를 전부 뽑으라고.

정리하면

조건언어실재율재현율1단 재현율2단 유입분당
1단 기준선한국어97.0%51.8%——18.8
1단 기준선영문99.9%56.9%——24.3
2단 열린 추출한국어99.6%69.8%78.2%6.6%4.7
2단 열린 추출영문100.0%48.6%66.9%23.3%7.4
2단 고정 6항목한국어99.7%26.3%23.7%42.9%18.5

한국어에서 재현율 18.0%p, 실재율 2.6%p가 같이 올랐다. 프롬프트 문구로는 둘 다 내려갔던 것이다.

그리고 이게 앞선 결론을 뒤집었다. 지난 편에서 네 모델 전부 한국어 수치 충실도가 영문보다 낮아서 “영문으로 정제하고 필요할 때만 번역하라”고 적었다. 2단에서는 한국어 69.8%가 영문 기준선 56.9%를 앞선다. 한국어의 손실은 모델이 한 번에 다 하려 할 때 생기는 것이었다.

영문은 이득이 없었다. 실재율은 100%로 완성되는데 재현율이 내려간다. 1단 추출 재현율이 66.9%로 한국어보다 낮고 2단 유입이 23.3%로 높다. 왜 언어에 따라 갈리는지는 안 쟀다.

대가는 처리량이다. 분당 18.8건에서 4.7건으로 4배 느려진다. 호출이 문서당 두 번이고 1단 출력이 길다. 하루 6,700건이면 이 파이프라인 규모에는 남아서 받아들였다.

배운 점

모델을 바꿀 문제가 아니었다. 후보 셋을 200건씩 두 언어로 재는 데 이틀을 썼고, 결론은 현행 유지였다. 정작 품질은 같은 모델에 처리 구조를 바꿔서 올렸다. 지표가 “얇다”고 가리키고 있었는데 나는 모델 목록부터 뒤졌다.

단계를 나눌 때는 단계별로 재야 한다. 첫 2단 시도는 최종 재현율 26.3%였다. 거기서 멈췄으면 “2단 처리는 효과 없다”고 적었을 것이다. 1단 추출 재현율 23.7%와 2단 유입 42.9%를 따로 보니 범인이 1단이었다.

그리고 지표가 뭘 보상하는지 확인해야 한다. 내 재현율은 “제일 큰 숫자를 언급했는가”를 재고 있었고, 그건 “핵심을 담았는가”와 다르다. 총자산을 적어야 점수가 오르는 지표로 편집 품질을 판단하고 있었다. 프롬프트 개선이 개악으로 찍힌 게 그 때문이다.

다만 여기서 멈추면 안 됐다. 테스트셋이 중앙 12,000자인데 실제 경제 기사는 3~4천자다. 2단이 고친 게 사실은 길이 문제일 수도 있다. 다음 편에서 그걸 가른다.


원자료: docs/ECON_MODEL_EVAL.md. 재현 명령은 그 문서의 “쓰는 법” 절에 있다.