네 모델을 200건으로 재고 나서, 내가 재지 않은 것이 결론을 뒤집었다
수치 충실도로는 후보가 이겼다. 그런데 한국어 띄어쓰기가 200건 전부 깨져 있었다
경제뉴스 파이프라인에 쓸 모델을 바꾸려고 후보 넷을 실적 발표문 200건으로 쟀다. 수치 충실도로는 후보 하나가 앞섰는데, 출력을 눈으로 보니 한국어 숫자 띄어쓰기가 200건 전부 깨져 있었다. 그 전에 채점기가 22%p를 틀리고 있었던 것도 같이 나왔다.
하려던 것
경제뉴스를 24시간 수집·정제하는 파이프라인을 만들 생각이었다. 서버의
gemma-4-26B-A4B보다 나은 게 있을 것 같아 교체를 검토했다. 목표는
Qwen3.8-Flash-Next. 총 180B에 활성 6B MoE라 대역폭 병목인 이 장비에 맞겠다고
봤다.
정답 라벨은 만들 수 없었다. 그래서 원문과 출력을 기계적으로 대조하는 지표만 골랐다. 실적 발표문 200건을 테스트셋으로 만들었다.
어디서 막혔나
후보가 장비에 안 들어갔다.
활성 6B라는 건 대역폭 병목만 줄여준다는 뜻이었다. 적재량은 총 파라미터가 결정한다. vLLM에 올릴 수 있는 제일 작은 양자화가 가중치만 132.7GB고, 통합메모리 총량이 119GB다. KV 캐시를 0으로 둬도 안 들어간다.
대체 후보 셋을 골라 돌렸다. 첫 수치가 이상했다. 실재율 74.1%. 넷 중 하나를 지어낸다는 뜻인데 출력은 멀쩡했다.
원문: $37,536 (천 단위 표)
출력: 3,753만 6,000달러
채점기: 3753 없음, 6000 없음 → 환각 2건
모델은 정확히 옮겼다. 채점기가 한국어 만·억 표기를 모르고 문자열로 대조하다가 멀쩡한 값을 환각으로 찍었다. 22%p가 측정 도구 탓이었다.
어떻게 풀었나
문자열 대신 값으로 맞췄다. 만/억/조/천을 합친 뒤 자릿수를 무시하고 비교한다. 96.7%로 올라갔다.
고치는 과정에서 결함이 계속 나왔다. 천을 빼먹어 285만 3천이 2,850,003으로
합쳐진 것. 곱셈의 부동소수점 꼬리가 19자리로 찍힌 것. 그리고 Qwen3-Next-80B는
형식 준수 0/60이 나왔는데, 내가 그 모델에 없는 추론 형식의 파서를 걸어서 출력이
통째로 삼켜진 거였다. Instruct 판에는 <think>가 없다. 채팅 템플릿만 봤으면
5초에 알았다.
지표에 절반도 빠져 있었다. 실재율은 출력한 숫자가 맞는지만 본다. 하나만 쓰고 그게 맞으면 100%다. 빠뜨렸는지는 안 보인다. 재현율을 붙였다.
무관한 문서끼리 대조해 우연 일치 바닥값도 쟀다. 7.5% 위에서 읽어야 한다.
정리하면
네 모델, 200건, 띵킹 OFF.
| 모델 | 한국어 실재율 | 한국어 재현율 | 영문 실재율 |
|---|---|---|---|
| gemma-4-26B-A4B | 97.0% | 51.8% | 99.9% |
| Qwen3.5-35B-A3B | 93.0% | 52.2% | 99.1% |
| GLM-4.7-Flash | 91.8% | 35.5% | 99.4% |
| Qwen3-Next-80B | 84.6% | 34.5% | 98.7% |
가장 큰 80B가 가장 나빴다. 현행 26B보다 한국어에서 12.4%p 아래다. 크기는 적재 가능성만 결정하고 품질은 예측하지 않았다.
Qwen3.5만 재현율에서 앞섰다. 출력을 눈으로 보려 나란히 뽑았다. 거기서 이게
보였다.
2025 년 4 분기 서비스 수익은 3 억 810 만 달러로 전년 동기 대비 5.3% 증가했으며
숫자와 단위 사이가 벌어져 있다. 200건 전부였다. gemma는 0건이다. 재현율이 높았던 이유도 같이 드러났다. 숫자를 더 많이 쓴다. 대신 지면에 못 올릴 형태로 쓴다.
지표는 이걸 못 봤다. 숫자가 원문에 있는지만 보니까 띄어쓰기가 깨져도 점수는 높다.
배운 점
측정값이 이상하면 채점기를 먼저 의심한다. 이 평가에서 채점기와 하네스 결함이 여섯 개 나왔고, 그중 다섯은 그대로 두면 모델 품질 문제로 읽혔을 것이다. 실재율 74.1%는 실제로 96.7%였고, 형식 준수 0/60은 내가 파서를 잘못 걸어서 생긴 것이었다.
지표가 좋다고 쓸 만한 게 아니다. 수치 충실도로는 후보가 이겼다. 실제로는 못 쓴다. 정답 라벨이 없어서 “잴 수 있는 것만” 골랐는데, 고른 것 밖에 결론을 뒤집는 게 있었다. 자동 지표로 후보를 좁히는 건 맞지만, 좁힌 뒤 출력을 눈으로 보는 단계를 빼면 안 된다.
그래서 교체를 접었다. 그런데 현행 품질도 성에 차지 않았다. 지표와 어긋나 보였지만 어긋나지 않았다. 현행 모델은 틀리지 않는다. 대신 얇다. 한 사례에서는 헤드라인 수치 네 개를 전부 놓치고 분기 매출만 썼다. 문장은 깔끔했다.
모델을 바꿔도 안 되고, 지표는 이미 그 약점을 가리키고 있었다. 남은 건 프롬프트와 처리 구조다. 다음 편에서 그걸 건드린다.
원자료: docs/ECON_MODEL_EVAL.md, docs/ECON_SAMPLES_KO.md(모델별 출력 나란히
보기), tests/test_numgrade.py(채점기 회귀 테스트 — 케이스는 전부 실제로
오판했던 입력이다).