Skip to content

RulesAI/LLM-Finetuning-Tools

Repository files navigation

供应链技术LLM微调数据处理工具

本项目提供一套完整的工具链,用于处理供应链技术PDF文档,提取有价值的内容,并生成高质量的问答对用于LLM(大型语言模型)的微调训练。

功能特点

  • 自动处理PDF文档并提取文本内容
  • 增强型文档清洗,处理专业术语、结构化标题、图表和列表
  • 自动清理引用网址,移除不应出现在正文中的参考链接
  • 智能语义分段,保持内容的上下文完整性
  • 增强型主题提取,准确识别段落核心技术主题
  • 问答语义匹配,确保问题和答案的相关性
  • 自动生成多样化、高质量的问答对
  • 检测并修复问题中的特殊字符和格式问题
  • 质量评估和筛选,确保最终数据的高质量
  • 支持ChatGLM格式的输出,便于直接用于模型微调
  • 全流程自动化处理,提高数据处理效率
  • 自动依赖检查和临时文件清理
  • 基于规则和算法实现,不依赖外部LLM API

环境要求

  • macOS系统(目前主要在macOS上测试通过)
  • Python 3.8+
  • 所需依赖库(特定版本):
    • langchain==0.0.267
    • langchain_community>=0.0.1
    • langchain-text-splitters>=0.0.1
    • pypdf>=3.15.1
    • tiktoken>=0.5.1
    • numpy>=1.24.0
    • regex>=2023.8.8
    • tqdm>=4.66.1
    • python-dotenv>=1.0.0

安装依赖

pip install -r requirements.txt

使用方法

全流程自动处理

使用automate_pipeline.py脚本可以一键完成从PDF到高质量问答对的全过程:

python automate_pipeline.py --pdf <pdf文件路径> --output <输出目录> --skip-existing

参数说明:

  • --pdf:指定输入的PDF文件路径
  • --output:指定输出目录,默认为"output"
  • --skip-existing:如果输出文件已存在,跳过相应步骤(对于每个处理阶段都适用,可以在任意阶段中断后继续处理)

单步处理

如果您想单独执行某个处理步骤,可以使用对应的脚本:

  1. PDF内容提取
python tunning.py --pdf <pdf文件路径> --output processed_content.txt
  1. 增强型文档清洗(新增功能):
python enhanced_cleaner.py --input processed_content.txt --output enhanced_content.txt
  1. 语义分段
python segment.py --input enhanced_content.txt --output segmented_content.json
  1. 问答对生成
python generate_qa_pairs_improved.py --input segmented_content.json --output_dir output
  1. 问答对修复
python fix_qa_pairs_improved.py --input_json output/qa_instructions_robust.json --input_jsonl output/qa_instructions_chatglm_robust.jsonl --output_dir output
  1. 高质量问答对提取
python ensure_high_quality.py --output_dir output

处理流程说明

  1. PDF文本提取:从PDF文件中提取原始文本内容,并进行基础清洗处理。

  2. 增强型文档清洗:进行更深层次的文本清洗,包括:

    • 识别和标记文档结构(标题、段落、图表、列表等)
    • 专业术语统一化处理(如WMS与"仓库管理系统"的统一表达)
    • 细粒度重复内容检测与删除
    • 图表内容与说明的关联加强
    • 列表结构保留
    • 技术概念的关联性增强
  3. 智能语义分段:按照语义将文本内容拆分为适当大小的段落,保持上下文关联。

  4. 问答对生成:基于分段内容自动生成多种类型的高质量问答对。

    • 使用预定义模板生成不同难度和维度的问题
    • 基于tiktoken计算token数量,确保生成内容适合模型处理
    • 实现多种主题提取方法,当主要方法失败时有备选方案
    • 根据段落内容智能生成答案,确保内容完整性
  5. 问答对修复:检测并修复问答对中的特殊字符、格式问题等。

    • 处理不完整的问题或截断的内容
    • 修复特殊字符和标点符号问题
    • 确保问题以问号结尾,答案内容完整
  6. 质量评估和筛选:对问答对进行质量评估,提取高质量的子集用于最终微调。

    • 详细的评分标准包括问题长度、答案长度、token数、问答相关性等
    • 自动识别并记录常见问题,如问题不完整、答案过短、主题不匹配等
    • 针对不同维度和难度的问题使用平衡的筛选策略

输出文件说明

处理完成后,在输出目录(默认为"output")中将生成以下关键文件:

  • processed_content.txt:PDF提取的原始文本内容
  • enhanced_content.txt:增强清洗后的文本内容
  • segmented_content.json:分段后的内容
  • qa_instructions_robust.json:生成的原始问答对(JSON格式)
  • qa_instructions_chatglm_robust.jsonl:生成的原始问答对(ChatGLM格式)
  • qa_instructions_fixed_improved.json:修复后的问答对(JSON格式)
  • qa_instructions_chatglm_fixed_improved.jsonl:修复后的问答对(ChatGLM格式)
  • high_quality_qa.json:最终高质量问答对(JSON格式,用于微调)
  • high_quality_qa.jsonl:最终高质量问答对(ChatGLM格式,用于微调)
  • cleaning_report.json:文档清洗处理报告
  • quality_report_*.json:质量评估报告
  • *.log:各处理阶段的详细日志文件,用于问题诊断和处理过程跟踪

增强型文档清洗功能详解

功能特点

新增的enhanced_cleaner.py脚本实现了以下高级清洗功能:

  1. 结构化内容识别与处理

    • 自动识别标题并按层级分类
    • 识别图表标题和相关描述
    • 保留列表项的原始结构和格式
  2. 术语统一化处理

    • 内置供应链领域常用术语词典
    • 自动检测并统一术语的不同表达形式
    • 保留首次定义的完整表达,后续使用统一缩写
  3. 改进的重复内容处理

    • 句子级别的精确去重
    • 跨段落的内容重复检测
    • 保留语义完整性
  4. 参考网址清理

    • 强力检测并移除文本中的引用网址、域名和站点引用(例如"onerail.com"、"businesswire"等)
    • 支持多级清理,处理各种隐蔽的URL引用格式
    • 优化后处理,修复清理后的标点和空格
    • 识别常见引用站点名称,即使没有域名后缀也能检测
    • 确保最终生成问答对不含任何参考源信息或网址
  5. 图表内容关联增强

    • 将图表标题与说明文本关联
    • 保留图表的上下文信息
  6. 技术概念关联性强化

    • 识别技术定义段落
    • 建立术语与其定义的关联
    • 优化专业术语的上下文表达

清洗报告

每次执行增强清洗后,系统会生成一份详细的清洗报告(cleaning_report.json),包含以下信息:

  • 识别的标题数量
  • 处理的图表数量
  • 识别的列表项数量
  • 移除的引用网址数量
  • 标准化处理的术语及其出现次数
  • 移除的重复内容统计

主题提取与问答匹配优化

为提高生成的问答对质量,我们增强了以下关键功能:

增强型主题提取

  1. 上下文感知的主题识别

    • 精确识别段落核心技术主题,避免将子主题或属性误识别为主要主题
    • 多层级模式匹配,优先从明确定义中提取,避免从引用或子描述中提取片段
    • 特殊技术术语词库支持,确保专业领域名词正确识别
    • 主题格式与有效性验证,避免不完整或无意义的主题
    • 主题提取失败时实现多级备选机制,确保始终能获取有效主题
  2. 语义连贯性检查

    • 验证提取的主题与段落内容的语义关联性
    • 自动修正不匹配的主题,如将"责任归属"识别为"自动驾驶技术"的一部分
    • 确保问题中的主题与答案内容有足够的相关性

问答匹配质量评估

  1. 语义相关性评估

    • 问题与答案的关键词匹配度分析
    • 问题主题与答案内容的关联性验证
    • 特殊问题类型("为什么"、"定义"等)与答案格式匹配检查
  2. 严格筛选机制

    • 提高问答相关性在质量评分中的权重
    • 自动标记并过滤不相关问答对
    • 确保生成的问答对逻辑一致,答案能够有效回答问题
  3. 问答平衡优化

    • 在不同难度和维度类型之间保持平衡
    • 对稀缺维度和难度的问答对适当降低筛选标准
    • 综合考虑分数分布,确保最终数据集的多样性

改进效果

  1. 提高数据质量

    • 显著减少问题与答案不匹配的情况
    • 消除诸如"责任归属代表了什么技术?"等主题不明确的问题
    • 确保每个问题都能从答案中找到明确的响应内容
  2. 增强报告

    • 详细的质量报告,包括问答匹配度统计
    • 主题分布分析,帮助理解数据集组成
    • 问题维度和难度统计,便于评估数据多样性

通过以上优化,系统能够生成更符合人类学习和问答模式的高质量数据集,显著提高微调效果。

质量评分标准

系统使用以下标准评估生成问答对的质量:

  1. 问题质量评分

    • 长度范围:10-50个字符
    • Token数范围:5-25个token
    • 必须以问号结尾
    • 不含特殊字符或非法字符
    • 不与现有问题重复
  2. 答案质量评分

    • 长度范围:100-800个字符
    • Token数范围:50-350个token
    • 不含特殊字符或非法字符
    • 与现有答案不高度相似
  3. 问答相关性评分

    • 问题关键词在答案中的出现频率
    • 主题词在答案中的覆盖度
    • 问题类型与答案格式匹配度
    • 领域关键词匹配度

最终综合分数在85分以上的问答对被视为高质量数据,可用于模型微调。

错误处理和回退机制

系统实现了多层次的错误处理和回退机制:

  1. 文件处理回退:如果预期文件不存在,系统会:

    • 在当前目录和其他可能位置查找替代文件
    • 创建临时符号链接指向找到的文件
    • 在处理结束后自动清理临时文件和链接
  2. 处理步骤回退

    • 如增强清洗失败,会自动回退到使用原始处理文本
    • 文件格式错误时会尝试进行修复和转换
  3. 临时文件管理

    • 自动跟踪所有临时创建的文件和链接
    • 使用完毕后自动清理,避免占用磁盘空间
  4. 详细日志记录

    • 每个处理步骤保存单独的日志文件
    • 记录处理进度、警告和错误信息
    • 便于问题诊断和流程优化

可能遇到的问题与解决方案

  1. 文件名不匹配问题

    • 问题:脚本期望的文件名与实际生成的文件名不一致
    • 解决方案:使用更新后的脚本,它会自动创建必要的符号链接
  2. 增强清洗失败

    • 问题:文本编码或格式异常导致增强清洗失败
    • 解决方案:使用--skip-existing参数,系统会在增强清洗失败时自动回退到原始处理文本继续后续步骤
  3. 术语识别问题

    • 问题:某些特定领域术语未被正确识别
    • 解决方案:编辑enhanced_cleaner.py中的TERMINOLOGY_MAP字典,添加特定领域术语
  4. 临时文件被误删

    • 问题:处理过程中创建的临时文件被手动删除导致流程中断
    • 解决方案:使用--skip-existing参数重新运行,系统会重新创建必要的文件
  5. 内存用量过高

    • 问题:处理大型PDF文件时可能导致内存不足
    • 解决方案:调整segment.py中的分段参数,减小单个段落大小

技术实现说明

本工具的所有功能均基于规则和算法实现,不依赖外部LLM API:

  1. 主题提取:使用正则表达式和预定义模式识别技术主题
  2. 问答生成:基于模板填充和内容提取生成多样化问答对
  3. 质量评估:使用硬编码规则和评分标准进行质量筛选

系统使用tiktoken计算token数量,但仅用于内容长度控制,不涉及模型调用。

示例数据

以下是一个处理后生成的高质量问答对示例:

{
  "instruction": "结合材料,回答下面的问题: 仓库执行系统如何与其他系统协作?",
  "input": "",
  "output": "仓库执行系统(WES)与其他系统协作的方式主要有:1) 作为仓库管理系统(WMS)和仓库控制系统(WCS)之间的中间层,负责任务分配和资源调度;2) 与WMS系统对接,接收订单和库存信息,并提供执行状态反馈;3) 与WCS系统集成,控制自动化设备执行具体操作;4) 与ERP系统交换业务数据;5) 与智能设备和机器人系统通信,优化工作流程。WES的协作功能使其能够在整个供应链系统中发挥协调作用,提高自动化程度和作业效率。"
}

模型微调示例

准备好训练数据后,可以参考以下示例进行模型微调:

# ChatGLM模型微调示例
python finetune_chatglm.py --train_file output/high_quality_qa.jsonl --model_name ChatGLM3-6B --output_dir finetuned-model

贡献与反馈

欢迎提交问题反馈或功能建议,帮助我们改进这个工具。

About

GLM LLM Fine-tuning Tools

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages