MindE 민원 긴급 분류기 (urgency-bert)
한국 공공 민원의 **긴급 여부(이진)**를 판정하는 KLUE BERT 기반 모델.
용도: 분류기와 함께 사용. is_urgent=True면 119/112/안전신문고 우선 안내 권장.
성능
Test set (86,778건)
- Accuracy: 0.999
- AUC: 0.998
- F1 (긴급 클래스): 0.929
- Precision (긴급): 0.874
- Recall (긴급): 0.990
라벨링 기준 (룰베이스 자동 생성)
긴급 키워드 30개 매칭 + 예외룰 적용:
- 긴급 키워드: 화재, 폭발음, 감전, 매몰, 추락, 가스누출, 산사태, 지진, 방사능, 독극물, 아동학대, 가정폭력, 노인학대, 붕괴, 무너지/졌, 쓰러졌/진, 토사 무너, 가스냄새, 연기, 등 (30개)
- 예외룰 (긴급 키워드 있어도 비긴급 처리): "예방|대비|우려|안내|방법 알려|절차|신고 방법|문의" 등 동반 시
학습 데이터
- AI Hub 143번 데이터 86만 건 중 룰베이스로 라벨링
- 긴급 6,720건 (0.78%) / 일반 858,363건
- 학습: 긴급 전체 + 일반 5배 언더샘플링
- 평가: val/test 전체 분포 유지 (실 환경 평가)
학습 설정
- Base:
klue/bert-base - max_length: 128, batch 32, epoch 3, lr 2e-5
- 학습 시간: ~15분 (RTX 4060 Ti)
사용 예시
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
tokenizer = AutoTokenizer.from_pretrained("atti433/minde-urgency")
model = AutoModelForSequenceClassification.from_pretrained("atti433/minde-urgency")
text = "아파트에서 가스누출이 발생했습니다 위험합니다"
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=128)
with torch.no_grad():
logits = model(**inputs).logits
probs = torch.softmax(logits, dim=-1)
is_urgent = bool(probs[0, 1] > 0.5)
print(is_urgent, probs[0, 1].item())
또는 본 프로젝트의 chatbot_service.check_urgency() 사용 (DB 키워드 + 예외룰 자동 적용).
한계
- 룰베이스 라벨링이라 키워드 중심 학습 → 키워드 없는 진짜 긴급 상황 놓칠 수 있음 (예: "도로에 사람이 누워있어요")
- 예외룰("예방", "안내") 동반 시 비긴급 처리 — 가끔 false negative
- 실 운영 시 mcp_server.py / chatbot_service.py의 예외룰 + DB 키워드 매칭과 함께 사용 권장