云计算百科
云计算领域专业知识百科平台

RAG检索的是文档,但如果问题需要跨越多个概念才能推理出答案,简单的文档检索还能不能架起这座桥梁?

在RAG(检索增强生成)已经成为解决大模型幻觉问题的主流方案时,有一个项目提出了一个直击本质的质疑:RAG检索的是文档,但如果问题需要跨越多个概念才能推理出答案,简单的文档检索还能不能架起这座桥梁?

项目地址:https://github.com/dfytensor/GSG-LLM


一、RAG的盲区:当检索无法"架桥"

RAG的思路很直观:用户提问 → 检索相关文档 → 把文档塞进上下文 → 让LLM生成答案。

这个流程在"巴黎是哪个国家的首都"这类单跳(Single-hop) 问题上表现良好——检索"巴黎"就能拿到答案。

但现实中的问题往往是多跳(Multi-hop) 的:

“那位在2020年获得诺贝尔文学奖的美国女诗人的第一部诗集是什么?”

这个问题需要先检索"2020年诺贝尔文学奖得主"→ 得到"露易丝·格丽克"→ 再检索"格丽克的第一部诗集"→ 得到《头生子》。这是两个检索步骤的串联。

传统的RAG是一次性检索,它检索的是文档,而不是概念之间的几何关系。当问题需要跨越多个概念时,一次性检索往往抓不住那条"推理链"。

GSG-LLM 项目给出的答案是:把文本语义空间变成一个几何流形,用"锚点"(Anchors)来构建知识的骨架,然后通过"细分"(Subdivision)逐步逼近答案。

这不是在已有RAG上修修补补——它是从几何学的角度重新思考了"LLM应该如何检索和推理"。


二、GSG的灵感来源:从图形学到大语言模型

GSG全称 Geometric Subdivision Generation(几何细分生成) ,这个概念最早出现在图像和网格合成领域。

在图形学中,GSG发现了一个规律:锚点(Anchors)提供了一个几何骨架——只需要少量精心放置的顶点,就能以更少的去噪步数和更高的质量重建出完整的形状,远优于密集采样。

这个项目问了一个跨界的问题:同样的原理能不能用来"锚定"语言模型?

图形学GSGGSG-LLM
锚点 = 形状的顶点 锚点 = 事实的嵌入向量(Fact Embeddings)
细分 = 细化网格 细分 = 从粗到细的检索 + 推理
校正 = 去噪步骤 校正 = 凸包(Convex-hull)logit偏置
20步 = DDPM 500步 少量锚点token = 完整生成

核心洞察: 知识的语义空间就像一个几何流形,不需要检索所有相关文档,只需要找到这个空间里的"锚点"(关键概念节点),然后通过"细分"逐步逼近目标区域——推理过程就变成了在语义几何空间中的导航。


三、三大核心创新:GSG是怎么做到的?

exp_gsg_anchor_llm.py 是这个项目的核心贡献。与简单的RAG不同,它引入了三项创新:

3.1 预学习的锚点流形(Pre-learned Anchor Manifold)

传统RAG检索的是文档。GSG检索的是锚点——通过K-means Medoids + GSG细分(中点锚点)+ 相似性剪枝,在知识库的嵌入空间上构建出一组锚点。

这些锚点不是原始文档,而是知识拓扑结构的"顶点" ——它们代表了语义空间中最核心、最具代表性的概念节点。

3.2 凸包Logit偏置(Convex-hull Logit Bias)

GSG不是简单地用检索结果填充上下文。它在生成过程中,将token的logits柔和地偏置到锚点词汇表方向,将生成约束在锚点定义的语义凸包内,而不是硬性掩码。

通俗地说:模型可以自由发挥,但不能跑出锚点围成的"语义围栏" ——这既保证了多样性,又防止了幻觉。

3.3 渐进式细分(Progressive Subdivision)

这是GSG最巧妙的设计:8 → 4 → 2 → 答案。

每一步都用上一步的输出作为精化后的查询,检索更细粒度的锚点。这就像在地图上导航:先定位到国家→再定位到城市→再定位到街道→最后找到门牌号。每一步都在缩小搜索空间,每一步都在逼近正确答案。


四、实验结果:多跳场景下的降维打击

项目在Qwen2.5-3B上进行了严格的QA基准测试,结果令人震撼:

策略单跳F12跳F13跳F1Token数
无锚点 0.300 0.188 0.174 ~15
朴素RAG 0.302 0.181 0.179 ~15
GSG 2步 0.313 0.175 0.199 ~15
GSG 3步 0.378 0.219 0.237 ~12

几个关键发现:

  • 跳数越多,优势越大:在3跳问题上,GSG 3步的F1(0.237)比无锚点(0.174)提升了36%,比朴素RAG(0.179)提升了32%。

  • 用更少的token,打更高的分:GSG 3步只用~12个token,比基线少了20%。锚点压缩了搜索空间,让模型用更少的计算拿到更好的结果。

  • 优势随跳数增长:这正是GSG的理论预测——锚点压缩了搜索空间,跳数越多,压缩效果越明显。

  • 一句话总结:在需要多步推理的场景下,GSG用更少的token,拿到了远超RAG的准确率。


    五、更激进的方向:彻底告别自回归

    GSG-LLM还不止于"更好的RAG"。项目中还有一个更 ambitious 的探索——完全跳过逐token的自回归生成:

    用户提示 → VAE编码 → 检索锚点 → 插值 → Langevin校正 → VAE解码 → 文本

    这个非自回归管线的三步走:

    • Step 1(exp_vae_step1.py):训练一个Transformer-VAE,将文本 ⇌ 潜在空间z(256维)
    • Step 2(exp_vae_step2.py):构建1000锚点的流形 + 通过去噪分数匹配(DSM)训练潜在分数网络
    • Step 3(exp_vae_step3.py):在同一个VAE上对比GSG解码 vs 自回归解码——比较新颖性、多样性、BLEU、熵

    这意味着什么?意味着生成不再是一个字一个字往外蹦,而是在语义的潜在空间里直接"跳跃"到答案区域,然后一次性解码出完整文本。

    这是对"大模型必须自回归"这个基本假设的挑战。


    六、快速上手

    环境要求

    • Python ≥ 3.10
    • CUDA 12.4 GPU(推荐)
    • PyTorch ≥ 2.6, transformers ≥ 4.40

    一键安装

    uv sync # 自动安装 torch cu124, transformers, sklearn 等依赖

    运行基线实验

    python exp_anchor_llm.py # 打印结果表格并保存 JSON

    结果会自动写入 experiments/*.json。

    已测试的基座模型

    • Qwen2.5-0.5B-Instruct
    • Qwen2.5-3B-Instruct
    • Nanbeige 4.2-3B(没错,就是上一篇文章里的那个3B模型)

    七、写在最后:当大模型开始"几何地思考"

    RAG很强大,但它本质上是在做文本匹配——找相似的文档,塞进上下文。

    GSG在做的是另一件事:把知识的语义空间当成一个几何流形,用锚点勾勒出它的骨架,然后用"细分"这个几何操作来完成推理。

    这个视角的转换,带来的不仅是性能的提升——它让我们重新思考了"检索"和"推理"之间的关系:

    • RAG:检索文档 → 让LLM自己推理
    • GSG:检索概念(锚点)→ 在语义空间中导航 → 逐步逼近答案

    在多跳推理场景下,后者显然更符合人类认知的方式——我们不会一次性翻遍所有资料,而是先定位大致方向,再逐步缩小范围,最后精准锁定答案。

    GSG-LLM把这个过程数学化了、工程化了、开源了。


    项目地址:https://github.com/dfytensor/GSG-LLM

    如果你:

    • 被RAG在多跳问题上的表现困扰过
    • 想探索"非自回归生成"这个前沿方向
    • 对大模型与几何学的交叉感兴趣

    那这个项目值得你花一个晚上跑一跑实验。

    从图形学到大语言模型,从网格细分到语义导航——有时候,最惊艳的突破,恰恰来自最意想不到的跨界。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » RAG检索的是文档,但如果问题需要跨越多个概念才能推理出答案,简单的文档检索还能不能架起这座桥梁?
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!