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. 正文

HippoRAG

2025年2月9日 165点热度 0人点赞 0条评论

这篇论文介绍了一种名为HippoRAG的新型检索框架,旨在解决大语言模型(LLMs)在整合新知识时的效率问题。以下是文章的核心内容概述:


核心创新:受神经生物学启发的长期记忆机制

HippoRAG的灵感来源于人类大脑的海马索引理论。人脑通过海马区(负责关联索引)和新皮质(负责存储具体记忆)的协作实现高效记忆整合。HippoRAG模仿这一机制:
- 海马索引的模拟:构建一个开放式的知识图谱(KG),存储文本中的实体和关系。
- 新皮质的模拟:利用LLM解析文本并提取知识。
- 个性化PageRank(PPR)算法:模仿海马的模式补全功能,通过图搜索关联分散的知识片段。


技术亮点

  1. 离线索引:
    • 使用LLM从文本中提取三元组(实体-关系-实体),构建知识图谱。
    • 引入同义词边(通过检索编码器检测相似实体),增强图谱的关联性。
  2. 在线检索:
    • 从查询中提取关键实体(如“Stanford教授”和“Alzheimer’s”)。
    • 在知识图谱中运行PPR算法,从查询实体出发扩散概率,找到相关子图。
    • 根据节点权重(类似逆文档频率)和关联路径,快速定位相关段落。
  3. 单步多跳检索:
    • 传统RAG需多次检索迭代,而HippoRAG通过一次图搜索即可完成多跳推理,效率提升6-13倍,成本降低10-30倍。

代码


使用方式也比较简单,提供的是rank_docs做retrieval

Index

这里option的dpr指的是Dense Passage Retrieval,就是指代传统的向量检索方法

数据处理有两种,要么是用colbert做检索,要么是用hf上的retrieval encoder做,也就是常见的向量检索方法

以colbert这个为例子:setup_hipporag_colbert.sh

openie_with_retrieval_option_parallel.py
named_entity_extraction_parallel.py
来做实体提取

然后create_graph.py创建图

colbertv2_knn然后跑knn,接着又通过create_graph创建图了

最后调用colbertv2_indexing.py

  • openie_with_retrieval_option_parallel
    • 就是用大模型做实体提取
    • 他会先做NER,也就是named entity recognition,提取出所有的实体
    • 然后再通过实体和原始的文档,把KG抽取出来。得到三元组
  • named_entity_extraction_parallel
    • 只做实体提取
    • 这里是针对数据集的query做提取,也就是关键词提取
  • create_graph
    • 读取三元组,创建图
    • 这里会基于colbert做的knn,做一下近似边的连接。相当于做实体消重了

Query

这个方法是HippoRAG系统的核心排序算法,通过结合语义检索和知识图谱推理来实现文档排序。主要流程分为四个阶段:

实体提取与链接
query_ner_list = self.query_ner(query) # 命名实体识别
if使用ColBERTv2:
all_phrase_weights, linking_score_map = self.link_node_by_colbertv2()
else: # DPR
all_phrase_weights, linking_score_map = self.link_node_by_dpr()
使用LLM提取查询中的关键实体(如人物、地点等)
通过语义检索将实体链接到知识图谱节点,生成初始权重向量
图谱传播计算
if graph_alg 'ppr':
ppr_phrase_probs = self.run_pagerank_igraph_chunk()
elif graph_alg
'neighbor':
... # 邻居扩展算法
使用个性化PageRank算法在知识图谱上传播实体权重
通过三层矩阵转换(phrase->fact->doc)计算文档相关性概率
支持多种图算法(PPR/邻居扩展/路径查找)
多策略分数融合
if 实体置信度低:
doc_prob = 混合PPR分数和检索分数
else:
doc_prob = 纯PPR分数
动态权重调整:根据实体识别置信度决定融合比例
检索分数来自ColBERTv2/DPR的语义匹配结果
混合使用min-max归一化保证分数尺度一致
结果优化输出
sorted_doc_ids = np.argsort(doc_prob)[::-1] # 降序排列
logs收集:
- 实体识别结果
- 节点链接分数
- 图谱关系路径
- 文档包含的关键短语
最终返回top_k文档及其解释性日志
日志系统帮助分析排序决策过程
关键设计特点:

混合检索架构:
第一层:基于语义的密集检索(ColBERTv2/DPR)
第二层:基于知识图谱的推理增强
通过doc_ensemble参数控制混合比例
知识图谱的三层表示:
短语层(phrase)--关系--> 事实层(fact)--包含--> 文档层(doc)
使用稀疏矩阵存储层级关系(docs_to_facts_mat等)
矩阵乘法实现概率的高效传播
自适应权重机制:
node_specificity:根据短语文档频率反比例加权
weight = 1 / self.phrase_to_num_doc[phrase_id]
recognition_threshold:动态调整图谱权重占比
图算法扩展性:
支持PPR、多跳邻居、路径查找等算法
通过graph_alg参数切换不同传播策略
典型应用场景:
当查询包含明确实体(如"爱因斯坦的相对论")时,系统会:

识别"爱因斯坦"和"相对论"实体
在知识图谱中找到相关节点
沿图谱关系传播权重
找到同时包含这两个概念及其关联概念的文档
这种设计特别适合需要深层语义理解的复杂查询场景,相比传统检索方法能更好地捕获概念间的隐含关联。

IRCoT

他们还测试了IRCoT的方式


就是搞了多轮,之前是做一次rank_doc,这个就是每次retrieval完,会reason一下,拿到新问题

标签: 暂无
最后更新:2025年2月9日

sheep

think again

点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2021 heavensheep.xyz. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS