Procurement NLP
공고명 NLP API · Macro-F1 0.9639 · 세부분야 F1 0.90 · CPU 약 50ms
Built with RoBERTa-large · LoRA · SBERT · UMAP · HDBSCAN · ONNX Runtime INT8 · FastAPI
WHY
실시간으로 들어오는 공고를 담당 부서에 곧바로 연결하려면 공고명만으로 입찰 가능 여부와 세부 분야를 판단해야 했습니다. 하지만 하천·소방·정보통신 같은 세부분야 라벨은 거의 없었고 운영 환경에는 추론용 GPU도 없었습니다. 모든 공고를 수작업으로 라벨링하지 않고 도메인 분류체계를 만들며, 두 가지 판단을 CPU에서 빠르게 제공하는 pipeline이 필요했습니다.
Accuracy 96.4%
Weakly supervised multiclass model
Static INT8 ONNX · 약 330MB
HOW
부족한 라벨에서 CPU 서빙 가능한 분류체계까지
Teacher의 도메인 표현을 분류에만 쓰지 않고 ontology discovery와 업무 카테고리 supervision의 출발점으로 사용했습니다.
- 01 입찰가능성 teacher
KLUE RoBERTa-large를 LoRA, focal loss, R-Drop과 FGM으로 fine-tuning합니다.
- 02 Ontology discovery
1024차원 CLS 표현을 UMAP·HDBSCAN으로 묶고 사람이 cluster를 검토합니다.
- 03 Weak labels
Hard-rule override와 SBERT 0.9·domain RoBERTa 0.1 Max-Sim confidence를 결합합니다.
- 04 Multiclass student
동적으로 만든 label set에서 class-weighted LoRA model을 학습합니다.
- 05 INT8 batch serving
Adapter를 merge하고 static ONNX quantization 후 두 모델을 FastAPI에서 병렬 실행합니다.
RESULT
입찰가능성 평가
| 접근 | Macro-F1 | Accuracy |
|---|---|---|
| LLM few-shot | 0.351 | 54.0% |
| Fine-tuned RoBERTa + LoRA | 0.9639 | 96.4% |
| RAFT | 0.350 | 53.8% |
| Three-agent path | 0.9639 | 96.4% |
모든 행은 같은 500건 binary evaluation set을 사용했습니다.
기여
- 업무 카테고리 supervision을 위한 representation-to-ontology와 Max-Sim weak-label path를 설계했습니다.
- Binary·multiclass LoRA classifier를 학습하고 static INT8 ONNX로 변환해 FastAPI batch endpoint에 병렬 추론을 연결했습니다.