我构建了一个开源知识图谱管道,结合混合检索以改进LLM多跳推理 [P]

Reddit r/MachineLearning 工具

摘要

一个开源的全栈管道,从原始文本构建知识图谱,使用混合搜索(密集向量+稀疏+图遍历)解决LLM中的多跳推理问题,并通过倒数排名融合和交叉编码器对结果进行重排序。

大家好,我构建了一个开源的全栈管道(Django + React),它从原始文本构建知识图谱,检测主题社区,并使用混合搜索解决标准向量检索中的“中间丢失”问题。**管道流程:** 1. **摄入与分块:** 对原始文本进行清洗、解析,并分割成重叠的块以保留局部上下文。 2. **图构建:** 使用`spaCy`从每个块中提取命名实体。利用`NetworkX`构建加权共现图,映射哪些实体共同出现,并将它们链接到源块。 3. **社区检测:** 使用`greedy_modularity_communities`将图划分为主题聚类。对于每个聚类,采样随机文本块并发送至LLM以生成高层摘要(避免“枢纽节点”偏差)。 4. **索引:** 将所有块嵌入到密集向量存储中,并在同一语料库上构建稀疏BM25索引。 5. **混合检索:** 查询时,系统执行双重搜索(密集向量 + BM25)。同时,从提示中提取实体,遍历图的一阶邻居,并检索其关联的块。 6. **融合与重排序:** 本地和全局(社区摘要)结果被合并、去重,并使用**倒数排名融合(RRF)**进行评分。然后,前K个候选由交叉编码器重新评分以获得最大精度。 7. **LLM合成:** 最终精心挑选的上下文被传递给LLM,并通过严格提示生成简洁、结构良好且附带引用的答案。 **为何有效:** 标准向量搜索在处理多跳查询时会失败,例如:>谁下令处决了Sansa的父亲,那个人最终是如何死的?通过遍历图(*Sansa -> Ned -> Joffrey -> Poisoning*),系统弥合了不连续文本块之间的差距,并综合出正确答案。 **GitHub:** [https://github.com/mohammad-majoony/graphrag-studio](https://github.com/mohammad-majoony/graphrag-studio) 欢迎反馈!谢谢。
查看原文

相似文章

基于外部子图生成的大语言模型逐步推理增强

arXiv cs.CL

本文提出了SGR框架,通过查询相关的子图生成将外部知识图谱与大语言模型相结合,融合基于Cypher的推理与协同推理集成,从而增强大语言模型的逐步推理能力。在CWQ、WebQSP、GrailQA和KQA Pro上的实验表明,该框架相比标准提示方法和知识增强基线具有更高的推理准确性。