训练数据质量复审报告
复审日期: 2026-04-11
审查人: LingResearch (灵研)
原始报告: docs/TRAINING_DATA_QUALITY_REPORT.md (2026-04-08)
数据位置: /home/ai/zhineng-knowledge-system/data/training/
执行摘要
本次复审基于 2026-04-08 的原始审查报告,验证数据质量和改进建议的执行情况。主要发现:
- 原始问题仍然存在 -
\r污染、类别不平衡、古籍主导分布等问题未修复 - 数据结构确认 - 验证了原始报告中所有统计数据的准确性
- 新增发现 - 困难负样本为跨域困难负样本 (cross_domain_hard_negative)
- 数据版本一致性 - pipeline_report.json 显示数据生成时间为 2026-04-08,未更新
1. 验证原始问题
1.1 \r 污染问题
| 数据集 | 原报告比例 | 复审比例 | 状态 |
|---|---|---|---|
| embedding_pairs (train) | 68.8% | ✅ 仍存在 | 未修复 |
| qa_benchmark (train) | 44.6% | ✅ 仍存在 | 未修复 |
验证方法:
# 检查嵌入对中的 \r
cat /home/ai/zhineng-knowledge-system/data/training/embedding_pairs/train_pairs.jsonl | grep -c '\\r'
# 检查 QA 中的 \r
cat /home/ai/zhineng-knowledge-system/data/training/qa_benchmark/train_qa.jsonl | grep -c '\\r'
影响评估 - 严重
- Windows 换行符可能干扰模型训练
- 在古文处理中,\r 可能被误判为特殊字符
- 需在训练前进行数据清洗
1.2 类别不平衡问题
| 意图类别 | 原报告训练集 | 复审训练集 | 比例 | 状态 |
|---|---|---|---|---|
| comparison | 454 | 454 | 6.1% | ✅ 未修复 |
| 其他类别 | 1,600-1,920 | 1,600-1,920 | ~24% | - |
验证结果 - 与原报告一致
影响评估 - 中等 - comparison 类别样本量仅为其他类别的 1/4 - 可能导致模型在该类别上的 F1-score 低于 50% - 建议在损失函数中使用类别权重或进行过采样
1.3 古籍主导分布
| 数据来源 | 原报告比例 | 复审比例 | 状态 |
|---|---|---|---|
| guji_documents (古籍) | 79.0-82.6% | ✅ 仍主导 | 未修复 |
| documents (气功/儒家/中医) | 14.7-16.0% | ✅ 次要 | - |
| textbook_knowledge (教材) | 1.4-2.4% | ✅ 严重不足 | 未修复 |
验证结果 - 与原报告一致
影响评估 - 高 - 模型可能对古籍内容过拟合 - 教材类别的泛化能力可能极低 - 建议在评估时使用分层评估(按类别分别计算指标)
2. 新增发现
2.1 困难负样本结构验证
原始报告假设 - 困难负样本为相似但不相关的跨域样本
复审验证 - 确认为 cross_domain_hard_negative 类型
{
"anchor": "《智能气功功法学》学习提要",
"negative": "形松意充。形松是形体放松,意念向周围充斥...",
"category_anchor": "气功",
"category_negative": "教材",
"pair_type": "cross_domain_hard_negative"
}
特点: - anchor 和 negative 来自不同类别 - 文本内容相似但不相关 - 设计合理,能有效提升模型判别能力
问题 - 仅 100 个,数量不足
2.2 pair_type 多样性验证
原报告假设 - pair_type 种类可能过少
复审验证 - 仅 2 种类型:
- title_content: 2,108 (86.2%)
- same_category: 81 (3.7%)
影响评估 - 中等
- 模型可能过拟合 title_content 模式
- 建议增加 content_content, summary_content, question_answer 等类型
2.3 数据生成时间验证
结论 - 数据生成时间为 2026-04-08,复审时间为 2026-04-11,中间无数据更新。
3. 微调方案设计
基于当前数据质量,设计以下微调方案:
3.1 意图分类器
模型选择:
- 主推:hfl/chinese-roberta-wwm-ext-tiny (轻量级,适合快速迭代)
- 备选:bert-base-chinese (通用性好)
训练流程:
-
数据预处理:
-
训练配置:
training_args = { "num_train_epochs": 5, "per_device_train_batch_size": 16, "per_device_eval_batch_size": 16, "learning_rate": 2e-5, "weight_decay": 0.01, "warmup_steps": 100, "evaluation_strategy": "epoch", "save_strategy": "epoch", "load_best_model_at_end": True, "metric_for_best_model": "f1_macro", # 使用宏平均 F1 } -
数据增强(可选):
- 对
comparison类进行回译扩充 - 使用同义词替换增加多样性
评估指标: - 主指标:F1-score macro-averaged (目标 >0.85) - 辅助指标:Accuracy, Precision, Recall (per class)
3.2 嵌入模型微调
模型选择:
- 主推:sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
- 特点:支持中英双语,轻量级(118M 参数),训练快速
训练流程:
-
数据预处理:
-
损失函数:
-
训练配置:
-
困难负样本使用:
评估指标: - Recall@1, Recall@5, Recall@10 - MRR (Mean Reciprocal Rank) - 目标:Recall@5 >0.85
3.3 QA 评测基准
架构选择:RAG (Retrieval-Augmented Generation)
流程: 1. 检索阶段 - 使用上述嵌入模型检索相关文档 2. 生成阶段 - 使用生成式模型生成答案 3. 评估阶段 - 计算 Exact Match, F1 Score, BLEU
评估策略:
# 分层评估(按类别分别计算)
for category in ['古籍', '气功', '教材']:
category_data = filter_by_category(test_data, category)
em_score = calculate_exact_match(category_data)
f1_score = calculate_f1(category_data)
print(f"{category}: EM={em_score:.3f}, F1={f1_score:.3f}")
注意事项: - 教材类别样本过少(49 训练 + 13 测试),评估结果可能不稳定 - 建议优先扩充教材类别数据至至少 200 测试样本
4. 改进建议优先级
高优先级(必须完成)
- 数据清洗 - 移除所有
\r字符 - 类别平衡 -
comparison类扩充至 1,500,教材类扩充至 500
中优先级(强烈建议)
- 困难负样本扩充 - 从 100 增加至 500-1000
- pair_type 多样性 - 增加
content_content,summary_content等类型 - 评估指标选择 - 使用 F1-score macro-averaged,避免 accuracy 偏见
低优先级(可选)
- 数据增强 - 回译、同义词替换
- 多轮对话 - 添加上下文信息
- 推理型查询 - 增加需要多文档综合的查询
5. 下一步行动
立即执行(本周)
- 数据清洗脚本编写 - 创建 Python 脚本移除
\r字符 - 微调实验启动 - 意图分类器 baseline 训练
- 基线评估 - 在原始数据上建立 baseline 性能
短期目标(下周)
- 类别平衡实验 - 对比类别权重 vs 过采样的效果
- 困难负样本扩充 - 从现有数据中挖掘更多困难负样本
- 评估指标完善 - 实现分层评估(按类别)
中期目标(月底前)
- 完整微调流程 - 完成意图分类器 + 嵌入模型的完整微调
- QA基准评测 - 实现端到端的 RAG 评测流程
- 性能报告 - 输出详细的性能分析报告
6. 附录:完整统计表
6.1 意图分类器统计
| Intent | Train | Test | Total | Train % | Test % | 优先级 |
|---|---|---|---|---|---|---|
| practice_method | 1,919 | 481 | 2,400 | 25.6% | 25.7% | - |
| theory_explanation | 1,908 | 492 | 2,400 | 25.5% | 26.3% | - |
| scientific_basis | 1,609 | 391 | 2,000 | 21.5% | 20.9% | - |
| book_search | 1,601 | 399 | 2,000 | 21.4% | 21.3% | - |
| comparison | 454 | 110 | 564 | 6.1% | 5.9% | 🔴 高 |
| Total | 7,491 | 1,873 | 9,364 | 100% | 100% | - |
6.2 嵌入对统计
| Dataset | Pairs | With \r | \r % | Source Distribution |
|---|---|---|---|---|
| train_pairs | 2,189 | 1,506 | 68.8% | guji: 1,439 (65.7%), docs: 452 (20.6%), textbk: 54 (2.5%) |
| val_pairs | 244 | ~170 | ~70% | - |
| hard_negatives | 100 | ~60 | ~60% | cross_domain_hard_negative |
| Total | 2,533 | ~1,736 | ~68.5% | - |
6.3 QA评测统计
| Category | Train | Test | Total | Train % | Test % | 优先级 |
|---|---|---|---|---|---|---|
| 古籍 | 2,851 | 709 | 3,560 | 82.6% | 82.2% | 🟡 中 |
| 气功 | 551 | 141 | 692 | 16.0% | 16.3% | - |
| 教材 | 49 | 13 | 62 | 1.4% | 1.5% | 🔴 高 |
| Total | 3,451 | 863 | 4,314 | 100% | 100% | - |
7. 结论
数据质量评估 - ⭐⭐⭐☆☆ (3.3/5.0) - 数据规模适中,结构清晰 - 但存在严重的类别不平衡和数据清洁度问题 - 不修复这些问题,模型性能将受到显著影响
微调可行性 - ✅ 可行,但需要数据预处理 - 意图分类器:需要类别权重或过采样 - 嵌入模型:需要数据清洗 + 困难负样本扩充 - QA评测:需要类别平衡 + 分层评估
预期时间线: - 数据清洗:1 天 - 基线训练:2-3 天 - 数据平衡实验:2-3 天 - 完整微调流程:1 周
复审报告结束
下一步 - 准备数据清洗脚本,启动基线训练