LongRAG: Enhancing Retrieval-Augmented Generation with Long-context LLMs

本文是LLM系列文章,针对《LongRAG: Enhancing Retrieval-Augmented Generation with Long-context LLMs》的翻译。

LongRAG:用长上下文LLM增强检索增强生成

摘要

在传统的RAG框架中,基本检索单元通常很短。像DPR这样的常见检索器通常处理100个单词的维基百科段落。这样的设计迫使检索器在大型语料库上搜索以找到“针”单元。相比之下,读者只需要从检索到的简短单元中提取答案。这种不平衡的“重”检索器和“轻”读取器设计可能导致次优性能。为了缓解这种不平衡,我们提出了一个新的框架LongRAG,由“长检索器”和“长阅读器”组成。LongRAG将整个维基百科处理成4Ktoken单元,比以前长了30倍。通过增加单元大小,我们将总单元从2200万个显著减少到600万个。这显著降低了检索者的负担,从而获得了显著的检索分数:答案recall@1=在NQ上占71%(之前为52%)并回答recall@2在HotpotQA(完整的wiki)上=72%(之前为47%)。然后,我们将前k个检索单元(≈30Ktoken)馈送到现有的长上下文LLM,以执行零样本答案提取。在不需要任何训练的情况下,LongRAG在NQ上实现了62.7%的EM,在HotpotQA(完整的wiki)上实现了64.3%的EM,这与(完全训练的)SoTA模型不相上下。我们的研究为将RAG与长期LLM相结合的未来路线图提供了见解。

1 引言

2 相关工作

3 LongRAG

4 实验

5 结论

在本文中,我们提出了一个新的框架LongRAG,以缓解检索器负担之间的不平衡。LongRAG框架由一个“长检索器”和一个

### NeXtSRGAN 超分辨率 GAN 的实现 NeXtSRGAN 是一种基于 Super-Resolution GAN 的改进模型,其核心在于利用 ConvNeXt 构建判别器网络以提升图像细节的表现力和生成质量。以下是有关其实现的关键部分: #### 判别器设计 ConvNeXt 结构被引入到判别器的设计中,通过分层特征提取来增强对高分辨率图像真实性的判断能力。ConvNeXt 使用深度可分离卷积以及残差连接机制,在保持计算效率的同时提升了性能[^1]。 ```python import tensorflow as tf from tensorflow.keras import layers def convnext_block(input_tensor, filters, kernel_size=7): x = layers.DepthwiseConv2D(kernel_size=kernel_size, padding='same')(input_tensor) x = layers.LayerNormalization(epsilon=1e-6)(x) x = layers.Dense(filters * 4)(x) x = layers.Activation('gelu')(x) x = layers.Dense(filters)(x) return layers.Add()([input_tensor, x]) def build_discriminator(img_shape=(128, 128, 3), num_blocks=3): input_img = layers.Input(shape=img_shape) x = layers.Conv2D(64, kernel_size=3, strides=2, padding="same")(input_img) x = layers.LeakyReLU(alpha=0.2)(x) current_filters = 64 for _ in range(num_blocks): x = convnext_block(x, current_filters) current_filters *= 2 if current_filters > img_shape[-1]: break x = layers.Conv2D(current_filters, kernel_size=3, strides=2, padding="same")(x) x = layers.LeakyReLU(alpha=0.2)(x) x = layers.Flatten()(x) output = layers.Dense(1, activation='sigmoid')(x) model = tf.keras.Model(inputs=input_img, outputs=output, name="convnext_discriminator") return model ``` 上述代码展示了如何构建一个基于 ConvNeXt 的判别器架构。它采用逐步下采样的方式减少空间维度并增加通道数,从而捕获更深层次的语义信息[^2]。 #### 生成器设计 对于生成器而言,可以借鉴已有的超分辨率技术如 EDSR 或 RCAN 来搭建基础框架,并调整参数适配具体应用场景需求[^3]。 ```python def res_block(input_tensor, filters): shortcut = input_tensor x = layers.Conv2D(filters, kernel_size=3, padding='same', use_bias=False)(input_tensor) x = layers.ReLU()(x) x = layers.Conv2D(filters, kernel_size=3, padding='same', use_bias=False)(x) return layers.Add()([shortcut, x]) def upscale_ps(input_tensor, factor=2): return layers.UpSampling2D(size=factor, interpolation='bilinear')(input_tensor) def build_generator(lr_shape=(32, 32, 3)): inputs = layers.Input(shape=lr_shape) x = layers.Conv2D(64, kernel_size=9, padding='same')(inputs) x = layers.ReLU()(x) residual = x for _ in range(16): x = res_block(x, 64) x = layers.Conv2D(64, kernel_size=3, padding='same')(x) x = layers.BatchNormalization()(x) x = layers.Add()([residual, x]) x = upscale_ps(x, factor=4) out = layers.Conv2D(3, kernel_size=9, padding='same', activation='tanh')(x) generator_model = tf.keras.models.Model(inputs=[inputs], outputs=out, name="generator") return generator_model ``` 此段脚本定义了一个典型的残差块堆叠型生成器结构,适用于大多数 SISR(Single Image Super Resolution)任务中的低频重建阶段。 #### 训练过程概述 训练过程中需注意平衡生成器与判别器之间的对抗关系,通常会设置不同的损失函数组合来优化整体表现效果。例如 LSGAN 提倡使用的最小二乘误差替代传统交叉熵作为目标函数之一;而针对特定数据集特性还可能加入感知损失(perceptual loss),风格迁移项(style transfer term)等辅助约束条件进一步改善视觉体验品质。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

UnknownBody

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

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

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

打赏作者

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

抵扣说明:

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

余额充值