codelion/adaptive-classifier
A flexible, adaptive classification system for dynamic text classification
Adaptive Classifier – 동적이고 지속적으로 학습하는 텍스트 분류
개요 – PyTorch와 Hugging Face Transformers를 기반으로 구축된 Python 라이브러리로, 다음 기능을 갖춘 텍스트 분류기를 학습시킬 수 있습니다:
- 지속적 학습 – 파멸적 망각 없이 즉석에서 새로운 예제를 추가합니다.
- 런타임 시 클래스 추가 – 전체 모델을 재학습할 필요 없이 새로운 레이블을 도입합니다.
- 온라인 유지 – 다운타임 없이 프로덕션 환경에서 모델을 업데이트합니다.
- 적대적 입력 방어 – 게임 이론 기반의 '전략적' 모드를 통해 사용자가 시스템을 조작하려 할 때도 예측의 견고성을 유지합니다.
- CPU에서 빠른 실행 – 자동 ONNX-Runtime 내보내기를 통해 일반 PyTorch 대비 2~4배의 속도 향상을 제공합니다.
핵심 구성 요소
| 구성 요소 | 역할 |
|---|---|
| 프로토타입 메모리 | FAISS 기반 문장 임베딩 유사도 검색; 비모수적 '최근접 프로토타입' 신호를 제공합니다. |
| 적응형 신경망 헤드 | EWC(Elastic-Weight-Consolidation)로 보호되는 학습 가능한 분류 계층으로, 새 데이터 유입 시 망각을 방지합니다. |
| 하이브리드 예측 | 최종 점수는 프로토타입 유사도와 신경망 헤드 출력의 가중치 혼합입니다(prototype_weight / neural_weight로 설정 가능). |
| 전략적 분류 | 비용 인식 적대적 모델을 추가하는 선택적 모드; 일반, 전략적 또는 견고한 예측을 요청할 수 있습니다. |
| 다중 레이블 지원 | MultiLabelAdaptiveClassifier는 Sigmoid 기반 다중 레이블 헤드, 자동 임계값 적응 및 레이블별 임계값을 추가합니다. |
| ONNX 내보내기 | 양자화(INT8) 및 전체 정밀도 ONNX로의 변환 내장; 라이브러리가 CPU에서 가장 빠른 버전을 자동으로 선택합니다. |
퀵 스타트 (30초)
from adaptive_classifier import AdaptiveClassifier
# 1️⃣ HuggingFace 모델로 초기화
clf = AdaptiveClassifier("bert-base-uncased")
# 2️⃣ 레이블이 지정된 예제 추가
texts = ["The product works great!", "Terrible experience", "Neutral about this purchase"]
labels = ["positive", "negative", "neutral"]
clf.add_examples(texts, labels)
# 3️⃣ 예측
print(clf.predict("This is amazing!"))
# → [('positive', 0.85), ('neutral', 0.12), ('negative', 0.03)]
다중 레이블 작업의 경우 AdaptiveClassifier를 MultiLabelAdaptiveClassifier로 교체하고 predict_multilabel을 호출하십시오.
설치
pip install adaptive-classifier # ONNX Runtime 자동 가져오기
개발용 설치:
git clone https://github.com/codelion/adaptive-classifier.git
cd adaptive-classifier
pip install -e .
주요 벤치마크 (README 보고)
| 시나리오 | 지표 | 일반 모델 | Adaptive (전략적) | Δ |
|---|---|---|---|---|
| 적대적 견고성 (AI‑Secure/adv_glue) | 클린 데이터 정확도 | 80.00 % | 82.22 % | +2.22 % |
| 적대적 데이터 정확도 | 60.00 % | 82.22 % | +22.22 % | |
| 견고성 저하 | –20 % | 0 % | perfect | |
| 환각 탐지 (RAGTruth) | 전체 F1 | – | 51.54 % | – |
| LLM 라우팅 비용 절감 (arena‑hard‑auto‑v0.1) | 비용 절감 | 25.60 % | 32.40 % | +6.80 % |
| 효율성 비율 | 1.00× | 1.27× | +27 % |
지속적 학습 작동 원리
- 새로운 예제는 프로토타입 메모리에 저장되며, 선택적으로 신경망 헤드를 미세 조정하는 데 사용됩니다.
new_class_example_threshold(기본값 10)는 새 레이블이 자체 프로토타입 가중치를 갖는 시점을 제어합니다. 그 전까지는 헤드가 예측을 주도합니다.- EWC(Elastic-Weight-Consolidation)는 헤드를 정규화하여 모델이 새 데이터에 적응하는 동안 이전 클래스의 성능을 유지하도록 합니다.
전략적 (안티 게이밍) 모드
clf = AdaptiveClassifier(
"bert-base-uncased",
config={
"enable_strategic_mode": True,
"cost_function_type": "linear",
"cost_coefficients": {
"sentiment_words": 0.5,
"length_change": 0.1,
"word_substitution": 0.3,
},
"strategic_blend_regular_weight": 0.6,
"strategic_blend_strategic_weight": 0.4,
},
)
predict→ 일반 점수와 전략적 점수의 혼합.predict_strategic→ 순수 전략적 관점 (공격자 시뮬레이션).predict_robust→ 입력이 이미 조작되었을 가능성을 가정하고 강화된 예측을 반환.
모델 영속성 및 Hub 통합
clf.save("./my_model") # PyTorch + ONNX (양자화 및 전체) 저장
AdaptiveClassifier.load("./my_model") # CPU에서 양자화된 ONNX 자동 로드
clf.push_to_hub("adaptive-classifier/my-model")
clf2 = AdaptiveClassifier.from_pretrained("adaptive-classifier/my-model")
사용 사례
- 고객 지원 티켓 라우팅 – 다운타임 없이 새로운 문제 카테고리를 계속 추가.
- 동적 제품 카테고리 태깅 – 새로운 제품 라인이 나타나면 즉시 모델을 학습.
- 엔터프라이즈 LLM 파이프라인 – 내장 라우터나 환각 탐지기를 사용하여 비용을 절감하고 신뢰성을 향상.
- 진화하는 동안 온라인 상태를 유지해야 하는 모든 프로덕션 텍스트 분류 서비스.
커뮤니티 및 라이선스
- Apache 2.0 라이선스 – 상업적 사용 무료.
- PyPI 다운로드 수는 활발한 채택을 나타내며, 저장소에는 지원을 위한 토론 포럼이 있습니다.
- 사전 학습된 모델과 데모 노트북은 전용 HuggingFace 조직에서 호스팅됩니다.
결론 – Adaptive Classifier는 프로토타입 기반 유사도, 지속적 학습 헤드, 선택적 게임 이론 방어를 결합한 즉시 사용 가능한 PyTorch 기반 라이브러리이며, 프로덕션급 제로 다운타임 텍스트 분류를 위한 ONNX 가속 기능을 기본 제공합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트