今天是2024年11月3日,星日,北京,天气晴。
我们先开回顾下昨日前沿进展,供大家参考。
另一个,本文来介绍下一个工作,FlexRAG,这个RAG的思路还不错。
后者是知识图谱与RAG的另一个结合思路,供大家一起参考并思考。
一、FlexRAG长文本进展
现有的RAG系统在处理长篇幅的检索上下文时,需要大量的计算资源进行编码,导致运行成本高昂。
目前有相关的工作,如Figure 1 所示,其展示了与 FlexRAG 相关的技术比较,这个图说明了不同的技术是如何对检索到的上下文进行处理以提高检索增强生成(RAG)系统的效果。
一个是上下文压缩(Context Compression):将 token 嵌入(即文本中每个单词的向量表示)压缩成更紧凑的摘要向量(summary vectors)。这样做的目的是减少上下文的数据量,同时尽量保留重要的信息。通过压缩,可以减少模型处理上下文时的计算负担,提高效率。
一个是上下文过滤(Context Filtering):从输入提示中筛选出重要的 token 嵌入。这意味着只有与任务最相关的信息被保留,而其他不太重要的信息则被过滤掉。过滤有助于去除噪声和不相关的信息,使得模型能够更专注于对任务有用的信息。这个之前有说过很多,包括基于互信息方案。
一个是提示微调(Prompt Tuning):通过学习一个软提示(soft-prompt)来改善下游任务的性能。软提示是一种可训练的提示,可以帮助模型更好地理解和执行特定的任务。通过调整提示,模型可以更好地适应特定的任务,提高任务的准确性和效果。
二、FlexRAG长文本RAG压缩思路
接着说,还是图1,FlexRAG 将上述所有功能集成在一个框架中。不仅压缩上下文(summary vectors),还根据重要性对这些压缩的嵌入进行下采样(即过滤),并且学习如何优化 RAG 性能(即提示微调)。
因此,可以看看这个工作《Lighter And Better: Towards Flexible Context Adaptation For Retrieval Augmented Generation》,https://arxiv.org/pdf/2409.15699,从实现原理上看, FlexRAG包括三个方面:
一个是压缩上下文,首先,FlexRAG将检索到的上下文压缩成紧凑的嵌入表示。为了实现这一点,FlexRAG在离线阶段对外部文档进行预编码,生成压缩嵌入,并在检索到特定RAG任务的相关文档时对这些压缩嵌入进行下采样。
一个是选择性压缩,FlexRAG通过估计上下文的重要性来实现选择性压缩,采用两种估计上下文重要性: token级别估计基于LLM对输入提示中令牌的重要性估计:
句子级别估计使用通用嵌入器(如E5和BGE)来估计句子与任务提示的相关性:
压缩比分配:为了平衡压缩效果和上下文信息的保留,根据估计的重要性对上下文进行分组,并为每组分配不同的压缩比
一个是两阶段训练,第一阶段在无标签数据上进行自回归预训练,以建立压缩模块与下游LLM之间的初步对齐,预训练的目标函数是最大化基于压缩上下文的语言建模概率:
第二阶段使用指令调优数据集进行任务特定的微调,优化RAG任务的答案质量,具体基于问题和压缩检索上下文预测真实答案,
总结
本文主要回顾下昨日大模型进展以及一个RAG工作,里面涉及到降低到长文本RAG的推理压力的一些细分方案,各位可进一步了解下。
参考文献
1、https://arxiv.org/pdf/2409.15699
关于我们
老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。
加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入