[论文笔记]MEMORAG: MOVING TOWARDS NEXT-GEN RAG VIA MEMORY-INSPIRED KNOWLEDGE DISCOVERY

引言

今天带来又一篇记忆RAG的笔记——MEMORAG: MOVING TOWARDS NEXT-GEN RAG VIA MEMORY-INSPIRED KNOWLEDGE DISCOVERY

为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。

检索增强生成利用检索工具访问外部数据库,从而通过优化上下文来提升大语言模型的生成质量。然而,现有的检索方法本质上存在局限,因为它们只能在明确的查询和规范的知识之间进行相关性匹配,无法处理涉及模糊信息需求或非结构化知识的任务。因此,现有的RAG系统主要对简单的问答任务有效。

在这项工作中,我们提出了MemoRAG,一种通过长期记忆增强的检索增强生成新范式。MemoRAG采用了双系统架构。一方面,它使用轻量但上下文窗口长(longrange)的LLM来构建数据库的全局记忆。一旦任务出现,它生成初步答案,提示检索工具在数据库中定位有用的信息。另一方面,它利用一个昂贵但表达力强的LLM,根据检索到的信息生成最终答案。在这一通用框架的基础上,我们进一步通过增强提示机制和记忆能力来优化MemoRAG的性能。

1. 总体介绍

Refer to caption

图1:标准RAG与MemoRAG在处理需要对整个数据库进行高级理解的查询时的比较,使用《哈利·波特》系列作为数据库。在左图中,标准RAG由于输入查询的隐含性质,难以准确定位所需的证据,从而导致答案不够准确。在右图中,MemoRAG在整个数据库上构建了一个全局记忆。当接收到查询时,MemoRAG首先回忆相关线索,从而能够检索有用的信息,并最终生成一个精确且全面的答案。

尽管大语言模型的基本能力已迅速提升,但由于其固有的局限性,它们在实践中仍面临重大挑战。例如,由于缺乏适当的知识,LLM可能会生成虚假信息或过时的内容。此外,由于上下文窗口的限制,它们在处理用户的历史互动信息过载时也面临困难。检索增强生成作为一种有前景的范式,已被提出用于解决这些挑战。

传统的RAG系统通常要求明确的信息需求和规范的知识。因此,它们的应用主要限制于直接的问答任务。然而,许多现实世界中的问题并非如此,这些问题的信息需求往往模糊,而外部知识则是非结构化的。例如,一个读者可能希望理解书中主要角色之间的相互关系。为了解决这个问题,系统需要首先识别主要角色的名称,然后找到这些名称共存的部分,从中推断出它们的相互关系。换句话说,这需要根据书中的上下文知识理解信息需求,然后才能有效地检索相关信息。

为了解决上述挑战,我们提出了一种名为MemoRAG的新框架,如图1所示。该框架引入了一个智能接口,将任务与数据库中的相关知识连接起来。对于每个提出的任务,MemoRAG会提示其记忆模块生成检索线索。这些线索本质上是基于数据库压缩表示(即记忆)生成的草拟答案。尽管可能存在虚假细节,但这些线索明确揭示了任务的基本信息需求。此外,它们也可以直接对应到现实中的源信息。通过使用这些线索作为查询,MemoRAG可以有效地从数据库中检索必要的知识。

根据上述机制,记忆模块应具备以下两个特点:1)记忆性:能够记住整个数据库的全局信息;2)指导性:提供有用的线索,以便全面检索所有所需的知识。因此,我们提出了以下设计方案来优化MemoRAG的性能。首先,我们引入了双系统架构,使用一个轻量级的LLM作为记忆,另一个重型LLM用于执行检索增强生成。轻量级LLM必须具备成本效益且具备较长上下文能力,能够在有限的计算预算内容纳整个数据库。其次,我们对记忆进行微调,使生成的线索能够实现优化的检索质量。

为了评估MemoRAG的有效性,我们开发了一个综合基准测试,称为ULTRADOMAIN,其中包括来自不同领域的复杂RAG任务,具有较长的输入上下文。这些查询中的一个共同挑战是相关知识不能通过简单搜索直接检索。尽管传统的RAG方法在处理这些复杂任务时存在困难,MemoRAG通过基于精确检索的知识生成高质量答案,表现出优越的性能。此外,MemoRAG在传统的问答任务中也保持了高度竞争力,其基于线索的检索方法继续提供显著优势。

2. MEMORAG

标准RAG框架可以简洁地表示为:

Y = Θ ( q , C ∣ θ ) , C = Γ ( q , D ∣ γ ) , (1) \mathcal{Y}=\Theta(q,\mathcal{C}\mid\theta),\quad\mathcal{C}=\Gamma(q,\mathcal{D}\mid\gamma), \tag 1 Y=Θ(q,Cθ),C=Γ(q,Dγ),(1)

其中, Θ ( ⋅ ) \Theta(\cdot) Θ() Γ ( ⋅ ) \Gamma(\cdot) Γ() 分别表示生成模型和检索模型。 q q q 代表输入查询, C \mathcal{C} C 是从相关数据库 D \mathcal{D} D 中检索到的上下文,而 Y \mathcal{Y} Y 是最终答案。在许多实际场景中,输入查询 q q q 通常包含隐含的信息需求,这对依赖词汇匹配或语义匹配的标准检索器来说可能难以完全理解。这一限制突显了设计一个中间模块以弥合实际场景中出现的语义差距的必要性。

在本文中,我们提出了MemoRAG,它利用记忆模型 Θ m e m ( ⋅ ) \Theta_{\mathrm{mem}}(\cdot) Θmem() 作为输入查询 q q q 和相关数据库 D \mathcal{D} D 之间的语义桥梁。形式上,这一过程可以表示为:

Y = Θ ( q , C ∣ θ ) , C = Γ ( y , D ∣ γ ) , y = Θ m e m ( q , D ∣ θ m e m ) . (2) \begin{array}{r}{\mathcal{Y}=\Theta(q,\mathcal{C}\mid\theta),\quad\mathcal{C}=\Gamma(y,\mathcal{D}\mid\gamma),\quad y=\Theta_{\mathrm{mem}}(q,\mathcal{D}\mid\theta_{\mathrm{mem}}).}\end{array} \tag 2 Y=Θ(q,Cθ),C=Γ(y,Dγ),y=Θmem(q,Dθmem).(2)

其中, y y y 代表一个可能不完全或缺乏细节的初步答案,作为一组答案线索,指导从 D \mathcal{D} D 中检索最相关的内容。记忆模型 Θ m e m ( ⋅ ) \Theta_{\mathrm{mem}}(\cdot) Θmem() 旨在建立数据库 D \mathcal{D} D 的全局记忆。在实践中,任何能够有效处理超长上下文的语言模型都可以作为记忆模型。例如,采用键值压缩技术的7B语言模型可能是一个合适的选择。尽管这样的模型可能不会生成完全详细和准确的答案,但它可以生成一个粗略的轮廓,有助于定位正确的答案。

初步答案 y y y 的形式根据每个任务的具体要求进行调整。例如,在输入查询隐含的问答任务中,初步答案 y y y 可能包含中间步骤,如生成更明确的替代查询以及来自数据库的具体文本证据,这些证据有助于最终答案的生成。此外,对于不涉及显式查询的任务,如总结,初步答案可能包括从上下文中提取的关键点或概念,这些对于组建一个连贯准确的总结至关重要。

系统实现 MemoRAG 的系统实现可以在此仓库中找到。目前,我们已经发布了两个记忆模型:memorag-qwen2-7b-inst 和 memorag-mistral-7b-inst,分别基于 Qwen2-7B-Instruct 和 Mistral-7B-Instruct-v0.2。在 MemoRAG 中,记忆模块 Θ m e m ( ⋅ ) \Theta_{\mathrm{mem}}(\cdot) Θmem() 可以是任何设计用来高效处理超长上下文的模型,目前系统采用了标记压缩技术,使得可以高效处理扩展的上下文。

这两个记忆模型支持的压缩比率从2到16不等,使其能够管理不同的上下文长度。例如,当应用16的压缩比时,memorag-qwen2-7b-inst 可以处理最多 128 K  ⁣ ×  ⁣ 16 128\mathrm{K}\!\times\!16 128K×16 标记。在实际应用中,memorag-mistral-7b-inst 可以处理最多150K标记的上下文,而memorag-qwen2-7b-inst 可以处理最多600K标记的上下文。在处理更长的上下文时,它们的性能会有所下降。

MemoRAG 可以将各种检索方法集成到系统中,包括稀疏检索、密集检索和重新排序。目前的实现默认使用密集检索。

同样,MemoRAG 可以集成任何生成语言模型作为生成器。由于记忆模型依赖于其底层模型,MemoRAG 使用记忆模块的底层模型作为默认生成器。例如,当使用 memorag-mistral-7b-inst 作为记忆模型时,MemoRAG 默认为 Mistral-7B-Instruct-v0.2 作为生成模型。

MemoRAG 系统可以在各种 GPU 上部署,从较为经济的选项到高端选项。使用 NVIDIA T4 16GiB 时,MemoRAG 可以处理具有68K标记长度的数据库。使用 NVIDIA A100 80GiB 时,该系统能够处理长度达到一百万标记的数据库。

2.1 记忆模块

在本文中,我们提出了一种灵活的模型架构,专门设计用于促进记忆的形成。记忆模型逐步将原始输入标记压缩成一个显著较小的记忆标记集,同时保留基本的语义信息。具体而言,假设 X \mathcal{X} X 包含 n n n 个标记,即 X = { x 1 , ⋯   , x n } {\mathcal{X}}={\{x_1,\cdots,x_{n}\}} X={x1,,xn},并由一个基于 Transformer 的模型 Θ ( ⋅ ) \Theta(\cdot) Θ() 处理。每一层的注意力交互可以表示为:

Q = X W Q , K = X W K , V = X W V , (3) \boldsymbol{\mathcal{Q}}=\boldsymbol{\mathcal{X}}\boldsymbol{W}_{\mathcal{Q}},\quad\boldsymbol{\mathcal{K}}=\boldsymbol{\mathcal{X}}\boldsymbol{W}_{\mathcal{K}},\quad\boldsymbol{\mathcal{V}}=\boldsymbol{\mathcal{X}}\boldsymbol{W}_{\mathcal{V}}, \tag 3 Q=XWQ,K=XWK,V=XWV,(3)

A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V ,    Θ ( X ) = A t t e n t i o n ( Q , K , V ) , (4) \mathrm{Attention}(\mathcal{Q},\mathcal{K},\mathcal{V})=\mathrm{softmax}\left(\frac{\mathcal{Q K}^{T}}{\sqrt{d_{k}}}\right)\mathcal{V},\;\Theta(\mathcal{X})=\mathrm{Attention}(\mathcal{Q},\mathcal{K},\mathcal{V}), \tag 4 Attention(Q,K,V)=softmax(dk QKT)V,Θ(X)=Attention(Q,K,V),(4)

其中, W Q W_{\mathcal{Q}} WQ W K W_{\mathcal{K}} WK W V W_{\mathcal{V}} WV 分别是查询、键和值的投影权重矩阵, d k d_{k} dk 是键向量的维度。经过多层 Transformer 的深度注意力交互后, X \mathcal{X} X 对输入序列 X X X 的理解变得全面。这类似于人类的短期记忆,虽然准确,但只能包含最近感知的内容。我们将这一过程记为 X = Θ ( X ) \pmb{\mathcal X}=\Theta(\mathcal{X}) XXX=Θ(X),其中 X \pmb{\mathcal X} XXX 指的是输入序列 X \mathcal{X} X 的隐藏状态, Θ ( ⋅ ) \Theta(\cdot) Θ() 可以是任何预训练的 LLM。

为了实现从短期记忆到长期记忆的转换,我们引入记忆标记 x m x^{m} xm,作为 LLM 中长期记忆的信息载体。具体来说,假设底层 LLM Θ ( ⋅ ) \Theta(\cdot) Θ() 的工作上下文窗口长度为 l l l,在每个上下文窗口后,我们添加 k k k 个记忆标记,即:

X = { x 1 , ⋯   , x l , x 1 m , ⋯   , x k m , x l + 1 , ⋯   } , k ≪ l . (5) \mathcal{X}=\{x_{1},\cdots,x_{l},x_{1}^{m},\cdots,x_{k}^{m},x_{l+1},\cdots\},\quad k\ll l. \tag 5 X={x1,,xl,x1m,,xkm,xl+1,},kl.(5)

在由公式(4)定义的注意力交互过程中,我们初始化另一组权重矩阵 W Q m W_{\mathcal{Q}^{m}} WQm W K m W_{\mathcal K^{m}} WKm W V m W_{\mathcal{V}^{m}} WVm,专门用于形成记忆。因此,我们有:

Q m = X W Q m , K m = X W K m , V m = X W V m , (6) {\mathcal Q}^{m}=\mathcal X \pmb{W}_{\mathcal{Q}^{m}},\quad\mathcal{K}^{m}=\mathcal{X}\pmb{W}_{\mathcal{K}^{m}},\quad\mathcal{V}^{m}=\mathcal{X}\pmb{W}_{\mathcal{V}^{m}}, \tag 6 Qm=XWWWQm,Km=XWWWKm,Vm=XWWWVm,(6)

A t t e n t i o n ( Q , K , V ) = s o f t m a x ( [ Q ; Q m ] [ K ; K m ; K c + + e m ] T d k ) [ V , V m , V c a c h e m ] , (7) \mathrm{Attention}(\mathcal{Q},\mathcal{K},\mathcal{V})=\mathrm{softmax}\left(\frac{[\mathcal{Q};\mathcal{Q}^{m}][\mathcal{K};\mathcal{K}^{m};\mathcal{K}_{\mathrm{c++e}}^{m}]^{T}}{\sqrt{d_{k}}}\right)[\mathcal{V},\mathcal{V}^{m},\mathcal{V}_{\mathrm{cache}}^{m}], \tag 7 Attention(Q,K,V)=softmax(dk [Q;Qm][K;Km;Kc++em]T)[V,Vm,Vcachem],(7)

其中, Q m \mathcal{Q}^{m} Qm K m \mathcal{K}^{m} Km V m \mathcal{V}^{m} Vm 分别指记忆标记 x m x^{m} xm 的查询、键和值。 K c a c h e m \mathcal{K}_{\mathrm{cache}}^{m} Kcachem V c a c h e m \mathcal{V}_{\mathrm{cac h e}}^{m} Vcachem 指的是之前记忆标记的 KV 缓存。我们将记忆标记记为 x m x^{m} xm,并将转换过程记为 X m   =   Θ m e m ( X ) {\pmb {\mathcal X}}^{m}\ =\ \Theta_{\mathrm{mem}}({\pmb {\mathcal X}}) XXXm = Θmem(XXX)。对于 l l l 个原始标记 { x 1 , ⋯   , x l } \{x_{1},\cdots,x_{l}\} {x1,,xl},经过公式(7)定义的多个注意力过程后,它们被编码为隐藏状态 { x 1 , ⋯   , x l , x 1 m , ⋯   , x k m } \{\pmb{x}_{1},\cdots,\pmb{x}_{l},\pmb{x}_{1}^{m},\cdots,\pmb{x}_{k}^{m}\} {xxx1,,xxxl,xxx1m,,xxxkm},其中 { x 1 , ⋯   , x l } \{\pmb{x}_{1},\cdots,\pmb{x}_{l}\} {xxx1,,xxxl} 表示原始标记的隐藏状态, { x 1 m , ⋯   , x k m } \{\pmb{x}_{1}^{m},\cdots,\pmb{x}_{k}^{m}\} {xxx1m,,xxxkm} 表示记忆标记的隐藏状态。记忆形成后, l l l 个原始标记的 KV 缓存会被丢弃,类似于人类记忆中的遗忘过程。经过 n n n 个上下文窗口,MemoRAG 会逐步将 X \mathcal{X} X 中的所有原始标记转换为记忆标记。因此,我们有 Θ ( X )    →    Θ m e m ( X )    =    { x 1 , 1 m , ⋯   , x 1 , k m , ⋯   , x n , k m } \Theta(\mathcal{X})\;\to\;\Theta_{\mathrm{mem}}(\pmb{\mathcal X})\;=\;\{\pmb{x}_{1,1}^{m},\cdots,\pmb{x}_{1,k}^{m},\cdots,\pmb{x}_{n,k}^{m}\} Θ(X)Θmem(XXX)={xxx1,1m,,xxx1,km,,xxxn,km},这代表了从输入 X \mathcal X X中形成的全局记忆 X m \pmb{\mathcal X}^{m} XXXm​。

2.2 记忆模块的训练

如前所述,我们为将记忆令牌 x m x_{m} xm 映射为查询、键和值向量(如公式(7)所示)而初始化了另一组权重矩阵 W Q m W_{\mathcal{Q}^{m}} WQm W K m W_{\mathcal {K}^{m}} WKm W V m W_{\mathcal{V}^{m}} WVm。这些新初始化的权重矩阵在训练过程中会被更新,而底层 LLM 的参数保持冻结。

我们在两个阶段训练新初始化的参数:(1)预训练:我们使用从 RedPajama 数据集中随机采样的长上下文来预训练模型(,使 MemoRAG 的记忆模块学会如何从原始上下文中形成记忆;(2)监督微调(SFT):我们使用任务特定的 SFT 数据,使 MemoRAG 能够根据形成的记忆生成任务特定的线索。

尽管具有挑战性,但准确记住记忆中的细节仍然是任何人类记忆增强训练的终极目标。MemoRAG 中记忆模型的训练目标也追求这一目标,可以表述为:

* ⁡ m a x Θ m e m P ( x i , j ∣ x 1 , 1 m , ⋯   , x i − 1 , k i − 1 m , x i , 1 , ⋯   , x i , j − 1 ) . (8) \operatorname*{max}_{\Theta_{\mathrm{mem}}}\mathcal{P}\big(x_{i,j}\mid x_{1,1}^{m},\cdots,x_{i-1,k_{i-1}}^{m},x_{i,1},\cdots,x_{i,j-1}\big). \tag 8 *maxΘmemP(xi,jx1,1m,,xi1,ki1m,xi,1,,xi,j1).(8)

公式(8)的目标是最大化在给定之前记忆标记的 KV 缓存 { x 1 , 1 m , ⋯   , x i − 1 , k i − 1 m } \{x_{1,1}^{m},\cdots,x_{i-1,k_{i-1}}^{m}\} {x1,1m,,xi1,ki1m} 和最近的原始标记 { x i , 1 , ⋯   , x i , j − 1 } \{x_{i,1},\cdots,x_{i,j-1}\} {xi,1,,xi,j1} 下生成下一个标记的概率。

2.3 MemoRAG 框架

在上一节中,输入序列 X \mathcal{X} X 被转换为一个紧凑的记忆表示 X m \pmb{\mathcal {X}}^{m} XXXm,它从全局视角封装了高级语义信息。接下来的任务是使用该记忆 X m \pmb{\mathcal {X}}^{m} XXXm 生成任务特定的答案,即 Y = Θ m e m ( X m , q ∣ θ ) \mathcal{Y}=\Theta_{\mathrm{mem}}(\pmb{\mathcal{X}}^{m},q|\theta) Y=Θmem(XXXm,qθ),其中 q q q 代表任务描述(例如,查询或总结指令)。尽管这种方法是可行的,但由于 X m \pmb{\mathcal {X}}^{m} XXXm 是原始输入序列 X \mathcal X X 的高度压缩形式,可能缺乏信息准确性。这类似于人类可能难以从记忆中回忆详细信息,但可以生成初步答案,然后通过重新审视和寻找相关证据来进行修正。

在 MemoRAG 中,全局记忆 X m \pmb{\mathcal {X}}^{m} XXXm 用于生成任务特定的线索 y y y。这些线索帮助概述期望的答案 Y \mathcal Y Y,有效地弥合原始输入上下文与真实答案之间的差距。基于这些记忆生成的线索,可以使用任何独立的检索器来定位输入序列中的确切证据,如公式(2)所定义。

生成的最终答案 Y \mathcal Y Y 是基于检索到的证据文本生成的,即:

Y = Θ g e n ( X ^ , q ∣ θ ) , \mathcal Y = \Theta_{\mathrm{gen}}(\hat{\mathcal {X}},q|\theta), Y=Θgen(X^,qθ),

其中 X ^ \hat{\mathcal{X}} X^ 包括输入查询或任务指令 q q q 和检索到的上下文 C ^ \hat{\mathcal{C}} C^。生成模型可以是任何生成性语言模型,默认情况下,MemoRAG 利用记忆模型的底层 LM 进行生成,避免加载额外的模型参数。

2.4 适用性

模糊信息需求

对模糊信息需求的查询对标准 RAG 来说是具有挑战性的,因为用户的意图通常没有明确说明,需要更深层次的上下文理解和推理。为了解决这个问题,MemoRAG 在相关数据库中创建全局记忆,使其能够推断隐式查询的潜在意图。通过生成阶段性答案,如更具体的答案线索,MemoRAG 弥合了隐式信息需求与检索过程之间的差距。这大大扩展了标准 RAG 系统在涉及隐式查询的任务中的适用范围。

image-20240912174048300

在表 1 中,我们展示了 MemoRAG 如何处理隐式查询。例如,输入查询“这本书如何传达爱情主题?”在相关数据库中与内容没有直接的语义联系,因为“爱情主题”在原始文本中没有明确说明。MemoRAG 在整个数据库中形成全局记忆,并生成关键答案线索,帮助从数据库中检索相关内容。

分布式证据查询

需要分布式证据收集的查询对标准 RAG 系统提出了额外的复杂性,因为这些查询需要跨多个步骤或非结构化数据库整合知识。大多数检索方法在处理这些查询时会遇到困难,因为它们要求对相互关联的数据点进行连贯的理解,这些数据点通常跨越不同的上下文。

为了解决这个挑战,MemoRAG 利用其全局记忆能力在数据库中连接和整合相关信息,通过生成指导检索的阶段性答案,有效地管理多跳查询的复杂性。这种方法使 MemoRAG 能够显著提升标准 RAG 系统在涉及多跳推理任务中的表现。

image-20240912174137783

在表 2 中,我们展示了 MemoRAG 如何处理这样的查询。例如,输入查询“过去三年中哪一年收入峰值最高?”需要分析多个年度的财务数据。MemoRAG 从过去十年的大型公司财务报告中形成全局记忆,将多跳查询重新表述为几个具体查询,并整合这些信息以确定收入峰值年。

信息聚合

信息聚合任务,如总结长篇文档,需要将大量非结构化数据压缩成简明而连贯的输出。标准 RAG 系统通常在这些任务中表现不佳,因为它们依赖于检索离散的信息片段,而没有有效结合和总结这些片段成综合概述的机制。

MemoRAG 通过利用其全局记忆来捕捉和综合数据集中的关键点来解决这一挑战。通过这一过程,MemoRAG 能够生成代表内容核心要素的中间阶段答案,然后用于从原始内容中检索详细信息。所有这些信息被聚合以生成最终的总结。

image-20240912174220915

在表 3 中,我们展示了 MemoRAG 如何处理信息聚合任务。例如,任务是总结关于城市建设的政府报告。MemoRAG 首先提取报告中的关键点,如基础设施发展、预算分配和未来规划,然后检索详细内容,并将这些信息聚合以生成报告的全面总结。

MemoRAG 当前版本主要针对上述应用场景。以下是MemoRAG 应用场景,这些可以通过进一步在任务特定训练数据上训练来实现。

个性化助手

个性化助手任务,如根据用户偏好推荐歌曲,需要深入了解用户的独特特征和历史。这是因为个性化的信息需求通常是模糊的,受到用户个人特质的强烈影响。标准 RAG 系统可能难以处理这些任务,因为它们通常依赖于一般的相关性匹配,而不是基于特定用户数据进行个性化结果的生成。

MemoRAG 通过利用全局记忆来分析和理解用户的对话历史,增强了个性化。这使 MemoRAG 能够识别和利用诸如用户的音乐偏好、知识背景、年龄等可以从过去的互动中推断出的关键线索。通过综合这些信息,MemoRAG 能够生成与用户口味紧密相关的高度个性化推荐。

image-20240912174300729

在表 4 中,我们展示了 MemoRAG 如何处理个性化推荐查询。例如,当被问到“你能为我推荐一首歌吗?”时,MemoRAG 分析用户的对话历史,识别对某些音乐类型、艺术家或年代的偏好,并使用这些信息推荐符合用户个人资料的歌曲。

终身对话搜索

对话搜索经常涉及省略语义的查询,其中用户的意图依赖于先前交互的上下文。查询重写是一种广泛采用的技术来应对这一挑战。在终身对话搜索中,当前查询的语义依赖可能延伸到更早的交互,这使得在极长的交互历史中准确识别相关上下文变得至关重要。标准 RAG 系统可能在这个任务中表现不佳,因为查询中提出的信息需求存在模糊性。这主要是因为标准 RAG 系统缺乏有效跟踪和整合不断演变的对话上下文的能力,往往导致检索结果不完整或不准确。

MemoRAG 通过利用其全球记忆来维护和利用完整的对话历史上下文,从而解决了这一挑战。这使得系统能够通过引用相关的先前交流来解释省略语义的查询,并填补意义上的空白。因此,MemoRAG 能够准确解释并回应依赖于先前对话上下文的后续查询。

例如,考虑一个查询“它有任何弱点吗?”这是在讨论特定研究论文后提出的。标准检索系统可能难以理解“它”指的是什么,如果没有明确的上下文,可能会检索到不相关的信息。相比之下,MemoRAG 会回顾之前的对话,识别出“它”指的是正在讨论的研究论文,然后检索关于论文弱点的信息。

image-20240912174438177

在表 5 中,我们展示了 MemoRAG 如何在对话搜索上下文中处理省略语义的查询。通过利用完整的对话历史,MemoRAG 确保了准确和上下文适当的响应。

3. 实验

3.1 数据集

标准的 RAG 系统主要关注涉及明确的信息需求的问答任务。为了评估 MemoRAG 与标准 RAG 系统在这些任务中的效果,我们使用了 13 个现有的基准数据集来评估 MemoRAG 和基线模型,包括:

  1. 单文档问答:NarrativeQA,Qasper,Multi-FieldQA。
  2. 多文档问答:HotpotQA,2WikiMQA,MuSiQue。
  3. 摘要生成:GovReport,MultiNews,En.SUM)。
  4. 长篇书籍问答:En.QA。

在摘要生成任务中,将任务指令用作虚假查询。

在实际场景中,并非所有用户查询都有明确的信息需求。大多数查询需要全面理解完整的上下文,并整合多条信息以获得最终答案。为了评估 MemoRAG 和标准 RAG 系统在广泛应用中的表现,我们构建了 ULTRADOMAIN 基准数据集。该基准包括具有长上下文和高层次查询的多领域专门任务。

首先,我们利用来自专门领域的知识数据集中的上下文,重点关注两个专门的数据集。第一个是 Fin 数据集,来源于金融报告。该数据集测试 MemoRAG 处理和解释复杂金融数据的能力,确保系统能够处理金融语言和报告的复杂性。第二个是 Legal 数据集,构建于法律合同之上。该数据集挑战 MemoRAG 理解和驾驭法律文件中复杂且微妙的语言,其中精确性至关重要。

除了这些专门的数据集外,我们还从该资源库中收集了 428 本涵盖自然科学、人文学科和社会科学等 18 个不同领域的大学教材。这些教材用于测试 MemoRAG 在各种主题上的多样性和适应性,这些主题可能与专门数据集无直接关系。通过在这些不同的上下文中评估 MemoRAG,我们对其在超越特定领域(如金融和法律)方面的广泛应用潜力有了更深入的了解。

最后,我们构建了一个包含上述数据集混合上下文的数据集,即 Mix。该混合数据集旨在评估 MemoRAG 在不同类型上下文中的理解泛化能力。

3.2 基准对比

我们将 MemoRAG 与以下基准进行比较:

  1. Full:直接将完整上下文输入到 LLM 中,以适应 LLM 的最大长度。
  2. BGE-M3:一种通用检索器,我们用它执行标准的 RAG。
  3. Stella-en-1.5B-v5:该模型在撰写本文时在 MTEB 排行榜上排名前三,我们用它执行标准 RAG。
  4. RQ-RAG:RQ-RAG 提示 LLM 将输入查询转换为几个更适合显式重写、分解和消歧的查询。支持的段落由输入查询和优化后的查询共同检索。
  5. HyDE:直接提示 LLM 生成虚假文档,仅提供查询,然后使用虚假文档检索段落,并根据检索到的段落生成最终答案。

为了进行更全面的比较,我们使用了三种流行的 LLM 作为生成器:

  • Llama3-8B-Instruct-8K
  • Mistral-7B-Instruct-v0.2-32K
  • Phi-3-mini-128K

3.3 在 ULTRADOMAIN 上的实验

image-20240912174942996

为了评估 MemoRAG 在各种复杂任务中的泛化能力,我们在 UltraDomain 基准上对 MemoRAG 进行了评估。UltraDomain 中的大多数查询涉及模糊信息需求或非结构化知识检索挑战。UltraDomain 包含两种类型的数据集:

  1. 同域数据集:包括三种上下文大小小于 100K 标记的数据集,这些数据集与我们的训练数据集具有相同的分布。我们将这三种数据集称为同域数据集。
  2. 异域数据集:包括 18 个数据集,这些数据集来源于 428 本英语大学教材,包含长达一百万个令牌的上下文,涵盖哲学和数学等学科。由于这些异域数据集的数据分布与训练数据不同,我们将其称为异域数据集。

实验结果总结在表 6 中,我们得出以下结论:

  1. MemoRAG 在所有数据集上均优于所有基准模型,展示了其强大的领域泛化能力。
  2. 直接将完整上下文输入 LLM 通常比其他 RAG 方法(如 BGE-M3、Stella-v5 和 HyDE)表现更好。这一发现揭示了标准 RAG 系统在处理长上下文和高层次问题时的困难。
  3. 相比之下,MemoRAG 一贯超越了直接使用完整上下文的性能,展示了其在处理超长上下文与应对复杂任务之间有效弥合差距的能力。
  4. MemoRAG 在三种同域数据集上的表现优越,这表明其潜力可以通过更多样化的训练数据进一步提升。

3.4 在所有基准上的实验

image-20240912175052125

表 7 显示了在三个基准上进行的实验结果,我们可以得出结论:除了一个异常值之外,MemoRAG 在所有数据集上通常优于所有基准模型。

总之,结果表明 MemoRAG 在各种数据集和查询类型上显著提升了性能,相较于标准 RAG 方法和其他基准。MemoRAG 有效处理复杂和长上下文任务的能力突出显示了其优势,特别是在标准 RAG 系统难以应对的场景中。这种在不同生成器中的一致性突显了 MemoRAG 的稳健性和通用适用性。

4. 结论

在本文中,作者介绍了 MemoRAG,这是一种新型的检索增强生成系统,它集成了全局上下文感知,以应对涉及长输入上下文的复杂任务所带来的挑战。MemoRAG 具有一个记忆模块,构建了一个跨整个数据库的紧凑全局记忆,这有助于生成上下文相关的线索,有效地将知识数据库与获取准确答案所需的精确信息连接起来。

总结

⭐ 作者提出了MemoRAG,一种通过长期记忆增强的检索增强生成新范式。它使用轻量且长上下文的LLM构建全局记忆,用于生成上下午相关的线索。用另一个表达力强的LLM,根据检索到的信息生成最终答案。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愤怒的可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值