HippoRAG

HippoRAG

大型语言模型的神经生物学启发长期记忆框架

HippoRAG是一个借鉴人类长期记忆神经生物学原理的检索增强生成(RAG)框架。它能让大型语言模型持续整合外部文档知识,以较低的计算成本实现通常需要昂贵迭代LLM管道才能达成的功能。该框架兼容ColBERTv2和Contriever等检索模型,还可与IRCoT结合获得互补效果。HippoRAG为大型语言模型提供了一种高效的长期记忆解决方案,在提升模型性能的同时降低了计算资源需求。

HippoRAGRAG长期记忆大语言模型神经生物学Github开源项目
<h1 align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/5c7dc648-aa62-4846-b7b1-3e644ef6a0c7.png" width="30" height="30"> HippoRAG <br> 神经生物学启发的长期记忆 <br> 用于大型语言模型</h1>

HippoRAG 是一个受人类长期记忆神经生物学启发的新型检索增强生成 (RAG) 框架,使大型语言模型能够持续整合外部文档中的知识。我们的实验表明,HippoRAG 可以为 RAG 系统提供通常需要昂贵且高延迟的迭代 LLM 流程才能实现的功能,而计算成本仅为其一小部分。

欲了解更多详情,请查看我们的<a href="https://arxiv.org/abs/2405.14831">论文</a>

HippoRAG

设置环境

创建 conda 环境并安装依赖:

conda create -n hipporag python=3.9 conda activate hipporag pip install -r requirements.txt GPUS=0,1,2,3 #替换为您自己的可用 GPU 设备

将 conda 环境添加到 PATH,如下所示,其中 /path/HippoRAG 是 HippoRAG 的根目录,/path/HippoRAG/hipporag 是 conda 环境的路径。考虑将此添加到您的 ~/.bashrc 中

export PATH=$PATH:/path/HippoRAG/hipporag/bin

设置 LLM API 密钥:TOGETHER_API_KEY 是可选的,当您想使用他们的开源模型(如 Llama-3)时设置它。

export OPENAI_API_KEY='在此添加您自己的 OpenAI API 密钥。' export TOGETHER_API_KEY='在此添加您自己的 TogetherAI API 密钥。'

要使用 ColBERTv2,下载预训练的检查点并将其放在 exp/colbertv2.0 下。

cd exp wget https://downloads.cs.stanford.edu/nlp/data/colbert/colbertv2/colbertv2.0.tar.gz tar -xvzf colbertv2.0.tar.gz cd .. # 返回根目录

使用 HippoRAG

注意,以下命令的工作目录为 HippoRAG 根目录。

设置您的数据

要设置您自己的检索语料库,请按照 data/sample_corpus.json 中显示的格式和命名约定(您的数据集名称后应跟 _corpus.json)。如果要运行预定义问题的实验,请根据查询文件 data/sample.json 组织您的查询语料库,务必同样遵循我们的命名约定。

语料库和可选查询 JSON 文件应具有以下格式:

检索语料库 JSON

[ { "title": "第一段落标题", "text": "第一段落文本", "idx": 0 }, { "title": "第二段落标题", "text": "第二段落文本", "idx": 1 } ]

(可选)查询 JSON

[ { "id": "sample/question_1.json", "question": "问题", "answer": [ "答案" ], "answerable": true, "paragraphs": [ { "title": "{第一个支持段落标题}", "text": "{第一个支持段落文本}", "is_supporting": true, "idx": 0 }, { "title": "{第二个支持段落标题}", "text": "{第二个支持段落文本}", "is_supporting": true, "idx": 1 } ] } ]

(可选)分段语料库

在准备语料库数据时,您可能需要对每个段落进行分段,因为较长的段落可能对 OpenIE 过程来说过于复杂。如果需要,请查看 src/data_process/util.py 以对整个语料库进行分段。

与 LangChain 集成

此代码库通过 LangChain 调用 LLM,这使得 HippoRAG 更容易调用不同的在线 LLM API 或离线 LLM 部署。 查看 src/langchain_util.py 以了解我们如何为实验设置 OpenAI 和 TogetherAI。您还可以使用 LangChain 设置自己的 LLM 选择,例如,Ollama 支持本地的 Llama、Gemma 和 Mistral 模型。

索引

一旦创建了语料库,将其添加到 data 目录下。现在我们准备使用以下命令开始索引。

我们将使用论文中定义的最佳超参数,并假设您的数据集名称为 sample

对于以下命令,您不必同时使用 ColBERTv2 和 Contriever 进行索引。根据您的偏好选择其中一个。

使用 ColBERTv2 为同义边索引

DATA=sample LLM=gpt-3.5-turbo-1106 SYNONYM_THRESH=0.8 GPUS=0,1,2,3 LLM_API=openai # LLM API 提供商,例如 'openai'、'together',见 'src/langchain_util.py' bash src/setup_hipporag_colbert.sh $DATA $LLM $GPUS $SYNONYM_THRESH $LLM_API

使用 HuggingFace 检索编码器为同义边索引(即 Contriever)

DATA=sample HF_RETRIEVER=facebook/contriever LLM=gpt-3.5-turbo-1106 SYNONYM_THRESH=0.8 GPUS=0,1,2,3 LLM_API=openai # LLM API 提供商,例如 'openai'、'together',见 'src/langchain_util.py' bash src/setup_hipporag.sh $DATA $HF_RETRIEVER $LLM $GPUS $SYNONYM_THRESH $LLM_API

检索

索引后,HippoRAG 已准备好协助在线检索。以下我们提供了两种使用 HippoRAG 的策略:

  1. 对一组预定义查询进行检索。
  2. 直接与我们的 API 集成以接收用户的查询。

预定义查询

要对上述格式的特定预定义查询集进行检索,我们根据您想使用的检索主干运行以下命令之一:

ColBERTv2

RETRIEVER=colbertv2 python3 src/ircot_hipporag.py --dataset $DATA --retriever $RETRIEVER --llm $LLM_API --llm_model $LLM --max_steps 1 --doc_ensemble f --top_k 10 --sim_threshold $SYNONYM_THRESH --damping 0.5

Huggingface 模型(即 Contriever)

RETRIEVER=$HF_RETRIEVER python3 src/ircot_hipporag.py --dataset $DATA --retriever $RETRIEVER --llm $LLM_API --llm_model $LLM --max_steps 1 --doc_ensemble f --top_k 10 --sim_threshold $SYNONYM_THRESH --damping 0.5

注意: 在此设置中,您可以将 HippoRAG 与 IRCoT 结合以获得互补的改进。要运行此操作,只需将上面的 --max_steps 参数更改为所需的最大 LLM 推理步骤数。此外,请确保在 data/ircot_prompt/ 下创建一个以您数据集名称命名的目录,并添加一个名为 gold_with_3_distractors_context_cot_qa_codex.txt 的文件,其中包含适用于您数据集的 IRCoT 提示。查看其他数据集的 IRCoT 提示以获取格式和内容灵感。

HippoRAG 集成

我们在 src/test_hipporag.py 中提供了一个示例,以指导希望将 HippoRAG API 直接集成到他们代码库中的用户。

from src.langchain_util import LangChainModel from src.qa.qa_reader import qa_read import argparse from src.hipporag import HippoRAG if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--dataset', type=str, required=True, default='sample') parser.add_argument('--extraction_model', type=str, default='gpt-3.5-turbo-1106') parser.add_argument('--retrieval_model', type=str, required=True, help='例如 "facebook/contriever", "colbertv2"') parser.add_argument('--doc_ensemble', action='store_true') parser.add_argument('--dpr_only', action='store_true') args = parser.parse_args() assert not (args.doc_ensemble and args.dpr_only) hipporag = HippoRAG(args.dataset, 'openai', args.extraction_model, args.retrieval_model, doc_ensemble=args.doc_ensemble, dpr_only=args.dpr_only, qa_model=LangChainModel('openai', 'gpt-3.5-turbo')) queries = ["哪位斯坦福大学教授在研究阿尔茨海默症"] # qa_few_shot_samples = [{'document': '', 'question': '', 'thought': '', 'answer': ''}] # 准备一个用于少样本 QA 的列表,其中每个元素是一个包含 'document'、'question'、'thought'、'answer' 键的字典('document' 和 'thought' 是可选的) qa_few_shot_samples = None 对于每个查询: 排名、分数、日志 = hipporag.给文档排名(查询, 前k个=10) 检索到的段落 = [hipporag.通过索引获取段落(排名) for 排名 in 排名列表] 回复 = qa_阅读(查询, 检索到的段落, qa少量样本, hipporag.qa模型) 打印(排名) 打印(分数) 打印(回复) 要初始化HippoRAG类的实例,只需选择一个**LLM**和一个**检索编码器模型**,这些模型你之前已用于为检索数据集建立索引。 ### 自定义数据集演示 要在自定义数据集上运行HippoRAG,请按照上述步骤进行索引和检索,同时还要添加数据处理和评估。以下是[BEIR](https://arxiv.org/abs/2104.08663)数据集的示例,请参见`src/data_process`和`src/demo`。 ## 论文复现 在本节中,你将找到复现[我们论文](https://arxiv.org/abs/2405.14831)中所示结果所需的所有代码。 ### 数据 我们提供了复现我们实验所需的所有必要数据。 为了在复现过程中节省成本和时间,我们还包括了通过GPT-3.5 Turbo (1106)、两个Llama-3模型和REBEL在所有三个子集和超参数调优数据集上生成的知识图谱。我们还包括了通过GPT-3.5 Turbo (1106)在所有数据集上获得的NER结果。 ### 基线 更多详情请查看`src/baselines/README.md`。 ### 运行HippoRAG 使用我们的HippoRAG框架需要两个步骤:索引和检索。 #### 索引 要为我们的主要实验和消融实验运行索引,请运行以下bash脚本。如果此步骤未成功,检索将失败。 ```shell bash src/setup_hipporag_main_exps.sh $GPUS

HippoRAG检索

运行索引后,运行以下bash脚本以使用HippoRAG和Contriever及ColBERTv2测试单步和多步检索。

仅HippoRAG
bash src/run_hipporag_main_exps.sh
HippoRAG与IRCoT
bash src/run_hipporag_ircot_main_exps.sh
消融实验

要运行所有消融实验,请运行以下bash脚本:

bash src/setup_hipporag_ablations.sh $GPUS bash src/run_hipporag_ablations.sh

超参数调优

要复现我们的超参数调优,我们必须首先通过运行以下脚本在MuSiQue训练子集上运行索引:

bash src/setup_hipporag_hyperparameter_tune.sh $GPUS

索引完成后,运行以下脚本并记录测试的每个超参数组合的性能。

bash src/run_hipporag_hyperparameter_tune.sh

问答

更多详情请查看src/qa/README.md。运行QA只能在运行基线和HippoRAG的检索之后进行,因为它使用检索的输出。

路径查找多跳QA案例研究

要运行我们论文中展示的案例研究示例(我们也包括在数据目录中),请运行以下脚本。请注意,要运行这些示例,需要设置你自己的OpenAI API密钥。

索引

bash src/setup_hipporag_case_study.sh $GPUS

检索

bash src/run_hipporag_case_study.sh

运行这些之后,你可以在output/ircot/目录中探索输出。

待办事项

  • 本地部署的LLM
  • 提示灵活性
  • 支持图形数据库,如Neo4j
  • 图的读/写API

联系

有问题或问题?提交一个issue或联系 Bernal Jiménez Gutiérrez, Yiheng Shu, Yu Su, 俄亥俄州立大学

引用

如果你觉得这项工作有用,请考虑引用我们的论文:

@article{gutiérrez2024hipporag,
      title={HippoRAG: Neurobiologically Inspired Long-Term Memory for Large Language Models}, 
      author={Bernal Jiménez Gutiérrez and Yiheng Shu and Yu Gu and Michihiro Yasunaga and Yu Su},
      journal={arXiv preprint arXiv:2405.14831},
      year={2024},
      url={https://arxiv.org/abs/2405.14831}
}

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多