--- language: - ko license: other library_name: transformers pipeline_tag: text-classification base_model: klue/bert-base tags: - bert - klue - korean - text-classification - urgency - minwon - complaint --- # 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) ## 사용 예시 ```python 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 키워드 매칭과 함께 사용 권장