--- language: ko license: cc-by-sa-4.0 base_model: klue/bert-base library_name: transformers tags: - bert - nlp - korean - klue datasets: heegyu/korean-petitions metrics: - accuracy - f1 pipeline_tag: text-classification --- # KLUE_BERT Classification - Fine-tuned on Korean-Petitions KLUE-BERT 모델(`klue/bert-base`)을 한국 청와대 국민청원 데이터셋(`heegyu/korean-petitions`)으로 Fine-tuning하여 청원 내용을 자동으로 카테고리 별로 분류합니다. ## 데이터 분포 시각화 ![데이터 분포](data_eda.png) ## Model Details ### Model Description - **Task:** Multi-class Text Classification (17 Categories) - **Base Model:** klue/bert-base - **Technique:** PEFT / LoRA (Rank=32, Alpha=64) - **Language:** Korean - **Description:** 청와대 국민청원의 제목과 본문을 입력받아 해당 청원이 어느 카테고리(예: 정치개혁, 보건복지, 인권/성평등 등)에 속하는지 예측합니다. ## Model Uses ### Direct Use 한국어 텍스트로 된 민원이나 제안을 특정 카테고리로 분류하는 데 직접 사용할 수 있습니다. 특히 공공 기관의 민원 자동 분류 시스템 초안으로 활용하기에 적합합니다: `정치개혁`, `외교/통일/국방`, `일자리`, `미래`, `성장동력`, `농산어촌`, `보건복지`, `마을공동체`, `경제민주화`, `안전/환경`, `주거/20대`, `인권/성평등`, `문화/예술/체육/언론`, `반려동물`, `교통/건축/국토`, `행정`, `기타` ### Downstream Use 정부 정책에 대한 여론 분석, 특정 시기별 사회적 이슈 트렌드 파악 등 데이터 분석 프로젝트의 기초 모델로 활용 가능합니다. ## 📊 Training Results (Full Dataset) | Parameter | Value | | :--- | :--- | | **GPU** | NVIDIA Tesla V100 (32GB) | | **Training Duration** | 03:47:33 | | **Data Size** | 436,660 samples (Full) | | **Batch Size** | 64 | | **Learning Rate** | 3e-5 | | **Max Sequence Length** | 256 | | **Epochs** | 2.0 | ![train_result](https://cdn-uploads.huggingface.co/production/uploads/657eb58e9a9e347d4bcbb459/EFnQ51LHMpw1DC6MgRiG9.png) ### Final Evaluation Metrics (on Test Set) ![Evaluation](eval.png) - 평가 샘플 수: 2,000개 - 정확도 (Accuracy): 0.4505 - 정밀도 (Precision): 0.3684 - 재현율 (Recall): 0.0693 - F1 점수 (F1 Score): 0.4189 - 평균 예측 신뢰도: 0.3908 - 오분류율: 54.9% ##### 카테고리별 성능 (F1 Score 기준): - 최고 성능: 정치개혁 (F1: 0.621) - 최저 성능: 농산어촌 (F1: 0.000) - 평균 F1 Score: 0.317 ## 🛠 Usage ```python from transformers import AutoModelForSequenceClassification, AutoTokenizer import torch model_id = "rudalson/klue-bert-classification-petitions" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForSequenceClassification.from_pretrained(model_id) text = "청원 내용 예시: 우리 동네 공원의 안전을 강화해주세요." inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=256) with torch.no_grad(): logits = model(**inputs).logits predicted_class_id = logits.argmax().item() ```