论文笔记:Retrieval-Augmented Generation forAI-Generated Content: A Survey

北大202402的RAG综述

1 intro

1.1 AICG 

  • 近年来,人们对人工智能生成内容(AIGC)的兴趣激增。各种内容生成工具已经精心设计,用于生产各种模态下的多样化对象
    • 文本&代码:大型语言模型(LLM),包括GPT系列和LLAMA系列
    • 图像:DALL-E和Stable Diffusion
    • 视频:Sora
  • "AIGC"这一词强调内容是由高级生成模型而非人类或基于规则的方法产生的
    • 基础模型的架构最初由数百万参数组成,现在已增长到包含数十亿参数

1.2 信息检索

  • 检索旨在从庞大的资源池中定位相关的现有对象
    • 在当前时代,高效的信息检索系统可以处理高达数十亿的文档集合
    • 除了文档外,检索还已应用于其他模态

1.3 AICG的挑战

  • 难以保持知识的最新性
  • 无法整合长尾知识
  • 泄露私有训练数据的风险

1.4 RAG

  • 为了缓解上述挑战,提出了检索增强生成(RAG)
    • 用于检索的知识可以被概念化为非参数记忆
    • 这种形式的记忆容易修改,能够容纳广泛的长尾知识,并且还能编码机密数据
    • 检索还可以用来降低生成成本

  • 一个典型的RAG过程包括:
    • 给定一个输入查询,检索器定位并查找相关的数据源
    • 检索到的结果与生成器互动,以增强整体的生成过程
      • 可以通过不同的方式与生成过程交互
        • 作为生成器的增强输入
        • 在生成的中间阶段以潜在表征的形式加入
        • 以logits的形式贡献到最终的生成结果中
        • 影响或省略某些生成步骤
  • 虽然RAG的概念最初出现在文本到文本的生成中,但它也已被适应于各种领域
    • 代码
    • 音频
    • 图像
    • 视频
    • 知识
    • 科学领域

1.5 本文贡献

  • 提供了关于RAG的全面概述,覆盖了基础、增强、应用、基准测试、限制和潜在的未来方向

2 preliminary

  • 整个RAG系统由两个核心模块组成:检索器和生成器
    • 检索器负责从构建的数据存储中搜索相关信息
    • 生成器负责产生生成的内容

2.1 生成器

  • 将生成器分类为4个主要组别:Transformer、LSTM、扩散模型和GAN
2.1.1 Transformer

2.1.2 LSTM

2.1.3 扩散模型

  • 扩散模型通过逐渐向数据添加噪声直至变成随机,然后反转这一过程从噪声生成新数据
  • 这一过程基于概率建模和神经网络
  • 扩散模型主要有三种等效表述:
    • 去噪扩散概率模型
    • 基于分数的生成模型
    • 随机微分方程

  • 记x0是一个随机变量,遵循数据分布q(x0);xt是一个在时间步t添加噪声后遵循分布q(xt|x0)的随机变量,DDPM可以如下表述:
    • 前向过程
      • 通过一系列高斯噪声注入扰乱数据,将数据分布q(x0)转化为一个简单的先验分布q(xT) ≈ N(0, I)
      • 每个时间步的转移核由以下给出:
        • βt∈(0,1)是超参数
    • 反向过程
      • 通过一个可学习的马尔可夫链反转前向过程,生成新的数据样本
      • 反向过程从采样xT​∼p(xT​)开始,迭代地采样xt−1​∼pθ​(xt−1​∣xt​)直到t=0
    • 模型训练
      • 模型训练的目标是最大化数据x0的对数似然的变分下界(VLB)

2.1.4 GAN

  • 典型的GAN由两个主要组成部分:一个生成器和一个鉴别器。
  • 这两部分通过对抗学习相互竞争,使得生成器不断提高其生成逼真样本的能力,同时鉴别器不断提高其区分真伪样本的能力。

2.2 检索

  • 检索旨在识别和获取与信息需求相关的信息系统资源
  • 存储的信息资源为(k_i,v_i)_{i=1}^N,k为键值,v为value
  • 给定一个查询q,目标是使用相似度函数s搜索最相似的前k个键,并获取配对的值
2.2.1 稀疏检索器
  • 广泛用于文档检索
  • 利用词项匹配度量如TF-IDF、查询似然和BM2,分析文本中的词项统计并构建倒排索引以实现高效搜索
    • 其中,BM25是工业规模网络搜索中难以超越的基线
    • 对于包含关键词\{q_i\}_{i=1}^n的查询q,文档D的BM25得分是
2.2.2 密集检索器
  • 使用密集嵌入向量表示查询和键,并构建近似最近邻(ANN)索引以加速搜索
### 关于 LightRAG 的代码实现 LightRAG 是一种将图结构引入文本索引的方法,旨在通过构建图结构捕捉实体间的复杂关系。这种方法允许系统更高效地处理复杂的多跳查询,特别是在涉及多个文档段落的情况下[^1]。 尽管目前没有直接提及具体的 LightRAG 实现细节或官方代码库的信息,但从其描述来看,可以推测其实现有赖于以下几个关键技术点: #### 1. 图结构的构建 为了支持高效的多跳查询,LightRAG 需要先构建一个基于实体和关系的图结构。这种图可以通过以下方式实现: - 使用 Python 中的 `networkx` 库来创建和操作图数据结构。 - 将实体作为节点,关系作为边存储在图中。 以下是简单的图构建示例代码: ```python import networkx as nx # 创建有向图 G = nx.DiGraph() # 添加节点(实体) G.add_node("Entity_A", type="Person") G.add_node("Entity_B", type="Location") # 添加边(关系) G.add_edge("Entity_A", "Entity_B", relation="visited") # 输出图信息 print(G.nodes(data=True)) print(G.edges(data=True)) ``` #### 2. 文本索引与检索 LightRAG 结合了双层次检索模式,这意味着它可能依赖某种形式的倒排索引来加速文本匹配过程。具体来说,可以利用 Elasticsearch 或 FAISS 来完成这一部分功能。 FAISS 示例代码如下: ```python import faiss import numpy as np # 构建索引 dimension = 128 # 嵌入维度 index = faiss.IndexFlatL2(dimension) # 插入嵌入向量 vectors = np.random.rand(100, dimension).astype('float32') index.add(vectors) # 查询最近邻 query_vector = np.random.rand(1, dimension).astype('float32') distances, indices = index.search(query_vector, k=5) print(indices) ``` #### 3. 多跳推理机制 对于多跳查询的支持,通常需要设计递归式的查询逻辑或者借助 Transformer 编码器解码器架构进行上下文理解。这部分可以从 RAG (Retrieval-Augmented Generation) 系统的设计思路出发[^2]。 假设我们已经有了预训练的语言模型,则可以在 PyTorch 上搭建基础框架: ```python from transformers import AutoTokenizer, AutoModelForSeq2SeqLM tokenizer = AutoTokenizer.from_pretrained("facebook/rag-token-base") model = AutoModelForSeq2SeqLM.from_pretrained("facebook/rag-token-base") def generate_response(contexts, question): inputs = tokenizer([question], return_tensors="pt") with tokenizer.as_target_tokenizer(): targets = tokenizer([""], return_tensors="pt")["input_ids"] outputs = model.generate( context_input_ids=contexts, **inputs ) response = tokenizer.decode(outputs[0], skip_special_tokens=True) return response contexts = ... # 提供从数据库检索到的相关段落 question = "What is the capital of France?" response = generate_response(contexts, question) print(response) ``` 虽然上述代码片段并未完全针对 LightRAG 进行定制化开发,但它展示了如何结合外部知识源增强生成能力的核心理念。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值