LLMs之RAG:MemoRAG(利用其记忆模型来实现对整个数据库的全局理解)的简介、安装和使用方法、案例应用之详细攻略

LLMs之RAG:MemoRAG(利用其记忆模型来实现对整个数据库的全局理解)的简介、安装和使用方法、案例应用之详细攻略

目录

MemoRAG的简介

0、更新日志

1、特性

2、路线图

MemoRAG的安装和使用方法

1、安装

安装依赖项

T1、从源码安装

T2、通过pip安装

2、使用方法

MemoRAG的Lite模式

MemoRAG的基本使用

使用长LLM作为记忆模型

摘要任务

使用API作为生成器

支持的生成器API

记忆模型的使用

记忆增强检索的使用

基准评估

评估

数据集

3、MemoRAG演示

T1、脚本演示

T2、在Google Colab上免费试用MemoRAG

MemoRAG的案例应用


MemoRAG的简介

MemoRAG:通过记忆启发的知识发现迈向下一代RAG为RAG赋予基于记忆的数据接口,适用于各种用途的应用!

MemoRAG是一个建立在高效、超长记忆模型之上的创新RAG框架。与主要处理具有明确信息需求查询的标准RAG不同,MemoRAG利用其记忆模型来实现对整个数据库的全局理解。通过从记忆中回忆特定于查询的线索,MemoRAG增强了证据检索,从而生成更准确且上下文丰富的响应。

GitHub地址:GitHub - qhjqhj00/MemoRAG: Empowering RAG with a memory-based data interface for all-purpose applications!

0、更新日志

[21/09/24] MemoRAG引入了Lite模式,只需几行代码即可启用针对数百万个token的记忆增强型RAG处理。更多细节请参阅示例笔记本。
[13/09/24] MemoRAG增加了Meta-Llama-3.1-8B-Instruct和Llama3.1-8B-Chinese-Chat作为记忆模型,请参见示例。
[10/09/24] 我们发布了MemoRAG的技术报告。
[09/09/24] 您可以在Google Colab上免费试用MemoRAG。
[05/09/24] 可以在TommyChien/memorag-qwen2-7b-inst获取基于Qwen2的记忆模型
[03/09/24] 可以在TommyChien/memorag-mistral-7b-inst获取基于Mistral的记忆模型
[01/09/24] 项目启动!

1、特性

>> 全局记忆:单个上下文中处理多达一百万个token,提供对大量数据集的全面理解。
>> 优化&灵活:轻松适应新任务,仅需几个小时的额外训练即可达到优化性能。
>> 上下文线索:从全局记忆生成精确线索,将原始输入与答案联系起来,并解锁复杂数据中的隐藏见解。
>> 高效缓存:加快上下文预填充速度达30倍,支持缓存分块、索引和编码。
>> 上下文重用:一次编码长上下文并支持重复使用,在需要反复访问数据的任务中提高效率。

2、路线图

MemoRAG目前正处于积极开发阶段,资源和原型会持续发布在这个仓库中。
代码 / 模型 / 数据集发布
支持OpenAI/Azure模型
技术报告发布
支持中文
演示代码发布
记忆模型训练代码发布
轻量化优化
加速推理
集成任何检索方法
丰富记忆能力

注意:MemoRAG近期的目标是通过工程改进实现轻量化优化,并增强其记忆能力,使其能够适应更广泛的应用并支持更长的上下文(例如超过一百万个token)。

MemoRAG的安装和使用方法

1、安装

要使用Memorizer和MemoRAG,您需要安装Python以及所需的库。可以使用以下命令安装必要的依赖项:

安装依赖项

pip install torch==2.3.1
conda install -c pytorch -c nvidia faiss-gpu=1.8.0
T1、从源码安装

首先克隆此仓库

cd MemoRAG
pip install -e .

T2、通过pip安装

pip install memorag

对于快速开始,我们提供了一个笔记本,用于说明MemoRAG的所有功能。

2、使用方法

MemoRAG的Lite模式

我们介绍了MemoRAG的Lite模式,旨在为MemoRAG管道提供快捷友好的体验。只需几行代码,您就可以轻松尝试MemoRAG。虽然建议从拥有24GiB内存的GPU开始,但在大多数情况下,默认设置下16GiB GPU也能处理该管道。

from memorag import MemoRAGLite
pipe = MemoRAGLite()
context = open("examples/harry_potter.txt").read()
pipe.memorize(context, save_dir="harry_potter", print_stats=True)query = "What's the book's main theme?"
print(pipe(query))

MemoRAG Lite易于使用,支持多达数百万token的英文或中文上下文。虽然它可能与其他语言一起工作,但性能可能会下降,因为默认提示是英文的。关于MemoRAG Lite的更多详情,请参阅示例笔记本。

MemoRAG的基本使用

MemoRAG易于使用,可以直接使用HuggingFace模型初始化。通过使用MemoRAG.memorize()方法,记忆模型会在较长的输入上下文中构建全局记忆。根据经验,使用默认参数设置时,TommyChien/memorag-qwen2-7b-inst可以处理高达400K token的上下文,而TommyChien/memorag-mistral-7b-inst可以管理高达128K token的上下文。通过增加beacon_ratio参数,可以扩展模型处理更长上下文的能力。例如,当beacon_ratio=16时,TommyChien/memorag-qwen2-7b-inst可以处理高达一百万个token。

from memorag import MemoRAG# Initialize MemoRAG pipeline
pipe = MemoRAG(mem_model_name_or_path="TommyChien/memorag-mistral-7b-inst",ret_model_name_or_path="BAAI/bge-m3", gen_model_name_or_path="mistralai/Mistral-7B-Instruct-v0.2", # Optional: if not specify, use memery model as the generatorcache_dir="path_to_model_cache",  # Optional: specify local model cache directoryaccess_token="hugging_face_access_token",  # Optional: Hugging Face access tokenbeacon_ratio=4
)context = open("examples/harry_potter.txt").read()
query = "How many times is the Chamber of Secrets opened in the book?"# Memorize the context and save to cache
pipe.memorize(context, save_dir="cache/harry_potter/", print_stats=True)# Generate response using the memorized context
res = pipe(context=context, query=query, task_type="memorag", max_new_tokens=256)
print(f"MemoRAG generated answer: \n{res}")

运行上述代码时,编码后的键值(KV)缓存、Faiss索引和分块段落将存储在指定的save_dir中。之后,如果再次使用相同的上下文,则可以从磁盘快速加载数据:

pipe.load("cache/harry_potter/", print_stats=True)

通常,加载缓存权重是非常高效的。例如,使用TommyChien/memorag-qwen2-7b-inst作为记忆模型时,编码、分块和索引200K-token上下文大约需要35秒,但从缓存文件加载只需要1.5秒。

使用长LLM作为记忆模型

最近的LLM由于它们不断扩大的上下文窗口,已经成为了有效的记忆模型。MemoRAG现在支持利用这些长上下文LLM作为记忆模型,并利用MInference优化上下文预填充。我们测试了Meta-Llama-3.1-8B-Instruct和Llama3.1-8B-Chinese-Chat作为记忆模型,两者都原生支持128K的上下文长度。我们目前正在探索其他合适的LLM并优化策略以进一步增强记忆机制和上下文长度。有关详细使用说明,请参阅提供的脚本和笔记本:

from memorag import MemoRAG
model = MemoRAG(mem_model_name_or_path="shenzhi-wang/Llama3.1-8B-Chinese-Chat",    # For Chinese# mem_model_name_or_path="meta-llama/Meta-Llama-3.1-8B-Instruct",  # For Englishret_model_name_or_path="BAAI/bge-m3",# cache_dir="path_to_model_cache",  # to specify local model cache directory (optional)# access_token="hugging_face_access_token"  # to specify local model cache directory (optional))

之后,您可以像往常一样使用MemoRAG的功能。

摘要任务

要执行摘要任务,请使用以下脚本:

res = pipe(context=context, task_type="summarize", max_new_tokens=512)
print(f"MemoRAG summary of the full book:\n {res}")

使用API作为生成器

如果您想使用API作为生成器,请参考下面的脚本:

from memorag import Agent, MemoRAG# API configuration
api_dict = {"endpoint": "","api_version": "2024-02-15-preview","api_key": ""
}
model = "gpt-35-turbo-16k"
source = "azure"# Initialize Agent with the API
agent = Agent(model, source, api_dict)
print(agent.generate("hi!"))  # Test the API# Initialize MemoRAG pipeline with a customized generator model
pipe = MemoRAG(mem_model_name_or_path="TommyChien/memorag-qwen2-7b-inst",ret_model_name_or_path="BAAI/bge-m3",cache_dir="path_to_model_cache",  # Optional: specify local model cache directorycustomized_gen_model=agent,
)# Load previously cached context
pipe.load("cache/harry_potter_qwen/", print_stats=True)# Use the loaded context for question answering
query = "How are the mutual relationships between the main characters?"
context = open("harry_potter.txt").read()res = pipe(context=context, query=query, task_type="memorag", max_new_tokens=256)
print(f"MemoRAG with GPT-3.5 generated answer: \n{res}")

支持的生成器API

内置的Agent对象支持来自openai和deepseek的模型。以下是初始化这些模型的配置:

# Using deepseek models
model = ""
source = "deepseek"
api_dict = {"base_url": "","api_key": ""
}# Using openai models
model = ""
source = "openai"
api_dict = {"api_key": ""
}

记忆模型的使用

记忆模型可以独立使用来存储、回忆和交互上下文。这里有一个例子:

from memorag import Agent, MemoRAG# API configuration
api_dict = {"endpoint": "","api_version": "2024-02-15-preview","api_key": ""
}
model = "gpt-35-turbo-16k"
source = "azure"# Initialize Agent with the API
agent = Agent(model, source, api_dict)
print(agent.generate("hi!"))  # Test the API# Initialize MemoRAG pipeline with a customized generator model
pipe = MemoRAG(mem_model_name_or_path="TommyChien/memorag-qwen2-7b-inst",ret_model_name_or_path="BAAI/bge-m3",cache_dir="path_to_model_cache",  # Optional: specify local model cache directorycustomized_gen_model=agent,
)# Load previously cached context
pipe.load("cache/harry_potter_qwen/", print_stats=True)# Use the loaded context for question answering
query = "How are the mutual relationships between the main characters?"
context = open("harry_potter.txt").read()res = pipe(context=context, query=query, task_type="memorag", max_new_tokens=256)
print(f"MemoRAG with GPT-3.5 generated answer: \n{res}")

记忆增强检索的使用

除了独立的记忆模型之外,MemoRAG还提供了记忆增强检索功能。这允许基于从记忆中回忆起的线索来改善证据检索。

from memorag import MemoRAG# Initialize MemoRAG pipeline
pipe = MemoRAG(mem_model_name_or_path="TommyChien/memorag-qwen2-7b-inst",ret_model_name_or_path="BAAI/bge-m3",cache_dir="path_to_model_cache",  # Optional: specify local model cache directoryaccess_token="hugging_face_access_token"  # Optional: Hugging Face access token
)# Load and memorize the context
test_txt = open("harry_potter.txt").read()
pipe.memorize(test_txt, save_dir="cache/harry_potter/", print_stats=True)# Define the query
query = "How are the mutual relationships between the main characters?"# Recall clues from memory
clues = pipe.mem_model.recall(query).split("\n")
clues = [q for q in clues if len(q.split()) > 3]  # Filter out short or irrelevant clues
print("Clues generated from memory:\n", clues)# Retrieve relevant passages based on the recalled clues
retrieved_passages = pipe._retrieve(clues)
print("\n======\n".join(retrieved_passages[:3]))

基准评估

以下是结合三种生成模型对记忆模型进行实验的结果。我们在三个基准上测试了MemoRAG。每个区块的最佳结果已加粗显示。

DatasetNarrativeQAQasperMultifieldQAMusique2WikiHotpotQAMultiNewsGovReportEn.sumEn.qaFinLegalMix
LongBenchInfBenchUltraDomain
Generator: Llama3-8B-Instruct-8K
Full21.343.446.623.538.247.124.623.613.16.734.233.242.7
BGE-M322.144.350.222.236.748.422.120.112.115.141.440.646.4
Stella-v512.335.244.422.133.341.922.120.711.714.841.933.744.9
RQ-RAG20.243.949.122.736.144.520.621.012.013.339.536.844.5
HyDE22.144.350.222.236.748.4---19.141.440.646.4
MemoRAG22.845.750.728.451.457.027.427.914.116.147.847.955.5
Generator: Phi-3-mini-128K
Full21.435.047.319.035.542.125.623.713.015.244.840.544.7
BGE-M320.333.044.321.135.442.117.719.89.616.341.741.243.7
Stella-v513.732.443.521.035.640.620.318.210.019.542.835.143.9
RQ-RAG19.634.146.521.936.141.720.118.610.416.141.840.943.2
HyDE18.736.047.520.536.842.7---19.643.141.644.2
MemoRAG27.543.952.233.954.154.832.926.315.722.951.551.055.6
Generator: Mistral-7B-Instruct-v0.2-32K
Full20.829.246.318.920.637.623.020.412.412.336.535.842.1
BGE-M317.329.546.318.520.336.224.326.113.512.240.542.041.1
Stella-v513.523.742.118.622.231.921.118.513.29.740.934.942.1
RQ-RAG17.129.247.019.121.537.022.118.613.112.744.344.643.4
HyDE17.429.546.318.520.136.2---12.242.835.143.9
MemoRAG23.131.250.026.930.342.927.131.617.915.448.051.253.6
MemoRAG-qwen222.232.749.631.433.744.427.031.516.817.648.752.348.6

评估

要评估MemoRAG,请使用以下脚本:

cd examples
bash longbench/eval.sh

我们将很快更新其他评估脚本。

数据集

UltraDomain基准: this repo.

其他评估数据: this repo.

3、MemoRAG演示

T1、脚本演示

我们将提供一个玩具演示来展示MemoRAG的功能,您可以使用以下脚本进行尝试:

streamlit run demo/demo.py

之后,您可以看到如下所示的演示

T2、在Google Colab上免费试用MemoRAG

您可以直接在Google Colab上免费试用MemoRAG。

地址:https://colab.research.google.com/drive/1fPMXKyi4AwWSBkC7Xr5vBdpPpx9gDeFX?usp=sharing

在此笔记本中,我们在由Google Colab提供的具有15GiB内存的单一T4 GPU上运行完整的MemoRAG管道(记忆模型+检索器+生成模型)。尽管资源有限,MemoRAG仍能处理示例书籍内容的大约一半(~68K token),并执行所有功能。

MemoRAG的案例应用

持续更新中……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/432126.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【简单介绍】DevOps是什么?

由于 DevOps 方法的广泛采用以及由此产生的快速产品交付和部署,许多部门已采用更敏捷的方法来开发生命周期。在满足市场速度和规模要求的同时,设计安全的软件一直是现代 IT 公司共同面临的问题。结果,超过 52% 的组织因为担心上市速度落后而放…

大数据毕业设计选题推荐-手机销售数据分析系统-Hive-Hadoop-Spark

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

Dubbo入门案例

Dubbo 学习地址:Dubbo3 简介_w3cschool; 01-Dubbo入门案例 ​ 我们先来新建一个Dubbo的小案例来体验一下Dubbo的使用,我们先来创建一个springboot的项目。 1.1-zookeeper下载启动 ​ 在编写我们的入门案例之前,我们需要先去下…

浅拷贝和深拷贝(Java 与 JavaScript)

一、Java 浅拷贝和深拷贝 在Java中,浅拷贝和深拷贝的主要区别在于对对象的引用和内容的复制方式。 浅拷贝 Java 的类型有基本数据类型和引用类型,基本数据类型是可以由 CPU 直接操作的类型,无论是深拷贝还是浅拷贝,都是会复制出…

C++ 二叉树

1. 二叉搜索树 1.1 二叉搜索树概念 二叉搜索树又称二叉排序树,他或者是一棵空树,或者是具有以下性质的二叉树: ①若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 ②若它的右子树不为空,则右子树上所有节…

PCL 用八叉树完成空间变化检测

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1八叉树构建与变化检测 2.1.2检测变化的点云 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更…

如何在O2OA中使用ElementUI组件进行审批流程工作表单设计

本文主要介绍如何在O2OA中进行审批流程表单或者工作流表单设计,O2OA主要采用拖拽可视化开发的方式完成流程表单的设计和配置,不需要过多的代码编写,业务人员可以直接进行修改操作。 在流程表单设计界面,可以在左边的工具栏找到Ele…

《线性代数》学渣笔记

文章目录 1 行列式1.1 克拉默法则1.2 基本性质1.3 余子式 M i j M_{ij} Mij​1.4 代数余子式 A i j ( − 1 ) i j ⋅ M i j A_{ij} (-1)^{ij} \cdot M_{ij} Aij​(−1)ij⋅Mij​1.5 具体型行列式计算(化为基本型)1.5.1 主对角线行列式:主…

Vue3 + ElementPlus 的后台菜单指引

文章目录 需求实现思路 需求 实现思路 引导页用 Drive.js 基本的使用操作这里写了一些菜单使用 ElementPlus 的组件,可以调用组件中暴露的这个方法,具体使用方法在这里说明 二者结合一下,就可以有这样的效果了

2024网安周 | 百度安全深度参与,探索人工智能与数字安全的融合发展之路

9月9日-15日,2024年国家网络安全宣传周在全国范围内统一举行,本届网安周继续以“网络安全为人民,网络安全靠人民”为主题,由中央宣传部、中央网信办、教育部、工业和信息化部、公安部、中国人民银行、国家广播电视总局、全国总工会…

K8s flink-operator 例子

1.参考官网: https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-stable/docs/try-flink-kubernetes-operator/quick-start/ 2.首先环境具备 k8s、helm 我的环境 k8s 1.30 最新版本了 [rootk8s-master ~]# kubectl get no -owide NAME …

C/C++逆向:循环语句逆向分析

在逆向分析中,循环语句通常会以特定的汇编模式或结构体现出来。常见的循环语句包括 for 循环、while 循环和 do-while 循环。由于不同的编译器会根据代码优化的级别生成不同的汇编代码,分析循环的模式也可能会有所不同。以下是三种常见循环语句的汇编分析…

uni-app+vue3开发微信小程序使用本地图片渲染不出来报错[渲染层网络层错误]Failed to load local image resource

我把图片放在assets里面页面通过相对路径引入。结果一直报错。 最后我把图片放在static文件夹下面。然后修改路径指向static就可以了 或者是我们必须先import 这个图片然后在使用 import banner1 from ../../assets/images/banner/banner1.png; <image :src"banner…

【时时三省】(C语言基础)指针笔试题5

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 笔试题5 这个a数组代表着5行5列 如下图 a[4][2]是第5行的数组 第五行下标为2的位置 取出的是这个位置的地址

【Linux学习】1-2 新建虚拟机ubuntu环境

1.双击打开VMware软件&#xff0c;点击“创建新的虚拟机”&#xff0c;在弹出的中选择“自定义&#xff08;高级&#xff09;” 2.点击下一步&#xff0c;自动识别ubuntu光盘映像文件&#xff0c;也可以点击“浏览”手动选择&#xff0c;点击下一步 3.设置名称及密码后&#xf…

kibana开启访问登录认证

编辑es配置文件&#xff0c;添加以下内容开启es认证 vim /etc/elasticsearch/elasticsearch.yml http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-headers: Authorization xpack.security.enabled: true xpack.security.transport.ssl.enable…

WPF一个控件根据另一个控件的某种状态的改变从而改变自身某种状态

WPF 一个控件根据另一个控件的某种状态的改变从而改变自身某种状态 前提&#xff0c;这里根据 Image 控件 Source 属性为 null 时&#xff0c;让 Label 控件可见&#xff0c;不为 null 时, Label 控件不可见为例子展示&#xff0c;代码如下&#xff1a; <Canvas><Ima…

Qt基础之四十七:管理员权限

在Windows系统中,以管理员身份运行的意思是,用系统管理最高权限运行程序。一般来说,只有当某些操作涉及系统保护区域时,才会需要用户授权管理员运行。如此一来,程序、命令在运行过程中,就有了足够权限,更改系统设置或注册表。 一.Qt程序加入管理员权限的几种方式 1.MS…

理解和使用语言模型的监督微调 (SFT)

大型语言模型&#xff08;LLM&#xff09;的训练通常分为几个阶段&#xff0c;包括预训练和几个微调阶段&#xff1b;见下文。 虽然预训练的成本很高&#xff08;即几十万美元的计算费用&#xff09;&#xff0c;但微调 LLM&#xff08;或执行上下文学习&#xff09;的成本却很…

开源链动 2+1 模式 S2B2C 商城小程序:社交电商团队为王的新引擎

摘要&#xff1a;本文深入探讨在社交电商领域中&#xff0c;团队的重要性以及如何借助开源链动 21 模式 S2B2C 商城小程序&#xff0c;打造具有强大竞争力的团队&#xff0c;实现个人价值与影响力的放大&#xff0c;创造被动收入&#xff0c;迈向财富自由之路&#xff0c;同时为…