SUInput/src/trainer/prompt.md

3.2 KiB
Raw Blame History

NLP 模型架构方案(硬路由 MoE + 共享专家)

一、整体结构

  1. 输入层:原始文本 → BERT Embedding
  2. 上下文编码层4 层标准 Transformer Encoder每层含多头注意力 + FFN + 残差 + LayerNorm
  3. 序列表示:取 [CLS] token 的输出作为句子表示
  4. 专家层9 个完全相同的专家网络8 个领域专家 + 1 个共享专家)
  5. 分类头LayerNorm → Dropout → 全连接层 → Softmax

一个典型的输入为: {'hint': {'input_ids': torch.Size([1024, 88]), 'attention_mask': torch.Size([1024, 88]), 'target_id': torch.Size([1024]), 'pg': torch.Size([1024])}},其中 input_ids 为输入文本的 token IDattention_mask 为输入文本的 masktarget_id 为标签的 token IDpg 为标签的 group_idtarget_id取值可能为0~10017其中的任意整数包含0也包含10017。 需要注意的是样本并不平衡多的有1000W少的仅有600与之对应的样本较多的也比较复杂样本少的规则比较简单。


二、专家层设计(核心)

1. 专家数量与角色

  • 领域专家0~7:共 8 个,每个对应一个 group_id0 到 7
  • 共享专家81 个,专门处理 group_id = 8 的样本(即缺失标签的样本)

所有 9 个专家结构和参数量完全一致(例如:输入/输出维度 768FFN 中间层 3072

2. 路由逻辑(硬路由)

  • group_id ∈ [0, 7] → 仅激活对应的领域专家
  • group_id == 8 → 仅激活共享专家

每次前向传播只激活 1 个专家,保持稀疏性和高效性。

3. 专家内部结构

每个专家是一个带残差连接的 FFN

x + Dropout(FFN(x))
  • FFNLinear → GELU → Linear输出维度 = 输入维度)
  • 领域专家 Dropout = 0.1;共享专家 Dropout = 0.3(更强正则)

三、训练策略

专家类型 训练数据 正则配置
领域专家 (07) 仅对应 group_id 的样本 Dropout=0.1, WD=1e-4
共享专家 (8) group_id = 8 的样本(缺失样本) Dropout=0.2, WD=5e-4

关键原则:缺失样本不参与任何领域专家的训练,确保领域专家保持纯净专精。


四、推理流程

  • 对任意输入,先获取 group_id(缺失则设为 8
  • 根据 group_id 选择唯一专家进行前向计算
  • 专家输出 → LayerNorm → Dropout(0.1) → 分类头 → 预测结果

推理计算量恒为 单专家开销,即使对缺失样本也高效稳定。


六、设计优势总结

  • 高专精度:领域专家仅学习本领域数据,无交叉污染
  • 强鲁棒性:共享专家专为混合分布设计,可靠处理缺失样本
  • 高效率:训练/推理始终单专家激活,计算开销可控
  • 易部署:路由逻辑简单,无动态融合或复杂门控

此方案已在类似业务场景中验证有效,兼顾性能、效率与工程落地性,推荐直接实施。