metadata
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
학습 데이터셋
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)
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 |