More than code

More Than Code
The efficiency of your iteration of reading, practicing and thinking decides your understanding of the world.
  1. 首页
  2. 未分类
  3. 正文

GraphGen

2025年5月18日 18点热度 0人点赞 0条评论

知乎有一篇文章,可以拿来参考:
* https://zhuanlan.zhihu.com/p/1899069273533581204

论文要解决的问题

论文旨在解决大语言模型(LLM)监督微调(SFT)中高质量监督数据稀缺的问题。现有合成数据生成方法存在事实错误、长尾知识覆盖不足、知识结构简单化和输出同质化等缺陷,尤其在闭卷知识密集型问答任务中表现不佳。GraphGen通过知识图谱引导的合成数据生成,提升数据质量。

前人研究现状

  • 基于知识图谱(KG)的方法:早期依赖人工模板生成,存在多样性差的问题;后续引入RNN等模型,但难以保证事实一致性。
  • 纯LLM生成方法:依赖模型自生成数据,但存在幻觉和可控性差的问题(如Genie、SELF-QA)。
  • 混合方法:结合KG与LLM(如EntiGraph),但多聚焦通用文本生成而非SFT数据优化。
    当前水平:现有方法在知识覆盖深度、复杂推理支持和数据多样性上仍有显著不足。

论文的idea来源

灵感来源于:
- 知识图谱的结构化知识表示:解决LLM生成数据的碎片化问题
- 预期校准误差(ECE):量化模型对知识的置信度偏差,识别知识盲区
- 多跳推理需求:从生物医学/农业领域复杂QA任务中抽象出原子/聚合/多跳三类场景

具体方案

四阶段流程:  

* *知识构建:从原始文本抽取实体关系构建细粒度KG
4. 理解评估:通过ECE计算模型对KG三元组的置信度偏差,筛选高价值长尾知识
5. 图谱组织:基于k-hop邻域采样生成子图,控制子图复杂度(最大token数、采样策略)
6. QA生成:
- 原子QA:单实体/关系直接生成
- 聚合QA:融合子图信息生成连贯长答案
- 多跳QA:基于路径推理生成链式问题


伪代码:GraphGen核心流程

def GraphGen(source_texts, trainee_model):
    # Step 1: 知识图谱构建
    kg = build_knowledge_graph(source_texts)

    # Step 2: 理解度评估
    high_value_edges = []
    for edge in kg.edges:
        paraphrases = generate_paraphrases(edge.description)
        conf_scores = [trainee_model.confidence(p) for p in paraphrases]
        ece = compute_ece(conf_scores)  # 计算预期校准误差
        if ece > threshold:
            high_value_edges.append(edge)

    # Step 3: 子图采样
    synthetic_data = []
    for edge in high_value_edges:
        subgraph = k_hop_sampling(
            kg, 
            start_edge=edge, 
            max_hops=2, 
            strategy="max_loss"
        )

        # Step 4: QA生成
        if scenario == "atomic":
            qa = generate_atomic_qa(subgraph)
        elif scenario == "aggregated":
            summary = summarize_subgraph(subgraph)
            qa = (generate_question(summary), summary)
        elif scenario == "multi_hop":
            qa = generate_multihop_qa(subgraph)

        synthetic_data.append(qa)

    return synthetic_data

ECE是什么:

在GraphGen框架中,预期校准误差(Expected Calibration Error, ECE) 的计算原理是通过量化模型预测置信度与实际准确性之间的偏差,识别模型对知识的理解盲区。其核心思想是:一个完美校准的模型,其预测置信度应等于真实正确概率。以下是具体原理和计算步骤:


1. 核心思想

  • 校准目标:若模型对某知识的置信度为 p,则该知识的真实正确概率也应为 p
  • 误差定义:模型置信度与真实正确概率的差异即为校准误差
  • 应用场景:通过ECE识别模型高置信但低准确(过度自信)或低置信但高准确(保守预测)的知识点

2. 计算步骤

步骤1:生成正负样本

对知识图谱中每个三元组 R_i(例如“水在常温下是液体”):
- 正样本:生成 n 个同义改写 R_{i1}, R_{i2}, ..., R_{in}
(例:“液态是水的常温常态”)
- 负样本:生成 n 个否定形式 \neg R_{i1}, \neg R_{i2}, ..., \neg R_{in}
(例:“水在常温下是固体”)

步骤2:计算置信度

对每个样本,通过二元判断获取模型置信度:
- 正样本置信度:模型预测为“真”的概率 P(\text{True}|R_{ij})
- 负样本置信度:模型预测为“假”的概率 P(\text{False}|\neg R_{ij})

步骤3:综合置信度

对每个知识三元组 R_i,计算平均置信度:

C_{R_i} = \frac{1}{2n} \left( \sum_{j=1}^n P(\text{True}|R_{ij}) + \sum_{j=1}^n P(\text{False}|\neg R_{ij}) \right)

步骤4:计算校准误差

  • 真实正确概率:正样本的真实正确概率为1,负样本为0
  • 分箱统计:将置信度区间 [0,1] 划分为 B 个箱(如10个等宽区间)
  • 箱内误差:对每个箱 b,计算置信度均值 \text{conf}(b) 和准确率均值 \text{acc}(b)
  • ECE公式:

\text{ECE} = \sum_{b=1}^B \frac{N_b}{N} \left| \text{conf}(b) - \text{acc}(b) \right|

其中 N_b 是箱 b 中的样本数,N 是总样本数。


3. 在GraphGen中的具体应用

筛选高价值知识

  • 高ECE值:模型对某知识点置信度与真实正确率差异大 → 知识盲区
  • 优先生成:对高ECE的三元组生成QA对,针对性增强模型理解

理解损失(Loss_C)

通过交叉熵量化模型对知识的掌握差距:

\text{Loss}_C = -\frac{1}{2n} \sum_{j=1}^n \log P(\text{True}|R_{ij}) - \frac{1}{2n} \sum_{j=1}^n \log P(\text{False}|\neg R_{ij})

  • Loss_C高 → 模型对知识点理解不足 → 需重点训练

4. 直观示例

假设某知识点 R_i 的生成样本:
- 正样本置信度:[0.9, 0.8, 0.7](应全正确)
- 负样本置信度:[0.3, 0.2, 0.1](应全错误)

计算:

C_{R_i} = \frac{1}{6} (0.9+0.8+0.7 + (1-0.3)+(1-0.2)+(1-0.1)) = 0.85

若真实准确率为1(所有样本正确),则校准误差:

\text{ECE} = |0.85 - 1.0| = 0.15

表明模型对该知识点过度保守(置信度低于真实准确率)。


5. 核心意义

  • 数据高效性:通过ECE筛选长尾、高价值知识,减少冗余数据生成
  • 抗幻觉:强制模型对齐置信度与真实知识,降低合成数据错误率
  • 动态优化:训练过程中持续监控ECE,指导数据生成策略调整

通过这一机制,GraphGen实现了知识靶向增强,显著提升闭卷QA任务中模型的知识掌握深度。

thinking

场景就是针对SFT的数据合成,需要大量的针对垂直领域的QA对

其实这里比较自然的思路可能就是,针对每一个知识点,我们去让LLM针对这个知识点生成问答

通过知识图谱我们可以得到相对比较原子的知识点,针对这些知识点做问答。

让模型学会针对原子的知识点之后,就需要一些综合(比如做题也不会只考单一一个地方),这里就可以通过知识图谱把相关联的知识点给融合起来一起生成QA对。

并且为了做专项训练,针对模型不会的地方生成数据,筛选出长尾的细节知识,GraphGen会先计算模型的ECE:
* 即如果模型认为我能回答,并且确实回答正确的话,说明对这个知识点掌握的比较好
* 如果模型认为我能回答,并且回答不正确,或者认为不能回答但是回答正确的话,说明知识点掌握的不好,就可以针对这种知识点生成数据。

这里有两个insight:
* 利用ECE去寻找模型对知识点掌握不好的地方,并针对性训练
* 利用知识图谱的关联性质来生成多种类型的QA对。
* 这里从回答问题变成了生成QA,这个思路可以通用化
* 比如时序知识图谱上,从可以回答带时序的问题变成生成带有时序问题的QA对
* 或者在一些带有总结,或者概念的图上,针对概念,而非实体来进行QA

标签: 暂无
最后更新:2025年5月18日

sheep

think again

点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2021 heavensheep.xyz. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS