--- language: ko license: apache-2.0 base_model: klue/bert-base tags: - klue-bert - text-classification - pytorch - ko - financial-domain - text-difficulty datasets: - custom metrics: - f1 - accuracy - mae --- ## Colab Notebook [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/112GWo0LrRls5B_uF6ghjZXzY6PxXzrnV?usp=sharing) ## 학습 데이터셋 https://huggingface.co/combe4259/difficulty_klue/blob/main/training_data_difficulty_klue.json # 금융 문서 난이도 분류 모델 (Text Difficulty Classification) 이 모델은 `klue/bert-base`를 파인튜닝하여, 한국어 금융 문장의 난이도를 10단계(1~10)로 분류하는 Text Classification 모델입니다. '어려운 문장'이 등장했는지 실시간으로 감지하여 '쉬운 문장 변환 AI'의 트리거 역할을 하도록 설계되었습니다. --- ## 사용 방법 (How to Use) ```python from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch # Hugging Face Hub 또는 저장된 로컬 경로에서 모델 로드 MODEL_PATH = "combe4259/difficulty_klue" tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH) model = AutoModelForSequenceClassification.from_pretrained(MODEL_PATH) model.eval() # 추론할 텍스트 text = "신용파생결합증권의 CDS 스프레드 변동에 따른 수익구조" inputs = tokenizer( text, return_tensors="pt", truncation=True, max_length=512, padding=True ) # 예측 with torch.no_grad(): outputs = model(**inputs) logits = outputs.logits # 모델은 0-9로 예측하므로, +1 하여 1-10 스케일로 변환 prediction = torch.argmax(logits, dim=-1).item() difficulty = prediction + 1 print(f"텍스트: {text}") print(f"예측 난이도: {difficulty}") # 출력: 예측 난이도: 7 ``` ## 학습 데이터 (Training Data) - 자체 구축한 2,880개의 금융 문장/단락으로 구성된 JSON 데이터 사용 - 데이터 분할: Train (2,016) / Validation (432) / Test (432) - 데이터 불균형: 난이도 7(28.2%)과 8(18.6%) 집중, 난이도 10(0.0%)은 1개 존재 - 전처리: klue/bert-base 토크나이저 사용, `max_length=512`로 패딩 및 절단 --- ## 학습 절차 (Training Procedure) - Base Model: `klue/bert-base` (`num_labels=10`) - Optimizer: AdamW - Loss Function: Weighted CrossEntropyLoss (클래스 가중치 적용) - 예: 샘플 1개인 난이도 10 → 10.0 - 샘플 568개인 난이도 7 → 0.35 - Epochs: 10 - Batch Size: 16 - Learning Rate: 2e-5 (with 500 warmup steps) - Best Model: `metric_for_best_model='f1'` (F1 점수가 가장 높은 체크포인트 저장) - Early Stopping: patience=3 (F1 점수가 3회 연속 개선되지 않으면 학습 조기 종료) --- ## 평가 결과 (Evaluation Results) Test Set (432개) 기준 최종 성능입니다. 'F1 Score'와 'MAE, Within 1 Acc' 모두에서 안정적인 성능을 보였습니다. | Metric | Score | 설명 | |-----------------------|-------|------| | F1 Score (Weighted) | 0.607 | (핵심 지표) 모델의 전반적인 정밀도/재현율 | | Accuracy (정확도) | 0.604 | 10개 중 정확히 맞힐 확률 | | MAE (평균 절대 오차) | 0.560 | (중요) 예측이 정답에서 평균 0.56칸 벗어남 | | Within 1 Acc | 0.926 | (중요) ±1 오차 범위 내 정확도 (92.6%) | --- ## 샘플 예측 | 입력 텍스트 | 예측 난이도 (1-10) | |-------------|-------------------| | "은행에 돈을 맡겨요" | 1 | | "예금자보호법에 따라 5천만원까지 보호됩니다" | 2 | | "신용파생결합증권의 CDS 스프레드 변동에 따른 수익구조" | 7 |