Project Icon

HippoRAG

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

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

HippoRAG
神经生物学启发的长期记忆
用于大型语言模型

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

欲了解更多详情,请查看我们的论文

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}
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号