1446 字
约 4 分钟
1
双模型意图识别真实训练记录(2026-07-22)

双模型意图识别真实训练记录(2026-07-22)

本文记录 ScholarAgent 意图识别模块的一次真实训练与评测。实验同时训练了 CPU 友好的 BGE/BERT 分类器和 GPU 上的 Qwen3-0.6B LoRA 路由器。本文只陈述本次已运行、可由产物复核的结果,不把单次实验外推为生产结论。1. 实验目标统一识别以下四类请求:Fr...

字数: 1261 | 语雀原文


本文记录 ScholarAgent 意图识别模块的一次真实训练与评测。实验同时训练了 CPU 友好的 BGE/BERT 分类器和 GPU 上的 Qwen3-0.6B LoRA 路由器。本文只陈述本次已运行、可由产物复核的结果,不把单次实验外推为生产结论。

1. 实验目标

统一识别以下四类请求:

  • Framework_Evaluation:评测框架、指标或 benchmark 设计
  • Paper_Reproduction:论文环境搭建、复现、结果对齐
  • Code_Execution:运行代码、计算指标、绘图或调试
  • General:不属于以上三类的一般科研请求 对比两条技术路线:
路线 输出形式 预期部署位置 主要价值
BGE/BERT 分类器 四分类概率 CPU、本地快速路由 延迟低、输出空间受控
Qwen3-0.6B + LoRA 严格 JSON GPU、复杂请求路由 可同时生成意图、实体和约束

2. 运行环境

  • 远端 GPU:Tesla V100-SXM2-32GB
  • Python:3.10.11
  • PyTorch:2.6.0+cu124
  • Transformers:5.7.0
  • PEFT:0.18.1
  • 随机种子:42 训练程序位于 ai-services/intent_recognition/training/。完整模型权重和逐样本预测保存在本地忽略目录 tmp-realtest-logs/intent-dual-20260722/,不会提交到 Git;仓库中提交训练代码、数据集和清单。

3. 数据与隔离检查

训练集和开发集由固定模板与槽位组合生成,测试集来自仓库已有意图 benchmark。四类样本保持平衡。

数据划分 样本数 每类样本数
train 640 160
dev 160 40
frozen test 80 20

归一化文本交集检查结果:train/dev=0train/test=0dev/test=0。数据清单见 ai-services/intent_recognition/data/dual_router_v1/manifest.json

文件 SHA-256
train.jsonl fa5ef847da56c7faca06341a95a7d5baa346bed5cf16c782805b373ae6e6f24b
dev.jsonl f43cae7b0417edf187ef6294d5ebe020213da38a722a307b86a5b576900193c6
test.jsonl 92e3bb8e333b62bd207358cb4e1287dc33ffa9231a9e6a4faa33c5cab176ae18
原始冻结测试集 ea4a8352780e1884257f8c686710d2e014946635bf041372256112d07f61ee62

4. BGE/BERT 分类器

配置

  • 基座:BAAI/bge-small-zh-v1.5
  • 参数量:23,955,972,全部参与微调
  • epoch:8
  • batch size:32
  • learning rate:2e-5
  • max length:128
  • weight decay:0.01
  • warmup ratio:0.1 复现命令:
cd scholar-agent/ai-services/intent_recognition
python3 training/train_bert.py \
  --data-dir data/dual_router_v1 \
  --model BAAI/bge-small-zh-v1.5 \
  --output-dir runs/bert_bge_seed42 \
  --epochs 8 \
  --batch-size 32 \
  --seed 42

结果

指标 结果
训练耗时(V100) 6.82 s
最佳 dev Macro-F1 0.9559
frozen test Accuracy 0.9625
frozen test Macro-F1 0.9625
CPU 单样本平均延迟 9.55 ms
CPU P95 延迟 10.10 ms

测试集共有 3 个错误:两条论文复现请求被判为 General,一条 RAG 综述请求被判为 Framework_Evaluation。这说明词面相近的“分析、比较、综述”仍可能混淆任务目标。

模型权重 SHA-256:79bcc2f78eb5b41de6355b9b898b6e3cfa79ce7dad4a7be89b3598767c752c8b

5. Qwen3-0.6B LoRA 路由器

配置

  • 基座:Qwen/Qwen3-0.6B
  • 总参数量(含 adapter):606,142,464
  • 可训练参数:10,092,544(约 1.67%)
  • LoRA:rank 16,alpha 32,dropout 0.05
  • 目标层:q/k/v/o_projgate/up/down_proj
  • epoch:3
  • micro batch:4
  • gradient accumulation:8
  • learning rate:1e-4
  • max length:256
  • FP16,随机种子 42 复现命令:
cd scholar-agent/ai-services/intent_recognition
python3 training/train_qwen_lora.py \
  --data-dir data/dual_router_v1 \
  --model Qwen/Qwen3-0.6B \
  --output-dir runs/qwen3_06b_lora_seed42 \
  --epochs 3 \
  --batch-size 4 \
  --eval-batch-size 8 \
  --gradient-accumulation 8 \
  --lora-rank 16 \
  --lora-alpha 32 \
  --seed 42

训练过程

Epoch Train loss Dev Accuracy Dev Macro-F1 Schema valid rate
1 1.0248 0.8313 0.8358 0.9938
2 0.0472 0.9438 0.9436 1.0000
3 0.0174 0.9563 0.9561 1.0000

测试结果

指标 结果
训练耗时(V100) 306.25 s
frozen test Accuracy 0.9875
frozen test Macro-F1 0.9936
JSON parse rate 1.0000
Schema valid rate 0.9875
V100 单样本平均延迟 301.56 ms
V100 P95 延迟 466.46 ms

唯一失败样例是“帮我计算 confusion matrix 并把热力图画出来”。模型生成了语法正确的 JSON,但把意图写成未定义的 Plotting,因此 JSON 可解析、业务 schema 不合法,并按错误计入召回率。这也是为什么不能只报告 JSON parse rate。

最佳 LoRA adapter SHA-256:afd8386a268dedb688431235e27b60251629efa7beb726d2e7d540032f68cde3

6. 评测代码修复

实验中发现原 classification_metrics 只在混淆矩阵中统计已知预测标签。Qwen 生成未知标签时,样本虽然影响 Accuracy,却没有进入对应类别的 FN,导致 Macro-F1 被虚高为 1.0。

本次修复在 training/common.py 中记录 unknown_by_expected,将未知预测计入真实类别的 FN 和 support;同时新增 training/test_common.py 回归测试。修复后 Qwen 测试 Macro-F1 为 0.9936,而不是错误的 1.0。

7. 结论与限制

本次小规模实验中,BGE/BERT 的 CPU 平均延迟约为 Qwen GPU 生成延迟的 1/32,适合默认路由;Qwen 能输出实体和约束,适合复杂请求或低置信度回退。两者不是简单替代关系,更合理的产品形态是“BERT 快速分类 + Qwen 复杂解析/仲裁”。

当前限制也必须保留:仅运行一个随机种子;train/dev 是程序生成数据,不是人工标注生产流量;测试集只有 80 条且类别均衡;尚未评测实体与约束抽取的精确率;本次结果不能证明 OOD 泛化或生产稳定性。

8. 本地验证

cd scholar-agent/ai-services/intent_recognition
PYTHONPATH=training python3 -m unittest -v training.test_common
python3 -m py_compile training/common.py training/build_dataset.py \
  training/train_bert.py training/train_qwen_lora.py
双模型意图识别真实训练记录(2026-07-22)
http://www.clxhxhhr.top/posts/744/
作者
clxstart
发布于
2026-09-18
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。