项目简介
本项目是基于Python语言开发的框架,用于借助大型语言模型(LLMs)生成、提取和处理数学问题。它从种子数据集MATH着手,提取主题、知识点及相关概念,构建概念图谱,再通过随机游走抽样生成新的数学问题和解决方案。该流程集成度高且可自定义,为研究人员、教育工作者和开发人员提供便捷的数学内容生成平台。
项目的主要特性和功能
- 基于LLM的数据提取与生成:利用LLMs自动从MATH数据集提取主题和知识点,生成匹配指定主题、难度和问题类型的新数学问题。
- 异步并发与可扩展性:采用异步操作并行处理多个LLM请求,支持大规模数据处理,减少处理时间。
- 可自定义的提示与元数据:能定制提示模板、难度级别、问题类型等,满足不同目标。
- 概念图谱构建与随机游走采样:构建提取概念的知识图谱,通过随机游走采样识别关联主题和知识点,复现MathScale论文算法。
- 模块化与可扩展架构:各组件(预处理、请求处理、后处理)分离,便于与其他数据集、API或LLM服务集成,可在不改变网络处理逻辑下修改提示、处理步骤和输出。
安装使用步骤
1. 准备MATH数据集
将MATH数据集的JSON文件放置或合并到files/MATH.json
,按需调整代码中的input_directory
和output_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_graph
和random_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_PROMPT
和MATH_GENERATION_PROMPT
提示模板。
- 扩展或修改question_types
和difficulty_levels
字典。
7. 框架扩展
- 数据预处理:针对新数据集或格式,修改
data_preparator.py
。 - 数据后处理:若需要更复杂解析或附加元数据字段,编辑
data_extractor.py
。 - 网络和请求载荷适配:切换LLM提供商或模型时,调整
payload_builder.py
和config.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】