HippoRAG是2024年5月的一篇论文《HippoRAG: Neurobiologically Inspired Long-Term Memory for Large Language Models》(github),它受人脑长期记忆的启发(Hippo是海马体英文单词的前缀),用知识图谱(KG)来存储知识,并用检索编码器和个性化PageRank来检索回答问题所需的上下文,再让LLM根据上下文回答问题。
海马体记忆索引理论(Hippocampal Memory Indexing Theory)提供了对人类长期记忆中涉及的组件和电路的功能描述。提出者Teyler和Discenna认为,人类长期记忆和三个组件有关,分别是新皮层(Neocortex)、海马体(Hippocampus)和海马旁回区域(Parahippocampal regions),这三个组件协同工作,使得人类能够存储大量的世界知识并持续整合新的体验,而不会丢失先前的记忆。这三个组件一起完成两个主要目标pattern separation(确保不同的感知经验是独特的)和pattern completion(使得部分刺激能检索到完整记忆)。
HippoRAG通过模仿人脑组件的功能来增强LLMs的知识整合能力,其过程如下:
离线索引阶段:
- 让LLM充当新皮层的角色,从文本中抽取出知识图谱(KG)三元组,而知识图谱相当于海马体索引。在让LLM提取三元组时,不定义schema,三元组提取过程分为两步,先让LLM提取文本中的实体,再让LLM根据提取的实体得到最终的三元组,两个prompt都采用了1-shot技巧。
- 检索编码器(retrieval encoder)会充当海马旁回区域的角色,HippoRAG用检索编码器来判断两个实体表征之间的余弦相似度,如果余弦相似度大于阈值 τ \tau τ,则在两个实体之间添加一条边。
- 定义矩阵大小为 ∣ N ∣ × ∣ P ∣ |N| \times |P| ∣N∣×∣P∣的矩阵 P \mathbf{P} P来记录每一个实体在原始文本中出现的次数。(|N|是实体数, |P|是文本数)
在线检索阶段:
- 对于一个query,先让LLM提取问题中的查询实体(query named entities),prompt如下:
- 用检索编码器基于相似度从KG中检索出与第一步的查询实体最相似的topK个节点,这些节点被称为查询节点(query nodes)。
- 在图谱上应用个性化PageRank(Personalized PageRank,PPR),算法初始化时,N个节点的概率分布为 n ⃗ \vec{n} n,其中第二步的查询节点的概率相同,其他节点的概率为0。PPR算法得到的N个节点的最终概率分布为 n ′ ⃗ \vec{n^{\prime}} n′,将 n ′ ⃗ \vec{n^{\prime}} n′与离线索引时定义的矩阵 P \mathbf{P} P相乘得到每个文本的排序分数 p ⃗ \vec{p} p。
此外为了提高检索性能,借鉴了单词重要性如逆文档词频IDF的概念,但考虑到IDF计算上的复杂性,使用了node specificity这个概念来代替IDF,一个节点i的node specificity为 s i = ∣ P i ∣ − 1 s_i = |P_i|^{-1} si=∣Pi∣−1,P是节点i提取来源的文档集合。在应用PPR算法之前,将查询节点的概率 n ⃗ \vec{n} n乘以 s i s_i si。这意味在检索时不仅仅考虑邻居也考虑节点本身的重要性。
总结
HippoRAG也是一种基于图结构来增强RAG的方法,它在检索上下文时很特别地使用了个性化PageRank,所以它对于解决多跳问答有一定的帮助。