More than code

More Than Code
The efficiency of your iteration of reading, practicing and thinking decides your understanding of the world.
  1. 首页
  2. nlp
  3. 正文

MemoRAG

2025年2月15日 214点热度 0人点赞 0条评论

MemoRAG是一种面向下一代RAG的革新框架,其核心设计围绕"全局记忆系统"展开,旨在突破传统RAG在模糊查询和非结构化知识处理上的局限。以下从三个维度解析其技术方案:

一、双系统架构设计

  1. 记忆-生成协同机制
    采用轻量级LLM(如Qwen2-7B/Mistral-7B)构建全局记忆系统,通过token压缩技术(最高16倍)处理百万级上下文。记忆模块生成"答案线索"后,触发检索系统定位原始知识片段,再由高性能LLM(如Llama3-8B)完成最终生成。

  2. 动态记忆编码
    在Transformer架构中引入专用记忆投影矩阵(W^Q_m, W^K_m, W^V_m),通过滑动窗口机制逐步将原始token转化为记忆token。每处理l个原始token后追加k个记忆token(k≪l),形成层次化记忆表征。

  3. 记忆生命周期管理
    采用KV缓存淘汰策略:短期记忆(原始token的KV缓存)在处理后被丢弃,长期记忆通过专用权重矩阵持续更新。记忆token的注意力交互采用混合注意力机制,同时关注当前窗口和累积记忆缓存。

二、记忆优化技术

  1. 两阶段训练策略

    • 预训练阶段:使用RedPajama长文本学习记忆压缩模式
    • 精调阶段:通过任务特定数据(17k SFT样本)优化线索生成质量
  2. 记忆引导检索
    设计线索生成模板:

    def generate_clues(memory, query):
       # 记忆模块生成初始线索
       draft = memory_model(query, memory)
       # 线索重构模块生成可检索项
       clues = rerank(draft, retrieval_corpus)
       return clues
    

    支持生成替代查询、关键实体、推理步骤等多种线索形式,适配不同任务需求。

三、多场景适配机制

  1. 模糊查询解析
    通过记忆引导的查询重写技术,将"书中如何表现爱情主题"等抽象查询,分解为具体线索(如"莉莉的牺牲"、"韦斯莱家族"),实现精准知识定位。

  2. 分布式证据聚合
    采用多跳检索策略:

    • 首轮检索:基于全局记忆生成证据锚点
    • 迭代检索:通过证据间的共现关系扩展检索范围
    • 证据融合:构建知识图谱实现跨片段推理
  3. 长文档摘要优化
    创新性引入"关键点-证据"二级架构:

    记忆模块生成摘要框架 → 检索系统填充细节证据 → 生成模块融合框架与证据
    

    相比传统RAG直接检索,准确率提升9.7%(GovReport数据集)。

系统实现亮点

  • 支持128K-1M token上下文处理
  • 兼容稀疏/稠密/重排序多种检索方式
  • 可在T4(16GiB)至A100(80GiB)多级硬件部署
  • 开源模型支持Mistral/Qwen等基座,提供LangChain集成接口

该框架在ULTRADOMAIN基准上相比传统RAG平均提升9.7%,在百万token级教科书理解等场景展现显著优势。其核心创新在于将记忆系统从被动存储升级为主动推理引擎,为复杂知识任务提供了新的范式。

代码细节

基本思路是这样的,他们首先预训练了一个LLM,用来做memory。

在使用的时候,首先把所有的上下文都丢给这个LLM,然后把对应LLM的激活值保存下来,这里是kv cache。
* huggingface的模型提供管理kv cache的接口

然后在召回的时候,输入query+prompt,需要rag的doc,以及上面的kv cache。这样在做doc相关的计算的时候,效率就会比较快。
然后用prompt生成用于召回的线索。

其实上面这个cache相关的,应该和prefix cache什么的没啥区别。所以主要就是finetune了个模型,来针对长文本生成query相关的线索。

后续再和生成的线索一起,去做问答即可

他这里貌似还有另一种方式,叫做beacon。搜了下好像和这篇paper有关:Long Context Compression with Activation Beacon

有关训练方式:


* 每一个chunk编码成若干个memory token
* 训练的目的是,用最近的chunk+之前的memory token,来预测下一个token
* 问答的时候,用这个memory token作为输入,来生成clue

是个比较新颖的思路,感觉模型增强上下文也是类似的手段:
* 这里相当于在低层总结了chunk的信息,然后给到高层
* 高层再去根据低层的总结,形成长记忆

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

sheep

think again

点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2021 heavensheep.xyz. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS