论文解读之Generative Dense Retrieval: Memory Can Be a Burden

本次论文解读,博主带来生成式稠密检索:记忆可能成为一种负担的论文分享

一、简介

生成式检索根据给定的查询,自回归地检索相关的文档标识符,在小规模的文档库中表现不错,通过使用模型参数记忆文档库,生成式检索实现了查询和文档之间的深层次交互。

但是,这种记忆机制存在一些问题:1.对文档的细粒度特征记忆准确性不足2.当文档库规模变大时,记忆混淆情况加重3.新文档加入时记忆力更新的耗费很大,因为当新的文档到来时,文档聚簇树需要被更新,模型也需要被再次训练来记住所有的文档。

本论文中,作者提出生成式稠密检索范式,从粗到细粒度的匹配路径上,利用稠密检索和生成式检索两种方式进行优劣互补。

具体来说:首先使用有限的记忆容量实现了查询到相关的文档簇的匹配,再将不用记忆力的稠密检索引入了细粒度的簇内匹配,即从簇到相关的文档。

二、相关工作

2.1 稠密检索

使用二编码器结构来提取查询和文档的稠密语义表示,使用相似度如欧氏距离来计算这些特征之间的相似度,排序后给出匹配的结果。

但是,存在一些问题。比如,大多数查询和多个文档在语义空间上很接近,但是这些文档彼此在语义空间上不一定很接近,因此,使用一个查询通过匹配机制将所有的相关的文档进行召回是很困难的。

2.2 生成式检索

使用自回归模型,结合K近邻算法来产生带有层次信息的识别符,存在简介中提出的问题,在博主的上一篇博客中详细介绍过。

三、实验方法

3.1 两种机制的应用顺序

在查询到簇的匹配中,使用NCI即记忆机制可以减少错误,但是当文档变多时,注意机制性能下降会更加明显;而使用AR2即稠密检索模型,可以在文档变多时处理细粒度的特征。

3.2 簇间匹配

先使用查询编码器将查询编码成query embedding,取cls token作为查询的表示。将这个概率作为簇间的映射得分

对于每一个查询和相关文档的训练数据对,以这种形式的损失函数优化模型:

3.3 簇内匹配

文档id使用文档编码器产生,应用稠密检索的方法,计算查询和文档间的内积作为相似度。

使用如下的负对数似然损失函数,使得模型倾向于增加正确类别的概率:

总的映射得分为:

3.4 建立内存友好的簇id

满足两种特性:(1)含有和查询相关文档的多个簇的标识符共享前缀(2)簇的数量被内存决定而不是文档的数量,以此防止内存溢出

(1)通过微调ERNIE2.0-base而不是BERT作为文档编码器,然后计算在验证集上的每个查询的相关文档的簇id的平均前缀重叠来衡量对(1)特性的实现程度。

(2)动态调整c也就是簇中的文档的数量来保持簇的数量不变。

3.5 簇适应负采样

GDR在候选簇中检索相关文档而不是整个文档库,因此需要更多簇内的辨别信号

故此,选取簇内以及批次内的样本集,调整了簇内损失函数

3.6 训练和推理

选取一些这俩阶段中比较有趣的方法

采用DocT5Query方法对文档产生假标签做数据增强。

推理阶段:

先产生k个相关的簇ids,接着在每个相关的簇中检索前m个相关的文档,然后用这个总得分计算后取top-k

局限性

1.推理速度慢,因此应用于实时检索系统困难

2.前k个准确率指标落后,猜测为部分查询编码器的能力被用来执行簇内匹配任务,影响了簇内匹配的准确率。

3.训练慢,未在大型的文档库中进行实验

### 生成式检索 tsgen 工具概述 `tsgen` 是一款专注于代码生成和检索增强的工具,特别适用于 TypeScript 和 JavaScript 开发者。该工具融合了多种先进的技术理念,如查询式 RAG (Retrieval-Augmented Generation),旨在提升开发者的工作效率和代码质量[^1]。 #### 安装与环境准备 为了使用 `tsgen`,首先需确保环境中已安装 Node.js 及 npm 或 yarn。接着可以通过以下命令全局安装: ```bash npm install -g tsgen # 或者使用yarn yarn global add tsgen ``` #### 基本使用流程 ##### 创建项目结构 初始化一个新的项目目录,并设置必要的文件夹结构以便于管理不同类型的资源文件。这一步骤对于后续操作至关重要,因为良好的组织有助于提高开发体验。 ##### 初始化配置 运行如下命令启动初始配置向导,按照提示完成基本参数设定: ```bash tsgen init ``` 此过程将引导用户定义目标编程语言、框架支持以及其他偏好选项,从而自动生成适合当前项目的默认配置文件 `.tsgencfg.json`。 #### 功能特性展示 ##### 查询驱动型代码生成功能 借助内置的强大搜索引擎,`tsgen` 能够快速定位并提取互联网上公开可用的最佳实践案例作为参考素材。这些材料随后被用来指导新的代码片段编写,确保产出既高效又符合社区标准。 例如,在面对复杂的 API 请求处理场景时,只需简单描述需求即可获得完整的解决方案建议: ```typescript // 自然语言描述转TypeScript实现 const result = await fetch('https://api.example.com/data') .then(response => response.json()) .catch(error => console.error('Error:', error)); console.log(result); ``` ##### 结合 FLARE 技术优化生成效果 除了传统的基于规则的方法之外,`tsgen` 还集成了最新的 FLARE 方法论,即在实际编码期间动态引入外部知识库的支持,使得即使是最棘手的问题也能迎刃而解[^2]。 考虑这样一个情况——当遇到难以理解的功能模块时,系统会自动寻找最接近的例子供参考学习;如果存在多个候选方案,则进一步分析上下文信息挑选最优解法。 #### 实际应用案例 假设正在构建一个简单的博客平台前端页面,其中涉及到文章列表渲染功能。利用 `tsgen` 提供的服务,仅需几行简洁明了的文字说明就能得到满足业务逻辑要求的结果: ```typescript import React, { useState } from 'react'; function BlogList({ posts }) { const [selectedPostId, setSelectedPostId] = useState(null); return ( <div> {posts.map(post => ( <article key={post.id} onClick={() => setSelectedPostId(post.id)}> <h2>{post.title}</h2> <p>{post.excerpt}</p> </article> ))} {/* 显示选中的帖子详情 */} {selectedPostId && ( <section> <button onClick={() => setSelectedPostId(null)}>返回</button> <DetailedView postId={selectedPostId} /> </section> )} </div> ); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值