1. 项目背景与课程定位
北航计算机学院的机器学习课程历来以理论扎实、实践性强著称。2025年秋季学期这门课在延续传统优势的基础上,首次引入了大模型微调、多模态学习等前沿内容。作为期末考核项目,我们需要在6周内完成从选题到模型部署的全流程,这对工程能力和理论功底都是不小的挑战。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 项目选题与需求分析
2.1 选题方向确定
今年开放了三个赛道供选择:
- 传统CV任务优化(如目标检测模型轻量化)
- NLP应用开发(如基于BERT的智能问答系统)
- 跨模态创新项目(如图文生成与检索)
我们组最终选择了第二个方向,计划开发一个面向航空航天领域的专业问答系统。这个选择主要基于:
- 组员在NLP方向有前期积累
- 航空航天领域的专业问答存在实际需求
- 可以复用课程提供的计算资源
2.2 核心需求拆解
系统需要实现以下核心功能:
- 支持技术文档的语义检索
- 能够理解专业术语的问答
- 回答需要附带权威出处
- 响应时间控制在3秒以内
3. 技术方案设计
3.1 整体架构
采用经典的检索-生成混合架构:
code复制[用户问题] → 检索模块 → 相关文档 → 生成模块 → 最终回答
↘ 直接匹配 → 已有问答对
3.2 关键技术选型
- 检索模型:ColBERTv2
- 平衡了精度和效率
- 支持密集检索和稀疏检索混合
- 生成模型:ChatGLM3-6B
- 中文表现优异
- 6B参数量适合课程提供的A800显卡
- 知识库:北航自建的航空航天文献库(约50万篇论文和技术报告)
4. 实现过程与核心代码
4.1 数据处理流程
python复制def preprocess_documents(docs):
# 专业术语识别与标注
ner_pipeline = ...
# 文档分块(512token为单位)
text_splitter = RecursiveCharacterTextSplitter()
# 构建FAISS索引
embeddings = HuggingFaceEmbeddings()
return vectorstore
# 实际处理了约8万篇核心文献
doc_db = preprocess_documents(load_tech_reports())
4.2 检索模块优化
针对专业领域做的特殊处理:
- 构建了领域术语表(约2.3万条)
- 设计了术语加权策略
- 实现了查询扩展算法
python复制def expand_query(query):
# 基于术语表进行同义词扩展
# 添加关联的公式符号
# 保留原始查询意图
return expanded_query
5. 模型训练与调优
5.1 微调策略
采用LoRA进行高效微调:
- 仅训练约0.5%的参数
- 在8张A800上训练了12小时
- 使用了课程提供的航空航天QA数据集(5万对)
关键超参数:
yaml复制learning_rate: 3e-5
batch_size: 16
lora_rank: 64
target_modules: ["query", "value"]
5.2 评估指标
设计了三个维度的评估:
- 事实准确性(专家评分)
- 响应速度(端到端延迟)
- 用户体验(问卷调查)
6. 部署与性能优化
6.1 推理加速
实现了以下优化:
- 使用vLLM进行推理
- 实现动态批处理
- 量化到INT8精度
6.2 系统监控
搭建了Prometheus+Grafana监控看板,主要监控:
- 每秒查询量
- 响应时间分布
- GPU利用率
7. 项目成果与反思
最终系统在测试集上达到了:
- 事实准确率:82.3%
- 平均响应时间:2.4s
- 用户满意度:4.6/5.0
遇到的典型问题及解决方案:
- 专业术语识别不准 → 构建领域词典
- 长文档处理效率低 → 改进分块策略
- 生成内容有时偏离主题 → 设计prompt模板
8. 课程特色与学习收获
这门课的三个突出特点:
- 强调工业级实践(从数据清洗到模型部署)
- 提供真实场景的计算资源
- 采用项目答辩的考核方式
个人最大的收获是掌握了:
- 大模型微调的全流程
- 性能优化的系统方法
- 团队协作开发的经验
