maninglearchine/kobert-article-classifier는 한국어 경제·금융 기사를 만 13세 이하 어린이의 학습 목적에 적합한지 자동으로 판별하는 이진 분류 모델입니다.
klue/bert-base를 GPT-4o-mini로 라벨링한 한국어 경제·금융 데이터 5,000건으로 파인튜닝했습니다.
라벨 체계
라벨
ID
설명
예시 키워드
적절
1
어린이 학습에 적합한 기사
저축, 용돈, 물가, 세금, 무역, 협동조합
부적절
0
어린이에게 부적합한 기사
ELS, 레버리지, 공매도, DSR, 파생상품, 강제청산
적절 기준
기초 경제 개념 (저축, 물가, 수요·공급, 세금의 역할 등)
기업 성장 스토리, 창업 이야기
환경경제, 공정무역, 사회적기업
일상 속 경제 원리를 쉽게 설명한 콘텐츠
부적절 기준
파생상품 (ELS, DLS, CFD, 선물·옵션)
레버리지·공매도·마진콜 등 투기성 거래
복잡한 금융 규제 (바젤Ⅲ, IFRS17, DSR 등)
기업 구조조정·부도·법정관리
사용 방법
빠른 시작 (pipeline)
python
1from transformers import pipeline
23clf = pipeline(4"text-classification",5 model="maninglearchine/kobert-article-classifier",6)78samples =[9"용돈으로 배우는 저축의 첫걸음…어린이 경제교실 현장",10"ELS 녹인 구간 진입…레버리지 투자자 강제청산 속출",11]1213for text in samples:14 result = clf(text)15print(f"{result[0]['label']} ({result[0]['score']:.3f}) | {text[:30]}")1617# 출력 예시:18# 적절 (0.999) | 용돈으로 배우는 저축의 첫걸음…어린이19# 부적절 (0.998) | ELS 녹인 구간 진입…레버리지 투자자
상세 제어 (AutoModel)
python
1import torch
2from transformers import AutoTokenizer, AutoModelForSequenceClassification
34model_id ="maninglearchine/kobert-article-classifier"5tokenizer = AutoTokenizer.from_pretrained(model_id)6model = AutoModelForSequenceClassification.from_pretrained(model_id)7model.eval()89defclassify(text:str, max_length:int=64)->dict:10 inputs = tokenizer(11 text,12 return_tensors="pt",13 truncation=True,14 padding="max_length",15 max_length=max_length,16)17with torch.no_grad():18 logits = model(**inputs).logits
19 probs = torch.softmax(logits, dim=-1)[0]20 label = model.config.id2label[logits.argmax(-1).item()]21return{22"label": label,23"score": probs.max().item(),24"부적절_prob": probs[0].item(),25"적절_prob": probs[1].item(),26}2728texts =[29"세금은 왜 내야 할까?…학교·도로·소방서가 만들어지는 비밀",30"공매도 잔고 급증…타깃 종목 변동성 심화로 반대매매 위험 고조",31"수요와 공급이란 무엇인가?…시장 가격이 결정되는 원리",32"바젤Ⅲ 자본규제 강화…은행권 수조원 추가 적립 부담",33]3435for text in texts:36 r = classify(text)37print(f"[{r['label']}] 확률={r['score']:.3f} | {text[:35]}")
배치 처리 (Excel 파일)
python
1from transformers import pipeline
2import pandas as pd
34clf = pipeline(5"text-classification",6 model="maninglearchine/kobert-article-classifier",7 batch_size=32,8 device=-1,# CPU 사용. GPU: device=09)1011df = pd.read_excel("articles.xlsx")12results = clf(df["기사본문"].tolist())1314df["label"]=[r["label"]for r in results]15df["confidence"]=[r["score"]for r in results]16df.to_excel("classified_articles.xlsx", index=False)
학습 정보
데이터셋
항목
내용
원본 데이터
한국어 경제·금융 기사 합성 데이터 5,000건
라벨링 방법
GPT-4o-mini 자동 라벨링
클래스 분포
적절(1): 2,500건 / 부적절(0): 2,500건 (50:50 균형)
학습 샘플
균형 샘플링 2,000건 (클래스당 1,000건)
데이터 분할
Train 1,600 / Val 200 / Test 200 (8:1:1, stratified)
학습 설정
Base Model : klue/bert-base
Max Length : 64 tokens
Batch Size : 32
Epochs : 3
LR : 3e-5
Warmup : 10% (warmup_ratio=0.1)
Weight Decay : 0.01
Optimizer : AdamW
Eval Strategy: epoch (best model by F1 Macro)
Device : CPU
학습 시간 : 약 26.6분 (1,598초)
Epoch별 학습 로그
Epoch
Train Loss
Val Loss
Val Accuracy
Val F1 Macro
1
0.1241
0.000409
1.0000
1.0000
2
0.0089
0.000233
1.0000
1.0000
3
0.0004
0.000206
1.0000
1.0000
성능 평가
Test 셋 결과 (200건)
지표
값
Accuracy
1.0000 (100%)
F1 Macro
1.0000
Precision (Macro)
1.0000
Recall (Macro)
1.0000
F1 (부적절)
1.0000
F1 (적절)
1.0000
Confusion Matrix
예측: 부적절 예측: 적절
실제: 부적절 100 0
실제: 적절 0 100
TF-IDF 모델과 비교
모델
F1 Macro
학습 시간
문맥 이해
추가 학습
LR + Word TF-IDF
1.0000
0.3초
X
어려움
LinearSVC + Word
1.0000
0.2초
X
어려움
RandomForest
1.0000
1.1초
X
어려움
KoBERT (본 모델)
1.0000
1,598초
O
파인튜닝 가능
합성 데이터의 어휘 분리가 명확해 모든 모델이 100%를 달성했으나, 실제 뉴스 기사(복합 주제, 문맥 의존 표현)에서는 KoBERT가 훨씬 유리합니다.
한계점 및 주의사항
합성 데이터 학습: 실제 뉴스 기사가 아닌 템플릿 기반 합성 데이터로 학습됐습니다. 실서비스 적용 전 실제 기사 데이터로 추가 파인튜닝을 권장합니다.
최대 길이 64 토큰: 짧은 텍스트에 최적화되어 있습니다. 긴 기사는 제목 + 첫 단락만 입력하세요.
이진 분류만 지원: 적절/부적절 두 클래스만 지원하며, 연령별 세분화 분류는 지원하지 않습니다.