在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)提供了一个几何骨架——只需要少量精心放置的顶点,就能以更少的去噪步数和更高的质量重建出完整的形状,远优于密集采样。
这个项目问了一个跨界的问题:同样的原理能不能用来"锚定"语言模型?
| 锚点 = 形状的顶点 | 锚点 = 事实的嵌入向量(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基准测试,结果令人震撼:
| 无锚点 | 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在多跳问题上的表现困扰过
- 想探索"非自回归生成"这个前沿方向
- 对大模型与几何学的交叉感兴趣
那这个项目值得你花一个晚上跑一跑实验。
从图形学到大语言模型,从网格细分到语义导航——有时候,最惊艳的突破,恰恰来自最意想不到的跨界。
网硕互联帮助中心




评论前必须登录!
注册