自适应分类器:基于持续学习的动态文本分类

社区文章 发布于2025年6月20日

摘要

我们推出自适应分类器,这是一种新颖的文本分类系统,能够实现动态类别添加和持续学习,同时避免灾难性遗忘。我们的方法结合了基于原型的记忆系统和神经自适应层,并引入了战略分类——一种在对抗性操作下实现稳健分类的博弈论框架。该系统与HuggingFace生态系统无缝集成,并在幻觉检测、LLM配置优化和智能模型路由等多个应用中展现出强大的实证结果。在对抗性SST-2数据集上,我们的战略分类器在面对受操纵的输入时,比基线方法提高了22.22%,同时在干净数据上保持了性能。

引言

传统的文本分类器存在一个根本性限制:当新类别出现时,它们需要从头开始重新训练,导致先前学习到的知识被灾难性遗忘。这一限制在生产环境中尤为突出,因为新文本类别会不断出现,并且对抗性用户可能试图通过战略性输入修改来操纵分类。

考虑一个客户支持系统,它最初将工单分类为“技术”、“账单”和“一般”类别。随着业务发展,出现了“隐私”、“合规”和“集成”等新类别。传统方法将需要收集所有类别的新训练数据并重新训练整个模型,这可能会导致现有类别的性能下降。此外,如果用户发现他们可以通过修改语言模式来玩弄系统,分类器的可靠性就会降低。

自适应分类器通过四项关键创新解决了这些挑战:

  1. 动态类别添加:无需重新训练现有知识即可无缝添加新类别。
  2. 基于原型的记忆:使用学习到的类别原型进行高效的基于相似度的分类。
  3. 神经自适应:通过轻量级神经网络层持续优化决策边界。
  4. 战略分类:对抗性操作下的博弈论鲁棒性。

技术架构

核心设计原则

自适应分类器基于这样一个原则:有效的分类可以分解为两个互补的组成部分:基于记忆的检索神经边界细化。这种双重方法既能快速适应新样本,又能学习复杂的决策边界。

from adaptive_classifier import AdaptiveClassifier

# Initialize with any transformer model
classifier = AdaptiveClassifier("bert-base-uncased")

# Add examples dynamically
texts = ["Great product!", "Terrible service", "API returning errors"]
labels = ["positive", "negative", "technical"]
classifier.add_examples(texts, labels)

# Immediate classification capability
predictions = classifier.predict("This is amazing!")
# Returns: [('positive', 0.87), ('negative', 0.08), ('technical', 0.05)]

image/png

原型记忆系统

我们方法的核心是一个复杂的记忆系统,它维护着类别原型——学习到的表示,用于捕捉每个类别的基本特征。与传统的k近邻方法不同,我们的系统使用FAISS优化的相似性搜索和动态原型更新。

数学基础:对于每个类别c,我们维护一个原型,该原型计算为类别示例的指数加权移动平均值:

pc(t+1)=αpc(t)+(1α)1ScxScϕ(x)p_c^{(t+1)} = \alpha \cdot p_c^{(t)} + (1-\alpha) \cdot \frac{1}{|S_c|} \sum_{x \in S_c} \phi(x)

其中 φ(x) 表示文本 x 的 Transformer 嵌入,S_c 是类别 c 的新样本集合。

实现细节:记忆系统采用多项优化措施:

  • 选择性样本保留:我们为每个类别保留最多k个代表性样本,通过k均值聚类选择以保持多样性。
  • 增量索引更新:FAISS 索引仅在累积更新超过阈值时重建,平衡了准确性与计算效率。
  • 归一化嵌入:所有嵌入都经过L2归一化,以便进行有意义的余弦相似度比较。
class PrototypeMemory:
    def add_example(self, example: Example, label: str):
        # Add to examples and update prototype
        self.examples[label].append(example)
        self._update_prototype(label)
        
        # Conditional index rebuild for efficiency
        if self.updates_since_rebuild >= self.update_frequency:
            self._rebuild_index()
    
    def get_nearest_prototypes(self, query_embedding: torch.Tensor, k: int = 5):
        # FAISS-optimized similarity search
        distances, indices = self.index.search(query_embedding.numpy(), k)
        similarities = np.exp(-distances[0])  # Convert to similarities
        return [(self.index_to_label[idx], sim) for idx, sim in zip(indices[0], similarities)]

神经自适应层

虽然基于原型的分类提供了出色的少样本学习能力,但复杂的决策边界通常需要更复杂的建模。我们的神经自适应层通过一个轻量级前馈网络来满足这一需求,该网络学习细化分类决策。

架构:自适应层包括:

  • 输入层:Transformer 嵌入(通常为 768 或 1024 维)
  • 隐藏层:使用 ReLU 激活和 dropout 降低维度
  • 输出层:当前类别集上的 Softmax,具有动态调整能力

防止灾难性遗忘:当添加新类别时,我们采用弹性权重整合(EWC)来保留现有类别的知识:

Ltotal=Ltask+λ2iFi(θiθi)2\mathcal{L}_{total} = \mathcal{L}_{task} + \frac{\lambda}{2} \sum_i F_i (\theta_i - \theta_i^*)^2

其中 F_i 代表参数 i 的 Fisher 信息矩阵对角线,θ_i* 是先前任务的最佳参数。

战略分类框架

我们系统的一个关键创新是引入了战略分类——一种在对抗性条件下进行鲁棒分类的博弈论方法。这解决了用户可能试图通过战略性修改输入来操纵分类的现实问题。

威胁模型:我们对战略用户进行建模,他们可以以代价 c(x, x') 将输入 x 修改为 x',以最大化其效用:

maxxf(x)c(x,x)\max_{x'} f(x') - c(x, x')

其中 f(x') 代表分类器对期望类别的置信度。

成本函数:我们实现了几种成本函数族:

  1. 线性成本:

c(x,y)=α,(yx)+c(x,y) = \langle \alpha, (y-x)_+ \rangle

其中 α 代表每个特征的修改成本。

  1. 可分离成本:

c(x,y)=max{0,c2(y)c1(x)}c(x,y) = \max\{0, c_2(y) - c_1(x)\}

实现更复杂的战略行为

双重预测系统:我们的战略分类器以多种模式运行:

  • 常规模式:使用原型和神经网络预测进行标准分类。
  • 战略模式:预测战略代理会将其输入移动到何处。
  • 鲁棒模式:考虑潜在博弈的反操纵预测。
  • 双重模式:融合常规预测和战略预测以实现平衡性能。
# Enable strategic classification
config = {
    'enable_strategic_mode': True,
    'cost_function_type': 'linear',
    'cost_coefficients': {'sentiment_words': 0.5, 'length_change': 0.1},
    'strategic_blend_regular_weight': 0.6,
    'strategic_blend_strategic_weight': 0.4
}

classifier = AdaptiveClassifier("bert-base-uncased", config=config)

# Multiple prediction modes
dual_predictions = classifier.predict(text)           # Blended approach
strategic_predictions = classifier.predict_strategic(text)  # Assumes manipulation
robust_predictions = classifier.predict_robust(text)       # Anti-manipulation

实证评估

战略分类性能

我们评估了战略分类框架在 AI-Secure/adv_glue 数据集的对抗性 SST-2 子集上的性能,该子集包含专门用于测试对战略操纵鲁棒性的情感分类示例。

实验设置:

  • 数据集:148 个对抗性示例,按 70%/30% 比例划分为训练集/测试集
  • 模型:answerdotai/ModernBERT-base,使用线性成本函数
  • 成本策略:平衡方法,50% 的嵌入维度可操纵,成本为 0.3

主要结果:

预测模式 准确率 F1-分数 与基线的性能对比
常规分类器 80.00% 80.00% 基线
战略(双重) 82.22% 82.12% 提高 2.22%
战略(纯粹) 82.22% 82.12% 提高 2.22%
鲁棒模式 80.00% 79.58% 性能一致

对抗攻击下的鲁棒性:更重要的是,我们评估了输入受到战略性操纵时的性能。

场景 常规分类器 战略分类器 优势
干净数据 80.00% 82.22% +2.22%
操纵数据 60.00% 82.22% +22.22%
性能下降 -20.00% 0.00% 鲁棒性提高 20.00%

战略分类器展现出完美的鲁棒性——无论输入是否被操纵,性能都保持不变,同时在干净数据上取得了改进的性能。

应用:幻觉检测

我们为检索增强生成(RAG)系统开发了一种专门的幻觉检测器,解决了LLM生成与所提供上下文不符内容的关键问题。

数据集:RAGTruth 基准测试,涵盖多种任务类型。类别HALLUCINATED(幻觉) vs NOT_HALLUCINATED(非幻觉)

性能结果:

任务类型 精度 召回率 F1 分数 关键洞察
问答 35.50% 45.11% 39.74% 适中精度,良好召回
摘要 22.18% 96.91% 36.09% 擅长捕捉幻觉
数据到文本 65.00% 100.0% 78.79% 在结构化任务上表现强劲
整体 40.89% 80.68% 51.54% 安全关键应用高召回率

高召回率 (80.68%) 使得该系统对安全关键应用尤其有价值,因为在这种应用中,假阴性(漏报幻觉)比假阳性代价更高。

from adaptive_classifier import AdaptiveClassifier

# Load pre-trained hallucination detector
detector = AdaptiveClassifier.from_pretrained("adaptive-classifier/llm-hallucination-detector")

# Evaluate RAG output
context = "France is in Western Europe. Capital: Paris. Population: 67 million."
query = "What is France's capital and population?"
response = "Paris is the capital. Population is 70 million."

input_text = f"Context: {context}\nQuestion: {query}\nAnswer: {response}"
prediction = detector.predict(input_text)

if prediction[0][0] == 'HALLUCINATED' and prediction[0][1] > 0.6:
    print("⚠️  Warning: Response may contain hallucinations")

应用:LLM 配置优化

传统的 LLM 部署需要手动调整温度等超参数以适应不同查询类型。我们的自适应分类器通过学习预测最佳温度范围来自动化此过程。

温度类别:

  • 确定性 (0.0-0.1):需要精确度的事实查询
  • 专注 (0.2-0.5):具有轻微灵活性的技术响应
  • 平衡 (0.6-1.0):自然的对话响应
  • 创意 (1.1-1.5):多样化和富有想象力的输出
  • 实验性 (1.6-2.0):用于头脑风暴的最大可变性

LLM Arena 数据集评估:

  • 成功率:找到最佳配置的成功率为 69.8%
  • 一致性:配置间的平均相似度得分为 0.64
  • 分布:根据查询特性,在不同温度类别之间实现平衡使用

这种自动化消除了手动调整参数的需求,同时确保了不同查询类型的最佳响应质量。

image/png

应用:智能 LLM 路由

自适应分类器通过智能地在高性能(昂贵)和标准性能(经济)模型之间路由查询,从而实现成本效益的 LLM 部署。

路由类别:

  • :需要高级推理、代码生成、多步骤问题的复杂查询
  • :直接查询、事实性问题、基本格式化任务

Arena-Hard 评估结果:

指标 无自适应 有自适应 影响
高模型路由 113 (22.6%) 98 (19.6%) 减少 13%
低模型路由 387 (77.4%) 402 (80.4%) 增加 4%
成本节约 25.60% 32.40% 提高 26.6%
整体成功率 22.00% 22.00% 保持质量

关键洞察:

  • 成本效率:通过更好的资源分配,成本节约提高 26.6%
  • 质量保持:整体成功率没有下降
  • 学习效果:持续自适应将低模型成功率从 16.54% 提高到 20.15%

实现与集成

HuggingFace 生态系统集成

自适应分类器与 HuggingFace 生态系统无缝集成,支持模型共享、版本控制和协作

# Train and save to Hub
classifier = AdaptiveClassifier("bert-base-uncased")
classifier.add_examples(texts, labels)
classifier.push_to_hub("adaptive-classifier/my-custom-classifier")

# Load from Hub
classifier = AdaptiveClassifier.from_pretrained("adaptive-classifier/my-custom-classifier")

# Continue training
classifier.add_examples(new_texts, new_labels)

生产部署考量

内存管理:系统实现了智能内存管理,并可配置限制:

  • 每个类别的最大示例数(默认:1000)
  • 原型更新频率(默认:每 100 个示例)
  • 通过 k-means 聚类选择代表性示例

可伸缩性:基于 FAISS 的相似性搜索可实现大规模类别集的有效操作:

  • 对数搜索复杂度
  • 支持 GPU 加速
  • 分布式部署兼容性

监控和可观测性:

# Get comprehensive statistics
stats = classifier.get_memory_stats()
print(f"Classes: {stats['num_classes']}")
print(f"Total examples: {stats['total_examples']}")
print(f"Memory usage: {stats['memory_usage']}")

# Performance monitoring
evaluation_stats = classifier.get_example_statistics()
print(f"Training steps: {evaluation_stats['train_steps']}")
print(f"Model parameters: {evaluation_stats['model_params']}")

技术创新与贡献

1. 统一记忆-神经架构

我们的核心洞察是,有效的自适应分类需要快速的基于相似度的检索复杂的边界学习。原型记忆系统能够即时分类新样本,而神经自适应层则随着时间的推移学习复杂的决策边界。

这种双重方法通过利用两种范式的优点,优于纯粹基于记忆的系统(表达能力有限)和纯粹基于神经网络的方法(灾难性遗忘)。

2. 战略分类框架

我们引入了第一个全面的战略感知文本分类框架,弥补了鲁棒性研究中的关键空白。我们的方法:

  • 建模战略行为:使用博弈论成本函数预测对抗性修改
  • 提供多种防御模式:常规、战略、鲁棒和双重预测模式
  • 实现双重效益:提高干净数据和被操纵数据上的性能

3. 文本分类的弹性权重整合

虽然 EWC 已应用于计算机视觉,但我们将其应用于具有动态类别集的文本分类,这代表了一项新颖的贡献。我们展示了在递增添加类别时有效缓解灾难性遗忘的能力。

4. 生产就绪的持续学习

与研究原型不同,我们的系统是为生产部署而设计的,具备以下特点:

  • 高效的内存管理和索引
  • 可配置随机性的确定性行为
  • 全面的监控和可观测性
  • 无缝的 HuggingFace 集成

相关工作与定位

持续学习:我们的工作基于持续学习研究,但特别关注具有实际部署限制的文本分类设置。与需要任务边界的方法不同,我们的系统能够无缝添加类别。

少样本学习:虽然存在少样本学习方法,但它们通常需要预定义的类别集。我们的方法可以真正实现零样本添加以前未见过的类别。

对抗鲁棒性:战略分类超越了传统的对抗鲁棒性,通过对经济动机的攻击者而非最坏情况的扰动进行建模。

原型网络:我们通过复杂的记忆管理、神经细化和战略考量扩展了原型网络。

局限性与未来工作

当前局限性:

  1. 计算开销:战略预测模式需要额外的计算
  2. 内存增长:内存使用量随类别和示例数量呈线性增长
  3. 领域漂移:在重大领域变化时性能可能会下降

未来研究方向:

  1. 层次化类别组织:学习类别之间的层次关系
  2. 多模态扩展:扩展到视觉-语言和其他模态
  3. 联邦学习:跨多个客户端的分布式自适应
  4. 高级战略模型:更复杂的博弈论框架

结论

自适应分类器代表了实用文本分类的重大进步,解决了动态类别添加、持续学习和对抗鲁棒性等实际挑战。我们的全面评估证明了在多个应用中取得了显著改进:

  • 对抗性操纵下的鲁棒性提高 22.22%
  • LLM 路由应用中成本优化 26.6%
  • 安全关键幻觉检测中召回率达 80.68%
  • 自动化 LLM 配置中成功率达 69.8%

该系统与 HuggingFace 生态系统的无缝集成,以及生产就绪的设计考虑,使其可立即应用于实际部署。我们希望这项工作能激励对自适应、鲁棒和实用机器学习系统的进一步研究。

代码可用性

完整的实现是开源的,可在以下链接获取:

引用

@software{adaptive_classifier_2025,
  title = {Adaptive Classifier: Dynamic Text Classification with Continuous Learning},
  author = {Sharma, Asankhaya},
  year = {2025},
  publisher = {GitHub},
  url = {https://github.com/codelion/adaptive-classifier},
  note = {Open source implementation with HuggingFace integration}
}

致谢

我们感谢 HuggingFace 团队卓越的 Transformer 生态系统,AI-Secure/adv_glue 和 RAGTruth 数据集的创建者,以及开源社区提供的宝贵反馈和贡献。

社区

注册登录以发表评论