综合介绍
GraphGen 是一个由上海人工智能实验室 OpenScienceLab 开发的开源框架,托管于 GitHub,专注于通过知识图谱指导合成数据生成,优化大语言模型(LLM)的监督微调。它从源文本构建细粒度知识图谱,利用预期校准误差(ECE)指标识别模型知识盲点,优先生成针对高价值、长尾知识的问答对。GraphGen 支持多跳邻域采样以捕获复杂关系信息,并通过风格控制生成多样化数据。项目采用 Apache 2.0 许可证,代码公开,适用于学术研究和商业开发。用户可通过命令行或 Gradio 界面操作,灵活配置生成流程,生成的数据可直接用于模型训练。
功能列表
- 构建细粒度知识图谱:从文本中提取实体和关系,生成结构化知识图谱。
- 识别知识盲点:基于预期校准误差(ECE)指标,定位语言模型的知识薄弱点。
- 生成高价值问答对:优先生成针对长尾知识的问答数据,提升模型表现。
- 多跳邻域采样:捕获知识图谱中的多级关系,增强数据复杂性。
- 风格控制生成:支持多样化问答风格,如简洁或详细,适应不同场景。
- 自定义配置:通过 YAML 文件调整数据类型、输入文件和输出路径。
- Gradio 界面支持:提供可视化界面,简化数据生成操作。
- 模型兼容性:支持多种语言模型(如 Qwen、OpenAI)进行数据生成和训练。
使用帮助
安装流程
GraphGen 是一个 Python 项目,支持从 PyPI 安装或源码运行。以下是详细安装步骤:
从 PyPI 安装
- 安装 GraphGen
确保 Python 版本为 3.8 或更高,运行以下命令:pip install graphg
- 配置环境变量
GraphGen 需要调用语言模型 API(如 Qwen 或 OpenAI)。在终端设置环境变量:export SYNTHESIZER_MODEL="your_synthesizer_model_name" export SYNTHESIZER_BASE_URL="your_base_url" export SYNTHESIZER_API_KEY="your_api_key" export TRAINEE_MODEL="your_trainee_model_name" export TRAINEE_BASE_URL="your_base_url" export TRAINEE_API_KEY="your_api_key"
SYNTHESIZER_MODEL
:用于生成知识图谱和数据的模型。TRAINEE_MODEL
:用于训练的模型。
- 运行命令行工具
执行以下命令生成数据:graphg --output_dir cache
从源码安装
- 克隆仓库
克隆 GraphGen 仓库到本地:git clone https://github.com/open-sciencelab/GraphGen.git cd GraphGen
- 创建虚拟环境
创建并激活虚拟环境:python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows
- 安装依赖
安装项目依赖:pip install -r requirements.txt
确保安装 PyTorch(推荐 1.13.1 或更高)及相关库(如 LiteLLM、DSPy)。若使用 GPU,安装 CUDA 兼容版本:
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117
- 配置环境变量
复制示例环境文件并编辑:cp .env.example .env
在
.env
文件中设置模型相关信息:SYNTHESIZER_MODEL=your_synthesizer_model_name SYNTHESIZER_BASE_URL=your_base_url SYNTHESIZER_API_KEY=your_api_key TRAINEE_MODEL=your_trainee_model_name TRAINEE_BASE_URL=your_base_url TRAINEE_API_KEY=your_api_key
- 准备输入数据
GraphGen 需要 JSONL 格式的输入文本。示例数据位于resources/examples/raw_demo.jsonl
。用户可准备自定义数据,确保格式一致。
使用方法
GraphGen 支持命令行和 Gradio 界面两种操作方式。以下是详细步骤:
命令行操作
- 修改配置文件
编辑configs/graphgen_config.yaml
文件,设置数据生成参数:data_type: "raw" input_file: "resources/examples/raw_demo.jsonl" output_dir: "cache" ece_threshold: 0.1 sampling_hops: 2 style: "detailed"
data_type
:输入数据类型(如raw
)。input_file
:输入文件路径。output_dir
:输出目录。ece_threshold
:知识盲点识别的 ECE 阈值。sampling_hops
:多跳采样深度。style
:问答生成风格(如detailed
或concise
)。
- 运行生成脚本
执行以下命令生成数据:bash scripts/generate.sh
或直接运行 Python 脚本:
python -m graphg --config configs/graphgen_config.yaml
- 查看生成结果
生成的问答对保存在cache/data/graphgen
目录下,格式为 JSONL 文件:ls cache/data/graphgen
Gradio 界面操作
- 启动 Gradio 界面
运行以下命令启动可视化界面:python webui/app.py
浏览器将打开 Gradio 界面,显示数据生成流程。
- 操作流程
- 在界面中上传 JSONL 格式的输入文件。
- 配置生成参数(如 ECE 阈值、采样深度、生成风格)。
- 点击“生成”按钮,系统将处理输入并输出问答对。
- 下载生成的 JSONL 文件。
特色功能操作
- 知识图谱构建:GraphGen 自动从输入文本提取实体和关系,生成知识图谱,保存为 JSON 格式。用户无需手动干预。
- 知识盲点识别:通过 ECE 指标分析模型预测偏差,生成针对性问答对。调整
ece_threshold
控制盲点筛选严格程度。 - 多跳邻域采样:捕获知识图谱中的多级关系,生成复杂问答对。设置
sampling_hops
控制采样深度。 - 风格控制生成:支持多种问答风格,适用于不同场景。用户可通过
style
参数选择风格。
训练模型
生成的数据可用于监督微调(SFT)。将输出文件导入支持 SFT 的框架(如 XTuner):
xtuner train --data cache/data/graphgen/output.jsonl --model qwen-7b
注意事项
- 确保 API 密钥和网络连接稳定,生成过程需调用外部模型。
- 输入数据需符合 JSONL 格式,参考
raw_demo.jsonl
。 - 大规模数据生成建议使用 GPU 设备,优化性能。
- 检查依赖版本,避免冲突。必要时更新
requirements.txt
。
补充资源
- OpenXLab 应用中心:用户可通过 OpenXLab 体验 GraphGen。
- 官方 FAQ:参考 GitHub 上的 FAQ 解决常见问题。
- 技术分析:DeepWiki 提供 系统架构分析,详细介绍 GraphGen 的工作流程。
应用场景
- 学术研究
研究人员可利用 GraphGen 生成专业领域的问答数据。例如,为化学或医学领域模型生成训练数据,提升模型的知识覆盖率。 - 企业 AI 优化
企业可使用 GraphGen 为客服或推荐系统生成定制化问答对,优化对话模型的响应能力。 - 教育平台开发
开发者可生成多样化教学问答数据,构建智能教育工具,支持个性化学习。
QA
- GraphGen 支持哪些模型?
GraphGen 通过 LiteLLM 支持 OpenAI、Qwen、Ollama 等模型。需提供模型 API 密钥和地址。 - 如何准备输入数据?
输入数据需为 JSONL 格式,每行包含文本内容。参考resources/examples/raw_demo.jsonl
。 - 生成数据需要多长时间?
小规模数据(100 条)需几分钟,大规模数据可能需数小时,具体取决于输入量和硬件性能。 - Gradio 界面如何使用?
运行python webui/app.py
,通过浏览器上传输入文件,配置参数后生成数据。