일본 광고 법규 검수 시스템
레거시 분류기를 앙상블 + RAG + LLM 의사결정 엔진으로 — 놓치는 위반 문구를 1/5로
- 0.475 → 0.900
- 위반 탐지 Recall
- +16.9%p
- macro-F1 (0.738 → 0.907)
- 52.5% → 10%
- 놓치는 위반 문구 비율
- 4개
- 운영 모드 (위험도별 LLM 위임)
공개 범위 안내 — 회사 프로젝트로, 협업 인원 구성 · 학습/라벨 데이터와 RAG 코퍼스 규모 · 실운영 지표는 사내 정책상 공개하지 않습니다. 아키텍처 · 실험 기록 · 상세 수치가 담긴 자료는 메일로 요청해 주시면 보내드립니다.
한 줄로
일본 광고 문구가 약기법·경품표시법·건강증진법을 위반하면 매체 심사 반려와 법적 제재로 이어집니다. 판정 정확도가 곧 비즈니스 리스크인 도메인입니다. 기존 경량 모델은 실제 위반 문구의 절반 이상을 놓치고 있었고, 판정 근거도 대체 문구도 주지 못했습니다. 벤치마크부터 다시 세우고, 앙상블·RAG·LLM을 역할별로 나눠 얹은 뒤, 한 번 개선하고 끝나지 않는 루프로 운영에 올렸습니다.
4단계로 진행
- 벤치마크부터 — 레거시와 신규 모델을 같은 held-out 테스트셋(1,222건)으로 비교할 수 있게 평가 기준을 먼저 고정
- 모델 탐색 → 앙상블 — 서로 다른 표현 방식(문자 n-gram · subword 임베딩 · Transformer 2종)을 대표하는 4개 모델을 검증 macro-F1 비례 가중 소프트보팅으로 결합
- RAG + 근거 · 대체 문구 — Qdrant + multilingual-e5-large(1024d), semantic + BM25 하이브리드 검색. 법령 / 가이드라인 / 위반사례 / 정상사례를 성격별로 분리 색인
- 지속 개선 루프 — 최종검토 에이전트 → 라벨러 재검토 → 재학습 → 평가 → 재배포
주요 판단
- 메타러너 스태킹 대신 가중 소프트보팅 — held-out 규모에서는 메타러너 신뢰도가 낮고, 이 도메인은 판정 근거를 설명할 수 있어야 했습니다.
- 레거시 모델 포함 여부는 실측 후 결정 — 라벨 인덱스 매핑이 검증되지 않은 채 넘기지 않고, 라벨이 있는 샘플로 직접 확인한 뒤 앙상블에 넣었습니다.
- LLM을 하나에 묶지 않기 — 상용 API와 자체 호스팅 모델(vLLM)을 같은 인터페이스 뒤에 두고 비용·처리량·데이터 반출 조건에 따라 바꿔 씁니다.
- 4개 운영 모드 — RAG+LLM 풀파이프라인 / ML 단독 / ML 우선 + 애매 구간만 LLM / ML 1차 판정 + 확정 위반은 근거·대체문구만 생성 + 애매한 것만 LLM 재검토(기본 운영). 비용과 위험을 구간별로 통제하기 위한 구조입니다.
결과 (held-out 1,222건)
| 지표 | 레거시 | 앙상블 | 변화 |
|---|---|---|---|
| Accuracy | 0.7800 | 0.9100 | +13.0%p |
| F1 (macro) | 0.7381 | 0.9066 | +16.9%p |
| 위반 탐지 Recall | 0.4750 | 0.9000 | +42.5%p |
| 위반 탐지 Precision | 0.9500 | 0.8780 | −7.2%p |
False Positive는 1건 → 5건으로 늘었습니다. 위반을 놓치는 비용이 과잉 차단 비용보다 큰 도메인이라 의도한 트레이드오프입니다.
운영에 올리는 방식
- 모델 메타데이터·성능·활성 상태를 버저닝하는 모델 레지스트리
- 레거시와 신규 모델을 병렬로 돌려 판정 일치율을 비교하는 Shadow 검증 배치
- CTO가 기술고문으로 개발 방향을 함께 검토
배운 점
Recall을 끌어올리는 과정에서, 정확도 자체보다 “어떤 실수를 더 용납할 수 없는가” 라는 도메인별 트레이드오프 판단이 모델 성능만큼 중요하다는 걸 배웠습니다.
추천 직무와 연결되는 지점
오프라인 벤치마크 → Shadow 비교 → 단계적 전환 → 피드백 재학습이라는 흐름은 추천 모델을 교체할 때도 그대로 필요한 운영 방식입니다. Recall과 Precision 사이에서 도메인 비용을 근거로 기준을 정한 경험도 마찬가지입니다.
한계
위 수치는 통제된 held-out 벤치마크 기준입니다. 실운영 트래픽 기준 지표는 공개 범위에 포함하지 않았습니다.