Datawhale AI夏令营学习笔记:大模型微调与数据处理实践
目录
一、项目背景与目标
二、核心技术实现
1. 数据预处理基础
2. 大模型API调用
3. 增量处理与断点续传
4. 数据格式转换
三、学习收获与心得
1. 技术层面
2. 学习方法
3. 避坑指南
四、未来改进方向
五、总结
这篇笔记记录了我在Datawhale AI夏令营期间的学习心得和实践经验,主要围绕大模型微调技术和数据处理流程展开。通过参与夏令营项目,我不仅掌握了核心技术,还积累了一套实用的学习方法,希望能帮助到同样在AI领域探索的你。
一、项目背景与目标
Datawhale AI夏令营是一个汇聚产学研资源的免费学习活动,旨在通过项目实践提升参与者的AI技术能力和就业竞争力。我选择的是大模型技术方向,具体任务是利用Qwen3-8B模型处理列车班次信息,生成问答对数据集。
这个项目的核心目标是通过实践掌握:
- 大模型API调用与结果解析
- 结构化数据的处理与转换
- 增量式数据生成与断点续传机制
- JSON与JSONL格式转换
二、核心技术实现
1. 数据预处理基础
项目开始时,我们需要先加载并清洗Excel数据:
import pandas as pd# 读取数据并处理缺失值
data = pd.read_excel('data/info_table(训练+验证集).xlsx')
data = data.fillna('无数据') # 空值填充
这种基础但关键的操作确保了后续处理的稳定性。Datawhale提供的Baseline让我快速上手,避免了在环境配置上浪费时间。
2. 大模型API调用
项目中使用了硅基流动平台的Qwen3-8B模型,通过API实现问答生成:
def call_llm(content: str):url = " https://api.siliconflow.cn/v1/chat/completions "payload = {"model": "Qwen/Qwen3-8B","messages": [{"role": "user", "content": content}]}headers = {"Authorization": "Bearer <KEY>", "Content-Type": "application/json"}resp = requests.request("POST", url, json=payload, headers=headers).json()# 正则提取JSON内容content = resp['choices'][0]['message']['content'].split('</think>')[-1]pattern = re.compile(r'^```json\s*([\s\S]*?)```$', re.IGNORECASE)match = pattern.match(content.strip())if match:return json.loads(match.group(1).strip())return content
这个函数封装了API调用和响应解析的全过程,特别是正则表达式处理部分,解决了模型返回结果中JSON的提取问题。
3. 增量处理与断点续传
为避免网络中断导致前功尽弃,项目实现了断点续传功能:
def load_existing_data():"""加载已有数据和进度"""train_data_list = []processed_indices = set()error_data_list = []# 分别加载训练数据、进度信息和错误记录if os.path.exists(OUTPUT_FILE):try:with open(OUTPUT_FILE, 'r', encoding='utf-8') as f:train_data_list = json.load(f)except:print("训练数据加载失败,将重新开始")# 类似处理进度和错误文件...return train_data_list, processed_indices, error_data_list
这种方法特别适合处理大规模数据集,每次运行都能从上次中断的地方继续。
4. 数据格式转换
项目最后需要将JSON数组转换为JSONL格式提交:
def convert_json_to_jsonl(input_file, output_file):with open(input_file, 'r', encoding='utf-8') as f:data = json.load(f)with open(output_file, 'w', encoding='utf-8') as f:for item in data:f.write(json.dumps(item, ensure_ascii=False) + '\n')
JSONL格式(每行一个JSON对象)比传统JSON数组更适合大规模数据存储和处理。
三、学习收获与心得
1. 技术层面
通过这次实践,我深入掌握了:
- 大模型调用技巧:学会了如何构造有效的prompt,控制模型输出格式
- 数据处理流程:从原始数据清洗到最终格式转换的全流程实践
- 工程化思维:通过断点续传、错误处理等机制提升代码健壮性
2. 学习方法
Datawhale夏令营强调"做中学",这种模式让我受益匪浅:
- 从Baseline入手:先跑通提供的示例代码,再逐步深入
- 迭代优化:从简单实现开始,不断添加新功能
- 问题驱动:遇到实际问题时查阅资料,理解更深刻
3. 避坑指南
在项目中遇到的典型问题及解决方案:
- API限流:添加延时或使用代理IP池
- JSON解析失败:严格校验模型返回格式,添加异常处理
- 内存不足:采用增量处理而非全量加载
四、未来改进方向
根据夏令营中学到的知识,我计划在以下方面继续深入:
- Prompt工程优化:尝试few-shot learning等高级技巧提升生成质量
- 数据增强:通过回译、同义词替换等方法扩充训练数据
- 模型微调:使用LoRA等技术对基座模型进行领域适配
- 自动化流水线:引入Airflow等工具管理整个数据处理流程
五、总结
Datawhale AI夏令营为我打开了大模型应用开发的大门,从最初的"跑通Baseline"到最终完成项目,这种循序渐进的实践方式让我在短时间内获得了显著成长。特别感谢组织者和志愿者的付出,这种开源共享的精神正是AI社区最宝贵的财富。