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) で保護された学習可能な分類層。新しいデータ到着時の忘却を防止。 |
| ハイブリッド予測 | 最終スコアはプロトタイプ類似度とニューラルヘッド出力の加重ブレンド(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) がヘッドを正規化し、モデルが新しいデータに適応する間も以前のクラスのパフォーマンスを維持します。
戦略的 (アンチゲーミング) モード
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アクセラレーションを標準で備えています。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト