如何在Amazon SageMaker中使用多份PDF文档微调Llama 2-7B模型?
基于PDF提取文本的AWS模型微调实现思路
一、清洗提取后的PDF文本
PDF提取的文本通常存在冗余或格式问题,先做预处理:
- 用正则
re.sub()匹配并删除重复的页眉、页脚、页码(比如re.sub(r'^\d+\s*$', '', line, flags=re.MULTILINE)) - 修复断行:把被换行拆分的完整语句合并(比如判断行尾是否是标点,不是则和下一行拼接)
- 过滤乱码、特殊符号,统一文本编码为UTF-8
- 拆分长文本为逻辑独立的段落或知识点块,方便后续生成训练数据
二、将清洗后的文本转换为AWS微调兼容的CSV格式
AWS微调支持的CSV核心是明确的输入输出对,根据你的微调目标选择对应格式:
场景1:指令/问答微调(最常用)
把PDF中的知识点转化为问答对或指令-响应对:
- 列名固定为
prompt,completion - 示例数据:
"请解释文档中的XX概念?","XX是指XXX,主要应用于XXX场景..." "总结以下段落:[PDF中某段文本]","该段落核心内容为XXX,重点说明XXX" - 注意:用双引号包裹内容避免逗号冲突,prompt结尾可添加模型要求的分隔符(比如Claude要求
\n\nHuman:开头,\n\nAssistant:作为响应前缀)
场景2:文本补全微调
适合让模型学习PDF的行文逻辑或内容延续性:
- 把长文本切成固定长度的片段,前半部分作为
prompt,后半部分作为completion - 示例:
"PDF片段前半部分内容...","PDF片段后半部分内容..."
工具辅助转换
用pandas快速生成合规CSV:
import pandas as pd import csv # 假设已生成问答对列表qa_pairs = [{"prompt": "...", "completion": "..."}] df = pd.DataFrame(qa_pairs) df.to_csv("fine_tune_data.csv", index=False, quoting=csv.QUOTE_ALL)
三、AWS平台上的微调操作
基于AWS官方提供的CSV微调流程执行:
- 把生成的CSV上传到AWS S3存储桶,确保桶权限允许微调服务(Bedrock/SageMaker)读取
- Bedrock路径:控制台进入Bedrock → 模型微调 → 创建作业 → 选择基础模型 → 指定S3中CSV的路径 → 设置训练参数(epoch数、学习率)→ 启动作业
- SageMaker路径:导入CSV到S3 → 选择对应模型的微调脚本(比如Hugging Face框架)→ 配置训练实例类型 → 运行训练作业
四、验证与迭代
- 用未参与微调的PDF知识点作为测试prompt,调用微调后的模型,检查输出的准确性、相关性
- 若效果不佳,可调整训练数据的质量(比如增加更多问答对)、微调参数(比如降低学习率)或调整文本拆分逻辑
内容的提问来源于stack exchange,提问作者GLADOS
相关产品推荐
相关产品推荐

