littlebot
Published on 2025-04-14 / 1 Visits
0

【源码】基于Python语言的数学问题生成框架

项目简介

本项目是基于Python语言开发的框架,用于借助大型语言模型(LLMs)生成、提取和处理数学问题。它从种子数据集MATH着手,提取主题、知识点及相关概念,构建概念图谱,再通过随机游走抽样生成新的数学问题和解决方案。该流程集成度高且可自定义,为研究人员、教育工作者和开发人员提供便捷的数学内容生成平台。

项目的主要特性和功能

  1. 基于LLM的数据提取与生成:利用LLMs自动从MATH数据集提取主题和知识点,生成匹配指定主题、难度和问题类型的新数学问题。
  2. 异步并发与可扩展性:采用异步操作并行处理多个LLM请求,支持大规模数据处理,减少处理时间。
  3. 可自定义的提示与元数据:能定制提示模板、难度级别、问题类型等,满足不同目标。
  4. 概念图谱构建与随机游走采样:构建提取概念的知识图谱,通过随机游走采样识别关联主题和知识点,复现MathScale论文算法。
  5. 模块化与可扩展架构:各组件(预处理、请求处理、后处理)分离,便于与其他数据集、API或LLM服务集成,可在不改变网络处理逻辑下修改提示、处理步骤和输出。

安装使用步骤

1. 准备MATH数据集

将MATH数据集的JSON文件放置或合并到files/MATH.json,按需调整代码中的input_directoryoutput_file_path

2. 提取主题与知识点

在Python环境中运行以下代码: ```python from handlers.data_preparator import construct_math_extraction_messages from handlers.data_extractor import extract_topics_and_knowledge_points from network.response_handler import retrieve_responses import asyncio

messages_list, metadata_list = construct_math_extraction_messages( file_path="files/MATH.json", required_fields={'question': 'problem', 'answer': 'solution', 'id': 'id'}, num=100 )

asyncio.run(retrieve_responses(messages_list, metadata_list, extract_topics_and_knowledge_points)) `` 运行完成后,提取结果会保存在files/math_extraction.json`中。

3. 构建概念图谱与随机游走采样

在生成新问题时,此步骤会自动执行,代码内部调用utils/graph_algorithm.py中的build_concept_graphrandom_walk_sampling

4. 生成新数学问题

在Python环境中运行以下代码: ```python from handlers.data_preparator import construct_math_generation_messages from handlers.data_extractor import extract_question_and_answer

messages_list, metadata_list = construct_math_generation_messages(num=100)

asyncio.run(retrieve_responses(messages_list, metadata_list, extract_question_and_answer)) `` 生成的数学问题及其答案将保存在files/math_generation.json`中。

5. 配置相关参数

config.py中进行如下配置: - API_URL:LLM服务的接口地址。 - HEADERS:若需要鉴权,包含认证令牌。 - DEFAULT_PAYLOAD:指定使用的LLM模型及默认参数。 - MAX_CONCURRENT_REQUESTS:控制大规模批量处理的并发请求数。

6. 自定义生成和提取过程

prompt.py中可进行以下自定义操作: - 调整MATH_EXTRACTION_PROMPTMATH_GENERATION_PROMPT提示模板。 - 扩展或修改question_typesdifficulty_levels字典。

7. 框架扩展

  • 数据预处理:针对新数据集或格式,修改data_preparator.py
  • 数据后处理:若需要更复杂解析或附加元数据字段,编辑data_extractor.py
  • 网络和请求载荷适配:切换LLM提供商或模型时,调整payload_builder.pyconfig.py

引用

如果在代码中使用了概念图谱与随机游走采样方法,请引用以下论文: @article{tang2024mathscale, title={Mathscale: Scaling instruction tuning for mathematical reasoning}, author={Tang, Zhengyang and Zhang, Xingxing and Wang, Benyou and Wei, Furu}, journal={arXiv preprint arXiv:2403.02884}, year={2024} }

许可证

本项目基于 MIT License 协议开源,可按许可证条款自由使用、修改和分发代码。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】