当前位置: 首页 > web >正文

易学探索助手-项目记录(九)

本文介绍本地大模型推理数据集构成

(一)古籍数据获取

以44种竖向从右至左排列的繁体古文为研究对象,通过OCR识别、XML结构化处理,最终生成符合大模型训练要求的数据集。

1.技术路线设计

  1. 图像处理层:PaddleOCR识别竖排文本
  2. 结构转换层:生成标准XML文件
  3. 数据整合层:XML转Excel统一存储

2.关键技术实现

2.1OCR识别与XML生成(Python实现)

核心代码解析

def generate_xml(image_path, xml_path):# OCR识别(支持中文竖排识别)result = ocr.ocr(str(image_path), cls=True)# 从右至左排序逻辑boxes_texts.sort(key=lambda b: -b[0])# XML结构生成root = ET.Element('page', {'id': xml_id,'size': f'{width},{height}','md5': md5sum})# 文本块标注for idx, (x, y, h, text) in enumerate(boxes_texts, start=1):style = f'{x},{y},0,{h};f:0,{h-4}'ET.SubElement(root, 'text', {'id': str(idx+2), 'style': style}).text = text

关键技术点

  1. 竖排识别优化

    • 使用PaddleOCR的use_angle_cls=True参数启用方向分类
    • lang='ch'参数优化中文识别效果
  2. 从右至左排序

    boxes_texts.sort(key=lambda b: -b[0])  # 按x坐标降序排列
    
  3. 元数据保留

    • 图像MD5校验码
    • 图像尺寸与格式
    • 创建时间戳
2.2XML转Excel(Java实现)

核心处理逻辑

public class XmlToExcelConverter {// 多文件夹批处理File[] directories = rootDir.listFiles(File::isDirectory);// 创建Excel工作簿Workbook workbook = new XSSFWorkbook();// XML内容提取StringBuilder content = new StringBuilder();List<Node> textNodes = document.selectNodes("//text");
}

关键特性

  1. 批量处理架构

    • 支持多层级目录遍历
    • 自动识别index.xml元数据文件
  2. 数据标准化

    // Excel列设计
    headerRow.createCell(0).setCellValue("book_id");
    headerRow.createCell(1).setCellValue("book_name");
    headerRow.createCell(3).setCellValue("content");
    
  3. 内容聚合策略

    • 多XML文件合并为单个Excel
    • 章节自动编号
    • 文本块换行符分隔

3.成果展示

<page id="0891001001.xml" relate="0891001001.jpg" size="5696,4439">
<font id="0">zykkai</font>
<rect id="1" box="105,183,5490,4086" foreground="255,255,255"/>
<rect id="2" box="125,203,5450,4046" foreground="255,255,255"/>
<text id="3" style="4755,291,0,1304;f:0,730">周易內</text>
<text id="4" style="3938,288,0,1309;f:0,737">傳六卷</text>
<text id="5" style="3393,1373,0,345;f:0,322">後學吴讓之署</text>
<text id="6" style="1544,1046,0,374;f:0,358">同治四年湘鄉曽</text>
<text id="7" style="1034,1051,0,374;f:0,370">氏栞于金陵節署</text>
</page>

(二)古籍问答对数据生成

0.从文档中获取古籍内容

1.调用DeepSeek模型生成问题

response = client.chat.completions.create(model="deepseek-reasoner",messages=[{"role": "system", "content": "你是一名研究周易的专家"},{"role": "user", "content": f"这是一本古籍中的一段,\n{chunk}\n\n请根据文章内容提出2个问题"}],stream=False
)
  • 使用 deepseek-reasoner 专家模型模拟《周易》研究者,生成语义相关问题。

  • 要求:禁止使用“文中”、“文章”字眼,确保通用性。

2.去重判断 + 问题提取

def extract_questions(text):return re.findall(r"\d+\.\s*(.+)", text)
  • 提取格式如“1. 问题内容”的结构化问题,防止误提。

  • 利用 guji_answer_question.txt 做去重判断,确保每个问题只问一次。

3.自动回答生成并保存

response2 = client.chat.completions.create(model="deepseek-reasoner",messages=[{"role": "system", "content": "你是一名研究周易的专家"},{"role": "user", "content": f"{chunk}\n请回答问题:{final_question}"}],stream=False
)
  • 模拟专家作答,并保存:

    • guji_answer.txt:包含问题、推理、最终回答

    • guji_answer_question.txt:仅保存问题列表

4. 输出样例

共处理349本易学古籍,共得到16068条问答数据。

(三)《周易研究》数据与易学知识图谱和百科全书获取

类似于易学古籍数据获取 

共处理349本易学古籍,共得到16068条问答数据。

对百科全书中概论、词汇、易学史、人物、著作等部分进行了处理,共得到3643条问答数据。

(四)DeepSeek通过Self-Instruct自行生成

1. 初始化 DeepSeek 客户端

from openai import OpenAI 
client = OpenAI(api_key="...", base_url="https://api.deepseek.com")

2. Prompt 模板设计


每条 prompt 都在模拟不同的教学/应用场景,覆盖从“入门科普”到“哲学讨论”再到“实际应用”三个层面。

覆盖广泛:基础 → 哲学 → 应用;

风格丰富:模拟学生提问、专家回答;

易于扩展:可增加更多领域 prompt。

3. 防止重复生成:问题去重机制
 

# 提取编号的问题(1. xxx)用于去重等处理
def extract_questions(text):pattern = re.compile(r"\d+\.\s*(.+)")return pattern.findall(text)# 读取已有问题列表,避免重复
existing_questions_file = Path("self_instruct_questions.txt")
if existing_questions_file.exists():with open(existing_questions_file, "r", encoding="utf-8") as f:asked_questions = set(line.strip() for line in f if line.strip())
else:asked_questions = set()

通过正则提取“1. xxx”结构的问题文本,并用 set 去重保存。这样可防止多个 Prompt 生成重复问题,提高数据独特性。 

4. 核心主循环:生成并保存数据

这里使用 DeepSeek 的 deepseek-reasoner 模型,适合处理复杂推理与专业领域任务,并用 system prompt 设置角色背景(国学专家),提升回答可信度和风格一致性。

5. 数据保存结构

保存问答数据为结构清晰的文本格式: 

  • reasoning_content: 模型的推理过程;

  • answers: 结构化问答列表;

  • 可用于微调前进一步清洗或分句。

 6.格式转换

共得到周易基础概念性、开放性等问答数据共4475条。 

http://www.xdnf.cn/news/6108.html

相关文章:

  • HTTP GET报文解读
  • 学习机器学习的体会与姓名性别预测案例分析
  • CMakeLists生成调用静态动态库可执行demo
  • 论语详解---缠中说禅(整理)
  • 通义千问-langchain使用构建(一)
  • ChromeDriver进程泄漏问题分析与最佳实践解决方案
  • 排序算法详解
  • Electron入门指南:用前端技术打造桌面应用
  • Socket API 核心函数详解
  • 一文了解 HTTP Content-Type:从基础到实战
  • 第六天——贪心算法——字符串分隔
  • 【C++】模板(初阶)
  • 从lightrag的prompt到基于openai Structured Outputs 的优化实现思路
  • 虚幻引擎5-Unreal Engine笔记之摄像机与场景捕获相关概念的解析
  • C语言学习之文件操作
  • HTTP / HTTPS 协议
  • Nginx 动静分离在 ZKmall 开源商城静态资源管理中的深度优化
  • LVDS系列12:Xilinx Ultrascale系可编程输入延迟(二)
  • ajax提交form表单数据举例
  • ARM杂谈——临界段保护恢复的中断状态可靠吗
  • Xcode报错:“Set `maskView` to `nil` before adding it as a subview of ZFMaskView
  • 计算机图形学之几何(Geometry)
  • Maven 下载安装与配置教程
  • 查看字节真实二进制形式示例解析1
  • NAT/代理服务器/内网穿透
  • 容器编排的革命:Kubernetes如何引领IT的云原生时代
  • 高并发内存池(四):Page Cache结构设计
  • How Sam‘s Club nudge customers into buying more
  • PTA编程题: 异常处理(python)
  • AI-02a5a5.神经网络-与学习相关的技巧-权重初始值