RAG
Introduction
RAG (Retrieval Augmented Generation)
LLM固有的局限性
- LLM的知识不是实时的
- LLM可能不知道你私有的领域、业务知识
使用LangChain编译RAG
RAG Papers
Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
[1] P. Lewis et al., Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks, Apr. 12, 2021, arXiv: arXiv:2005.11401.
-
这是最初RAG的模型
-
端到端训练:将检索到的文档视为隐变量
Methods:
- user prompt: $x$
- the target sequence: $y$
- database index: $z$ , 比如从wiki获得的内容的索引向量, 知识文本
- retriever $p_\eta(z|x)$ , Retriever的目的是根据输入$x$来寻找最适合的z ,(z是从数据库中查询到的?)
- generator: $p_\theta (y_i| x, z, y_{1:i-1})$ , 生成器是一个自回归的语言模型,(z指的是查询到的文章?)
在生成器中,我们想要的是$p_\theta (y_i| x, y_{1:i-1})$ ,把$z$从公式中去掉。本文提出了两种方案:
-
RAG-Sequence Model
生成模型的计算公式
使用全概率公式进行边缘化处理,把z消掉,得到一个y关于x的概率。在生成语句的时候,才把z去掉,即在生成整个sequence的时候才会决定哪些z会对我们的生成有重要的影响。这里使用的是前k个进行近似。
假设给定100个文档,模型根据每个文档都生成一句话,那麽总共会生成100句话。把它们整合起来生成最终的结果。
- RAG-Token Model
在生成每个tocken的时候,每个token都会被不同的z所影响。
在生成每个字的时候,都去参考这100个文档,看看哪篇文章的相关度大,让对应的文章影响最终的生成。
Retriever: DPR
- Bert based query encoder: $q(x)$
- Bert based document enoder: $d(z)$
Generator: BART
BART-large: 400M parameters
Performance:
此图所示的是后验概率
Self-RAG
[1] A. Asai, Z. Wu, Y. Wang, A. Sil, and H. Hajishirzi, Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection, Oct. 17, 2023, arXiv: arXiv:2310.11511. https://selfrag.github.io/
前文所述的 RAG 方法都遵循着共同的范式,即query+context→LLM
其中 query 表示用户的输入,context 表示检索获得的补充信息,然后共同输入到 LLM 中,可以认为这是一种检索前置的被动的增强方式。
相比而言,Self-RAG 则是更加主动和智能的实现方式,主要步骤概括如下:
- 判断是否需要额外检索事实性信息(retrieve on demand),仅当有需要时才召回
- 平行处理每个片段:生产prompt+一个片段的生成结果
- 使用反思字段,检查输出是否相关,选择最符合需要的片段;
- 再重复检索
- 生成结果会引用相关片段,以及输出结果是否符合该片段,便于查证事实。
Self-RAG 的一个重要创新是 Reflection tokens (反思字符):通过生成反思字符这一特殊标记来检查输出。这些字符会分为 Retrieve 和 Critique 两种类型,会标示:检查是否有检索的必要,完成检索后检查输出的相关性、完整性、检索片段是否支持输出的观点。模型会基于原有词库和反思字段来生成下一个 token。
HyKGE
X. Jiang et al., HyKGE: A Hypothesis Knowledge Graph Enhanced Framework for Accurate and Reliable Medical LLMs Responses, Apr. 19, 2024, arXiv: arXiv:2312.15883.
Triplex — SOTA LLM for Knowledge Graph Construction
知识图谱(例如 Microsoft 的Graph RAG)增强了 RAG 方法,但构建成本高昂。Triplex 可将知识图谱创建成本降低 98%,性能优于 GPT-4,成本仅为 GPT-4 的 1/60。
并且可以使用 SciPhi 的 R2R 框架快捷构建本地图谱。
Triplex 是 SciPhi.AI 开发的 Phi3-3.8B 的微调版本,用于从非结构化数据创建知识图谱。它的工作原理是从文本或其他数据源中提取三元组(由主语、谓语和宾语组成的简单语句)。
GraphRAG 与 Triplex 知识图谱擅长回答传统搜索方法通常难以回答的查询,尤其是人口级关系查询。例如,“提供一份就读技术学校的 AI 员工名单”。微软发布 GraphRAG 后,人们对知识图谱的兴趣愈演愈烈。
但是,知识图谱构建过程传统上非常复杂且资源密集,限制了其广泛应用。最近的估计表明,微软的 GraphRAG 程序成本特别高,要求为每个输入标记生成至少一个输出标记。这种高成本使其对于大多数应用程序来说不切实际。
Triplex 的目标是通过将知识图谱的生成成本降低十倍来彻底颠覆这一模式。这一成本降低是通过 Triplex 将非结构化文本转换为“语义三元组”——知识图谱的构建块——的有效方法实现的。
为了演示 Triplex 如何创建这些图谱,观察一下它如何处理简单的句子:
A Comprehensive Survey on Automatic Knowledge Graph Construction
Retrieval-Augmented Generation for Large Language Models: A Survey
[1] Y. Gao et al., Retrieval-Augmented Generation for Large Language Models: A Survey, Mar. 27, 2024, arXiv: arXiv:2312.10997.
References
Involution King Fun Book (IKFB, Chinese: 快卷, 卷王快乐本) is an integrated management system for papers and literature.
-
https://github.com/Tongji-KGLLM/RAG-Survey/blob/main/assets/RAG_Slide_ENG.pdf
-
bilibil - RAG和Self-RAG简介: https://nobleai.notion.site/LLM-RAG-acca19ee9a884fbc952e712dccd61832?pvs=4
[1] P. Lewis et al., Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks, Apr. 12, 2021, arXiv: arXiv:2005.11401. Accessed: Aug. 28, 2024. [Online]. Available: http://arxiv.org/abs/2005.11401
[1] D. Edge et al., From Local to Global: A Graph RAG Approach to Query-Focused Summarization, Apr. 24, 2024, arXiv: arXiv:2404.16130. Accessed: Aug. 19, 2024. [Online]. Available: http://arxiv.org/abs/2404.16130
[1] A. Asai, Z. Wu, Y. Wang, A. Sil, and H. Hajishirzi, Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection, Oct. 17, 2023, arXiv: arXiv:2310.11511. Accessed: Aug. 28, 2024.
[1] X. Jiang et al., HyKGE: A Hypothesis Knowledge Graph Enhanced Framework for Accurate and Reliable Medical LLMs Responses, Apr. 19, 2024, arXiv: arXiv:2312.15883.
Issues
- USER_AGENT environment variable not set, consider setting it to identify your requests.
import os
os.environ['USER_AGENT'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
For chrome: chrome://version/