(笔记+作业)第五期书生大模型实战营---L2G2000 GraphGen:训练数据合成实践

学员闯关手册:https://aicarrier.feishu.cn/wiki/QdhEwaIINietCak3Y1dcdbLJn3e

课程视频:https://www.bilibili.com/video/BV13U1VYmEUr/

课程文档:https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/Python

关卡作业:https://github.com/InternLM/Tutorial/blob/camp4/docs/L0/Python/task.md

开发机平台:https://studio.intern-ai.org.cn/

开发机平台介绍:https://aicarrier.feishu.cn/wiki/GQ1Qwxb3UiQuewk8BVLcuyiEnHe

书生浦语官网:https://internlm.intern-ai.org.cn/

github网站:https://github.com/internLM/

InternThinker: https://internlm-chat.intern-ai.org.cn/internthinker

快速上手飞书文档:https://www.feishu.cn/hc/zh-CN/articles/945900971706-快速上手文档

提交作业:https://aicarrier.feishu.cn/share/base/form/shrcnUqshYPt7MdtYRTRpkiOFJd;

作业批改结果:https://aicarrier.feishu.cn/share/base/query/shrcnkNtOS9gPPnC9skiBLlao2c

internLM-Chat 智能体:https://github.com/InternLM/InternLM/blob/main/agent/README_zh-CN.md

lagent:https://lagent.readthedocs.io/zh-cn/latest/tutorials/action.html#id2

github仓库:https://github.com/InternLM/xtuner

动态知识库:https://deepwiki.com/InternLM/xtuner




1.GraphGen介绍

GraphGen是一个基于知识图谱的SFT数据生成框架。

该框架通过构建细粒度知识图谱、识别 LLMs 的知识盲点、并生成多风格的内容来提高模型在知识密集型任务上的表现。GraphGen 适用于三种关键问答场景:原子问答(atomic QA)、聚合问答(aggregated QA)和多跳问答(multi-hop QA)。

  • Atomic QA:最基础的问答形式,专注于单一知识点或事实。
  • Aggregated QA:涉及多个知识点或复杂信息的整合。
  • Multi-hop QA:需要通过多步推理,结合多个知识点才能回答。

    Github仓库:https://github.com/open-sciencelab/GraphGen

2. GraphGen流程解析

  1. 知识图谱构建
  • 文本分割:将原始文档分割成语义连贯的小片段。
  • 实体与关系提取:使用 Synthesizer Model 从片段中识别和提取实体及其关系。
  • 知识图谱聚合:将不同片段中的相同实体或关系的描述自动合并,形成知识图谱。
  1. 理解能力评估
  • 知识表示:将知识图谱中的每个关系视为一个知识陈述 Ri,并生成其改写版本及否定版本。
  • 置信度量化:通过 Trainee Model 对这些陈述的置信度进行评估,计算其对每个知识点的理解程度。
  • 理解损失计算:通过计算真实分布与预测分布之间的交叉熵,来衡量 Trainee Model 对知识的理解差距。
  1. 图组织
  • 子图提取:执行 k-hop 子图提取,以有效组织知识图谱。采用深度策略、长度策略和选择策略来平衡子图的复杂性、相关性和计算可行性。
  1. 问答对生成
  • 原子 QA 生成:从单个节点或边生成基础问答对。
  • 聚合 QA 生成:组织和改写子图中的数据,生成涉及多个实体和关系的综合性问答对。
  • 多跳 QA 生成:明确实体间关系,生成需要多步推理的问答对。

代码实战

bash 复制代码
#环节部署
conda create -n graphgen python=3.10 -y
conda activate graphgen
git clone https://github.com/open-sciencelab/GraphGen.git
cd GraphGen
pip install -r requirements.txt

#2使用Gradio Demo进行简单数据合成,
python webui/app.py
#1.端口映射,ssh root@ssh.intern-ai.org.cn -p 34002 -CNg -L 8080:127.0.0.1:7860
#打开 http://0.0.0.0:7860,能够看到如下界面,2. 填入调用LLM接口的base url、model和api key。从https://ai.gitee.com/serverless-api,前往 Gitee AI 工作台 - 设置 - 访问令牌,创建你的 API Key,
#使用 InternLM3-8B-Instruct 完成数据生成,分别修改下面三处:
#Synthesizer URL: https://ai.gitee.com/v1
#Synthesizer Model: InternLM3-8B-Instruct
#API Key: 申请的API Key
#2、使用硅基流动https://siliconflow.cn/,进入API密钥页面,点击"新建API密钥",创建您的API key,
#使用 internlm/internlm2_5-7b-chat 进行数据生成,分别修改下面三处:
#Synthesizer URL: https://api.siliconflow.cn/v1
#Synthesizer Model: internlm/internlm2_5-7b-chat
#3、选择任意一个example file,或者上传格式相同的文件
#4、点击Run GraphGen ,等待生成完成后,将会得到一个结果文件。

无法访问github时替代方案,下面代码也不起作用,只能手动从github下载模型,再手动上传到开发机

bash 复制代码
ssh-keygen -t rsa -C "haidizym@163.com"
cat ~/.ssh/id_rsa.pub
#登录 Gitee → 设置 → SSH 公钥 → 粘贴并保存
#将原 HTTPS 地址替换为 SSH 格式,
git init
git remote add origin git@gitee.com:open-sciencelab/GraphGen.git

git clone git@gitee.com:open-sciencelab/GraphGen.git
cd GraphGen

3、运行源码进行数据合成

bash 复制代码
#1.环境
conda create -n vllm python=3.12 -y
conda activate vllm
pip install vllm==0.8.5.post1
#2. 部署 internlm/internlm3-8b-instruct 的 OpenAI Compatible Server
#vllm serve internlm/internlm3-8b-instruct
vllm serve internlm/internlm3-8b-instruct --trust-remote-code --port 8000
cp .env.example .env
SYNTHESIZER_MODEL=your-path/internlm3-8b-instruct
SYNTHESIZER_BASE_URL=http://0.0.0.0:8000/v1
SYNTHESIZER_API_KEY=
TRAINEE_MODEL=your-path/internlm3-8b-instruct
TRAINEE_BASE_URL=http://0.0.0.0:8000/v1
TRAINEE_API_KEY=
#5. 检查/修改配置文件configs/graphgen_config.yaml
#运行数据生成脚本
bash scripts/generate.sh
#等待生成完成后可以在指定目录查看生成的数据,ls cache/data/graphgen
yaml 复制代码
#5. 检查/修改配置文件configs/graphgen_config.yaml
data_type: raw
input_file: resources/examples/raw_demo.jsonl
tokenizer: cl100k_base
quiz_samples: 2
traverse_strategy:
  qa_form: aggregated
  bidirectional: true
  edge_sampling: max_loss
  expand_method: max_width
  isolated_node_strategy: ignore
  max_depth: 1
  max_extra_edges: 2
  max_tokens: 256
  loss_strategy: only_edge
web_search: false
re_judge: true



相关推荐
2301_764441334 小时前
Aella Science Dataset Explorer 部署教程笔记
笔记·python·全文检索
派大鑫wink5 小时前
【Java 学习日记】开篇:以日记为舟,渡 Java 进阶之海
java·笔记·程序人生·学习方法
永远都不秃头的程序员(互关)6 小时前
大模型Agent落地实战:从核心原理到工业级任务规划器开发
笔记
TL滕7 小时前
从0开始学算法——第十八天(分治算法)
笔记·学习·算法
算法与双吉汉堡7 小时前
【短链接项目笔记】Day2 用户注册
java·redis·笔记·后端·spring
思成不止于此8 小时前
【MySQL 零基础入门】MySQL 约束精讲(一):基础约束篇
数据库·笔记·sql·学习·mysql
WizLC9 小时前
【JAVA】JVM类加载器知识笔记
java·jvm·笔记
TL滕10 小时前
从0开始学算法——第十八天(分治算法练习)
笔记·学习·算法
لا معنى له10 小时前
学习笔记:卷积神经网络(CNN)
人工智能·笔记·深度学习·神经网络·学习·cnn
蒙奇D索大10 小时前
【数据结构】考研408 | 冲突解决精讲: 拉链法——链式存储的艺术与优化
数据结构·笔记·考研·改行学it