A Retrieval-Augmented Generation System Based on a Sliding Window Strategy in Large Language Models
-
摘要:
提出了一种基于滑动窗口策略的检索增强生成系统,旨在提升大语言模型(large language models,LLMs)输出的事实准确性和可靠性. 该系统通过在索引阶段应用滑动窗口机制,有效解决了传统固定大小上下文窗口和静态检索方法的局限性. 研究提出3种具体的滑动窗口策略以有效处理和分割文本,包括:固定窗口大小和固定步长分割(fixed window size and fixed step length split,FFS)、动态窗口大小和固定步长分割(dynamic window size and dynamic step length split,DFS)以及动态窗口大小和动态步长分割(dynamic window size with fixed step length split,DDS). 此外,研究还探讨了使用多查询技术进一步提高检索的准确性和相关性. 实验评估使用Llama-3模型在多个数据集上进行,结果表明在窗口大小为1 024和步长为3的配置下达到最佳性能,该配置显著提高了F1得分,体现了在文档段长度和滑动窗口步长之间保持平衡的重要性. 滑动窗口策略有效保留了上下文信息,减少了信息丢失,并展示了在不同数据集和查询类型中的适应性.
Abstract:Leveraging a sliding window strategy, this study presents an innovative retrieval-augmented generation system aimed at enhancing the factual accuracy and reliability of outputs from large language models (LLMs). By applying a sliding window mechanism during the indexing phase, the project effectively addresses the limitations of fixed context window sizes and static retrieval methods. Three specific sliding window strategies have been proposed to efficiently process and segment texts: Fixed Window Size and Fixed Step Length Split (FFS), Dynamic Window Size and Fixed Step Length Split (DFS), and Dynamic Window Size and Dynamic Step Length Split (DDS). To further enhance retrieval accuracy and relevance, the project employs multiple advanced query techniques, including query expansion and reformulation. Rigorous experimental evaluations were conducted using the state-of-the-art Llama-3 model across multiple diverse datasets, encompassing both general knowledge and domain-specific corpora. Results demonstrated optimal performance with a carefully calibrated block size of 1 024 tokens and a step size of 3, significantly improving the F1 score across various tasks. This configuration highlighted the critical importance of balancing document segment length and sliding window step size to maximize information retention and retrieval efficacy.The sliding window strategy effectively preserves contextual information, reduces information loss, and exhibits adaptability across different datasets and query types.
-
大语言模型(large language models,LLMs)是一类旨在大规模理解、生成并与人类实现语言互动的复杂人工智能系统[1]. 在人工智能领域的前沿应用中,特别是诸如知识问答等场景,生成准确且事实正确的信息变得至关重要[2-3]. 随着LLMs能力的不断提升,其可靠性问题也日益凸显. 一个显著的问题是这些模型倾向于生成看似合理但实际错误的信息,这种现象被称为LLMs幻觉,其严重削弱了人工智能驱动系统的可信度[4-6].
检索增强生成(retrieval-augmented generation, RAG)框架在解决上述问题方面代表了一项重要的突破[7]. RAG通过将检索机制直接集成到LLMs的生成过程中,使模型能够实时访问并整合来自外部的上下文相关信息[8-9]. 在需要事实高度准确的应用中,这种集成至关重要,其有助于确保生成的内容是合理、准确并基于可验证的信息.RAG框架因此极大增强了LLMs输出的可靠性,使其在关键决策场景中更值得用户信赖[10].
尽管RAG框架展示了其创新性,但它仍面临诸多显著挑战,特别是在高度依赖上下文信息精确检索方面. RAG的整体有效性在很大程度上依赖于从外部数据源或知识库中检索到的信息的相关性和准确性[11]. 如果检索组件未能成功获取到相关信息,或获取的数据存在错误或误导性内容,那将不可避免地对最终生成的内容质量产生显著负面影响[12]. 为应对这些问题,我们提出使用滑动窗口技术,该方法可以通过动态调整窗口大小来增强对上下文信息的捕捉,减少信息丢失,并提高检索结果的准确性. 这种技术已在相关研究中被证明能有效提升模型的表现,特别是在处理长文本或多段复杂信息时表现尤为突出[13].
LLMs正在迅速发展,现已能够处理超过
200000 个标记的扩展上下文,从而显著提升了长文档问答的能力[14-15],这种新进展让LLMs在一定程度上不再受限于上下文长度,使整个文档得以纳入提示词成为可能,但RAG依然不可或缺,原因如下:将大量上下文一次性输入LLMs会显著影响其推理速度,而采用分块检索和按需输入则可以大幅提高系统效率;同时,基于RAG的生成方式可以快速定位LLMs生成答案所依据的原始参考资料,这种特性能够帮助用户验证响应的准确性;此外,与仅依赖长上下文生成响应的黑盒性质相比,RAG的整个检索和推理过程都是可观察的. 长文档问答的能力反而为RAG的发展提供了新的机遇,使其能够解决更为复杂的问题,并有能力回答那些需要广泛审查材料的综合性或总结性问题[16-17].本文介绍了滑动窗口检索增强生成系统,这是一种在RAG框架内的新方法,旨在提高大语言模型的可靠性. 本系统通过根据文本内容动态调整窗口大小和步长,旨在提高检索信息的精度和上下文相关性. 项目的贡献包括:
1)提出3种不同的文本分割策略以适应多样的文本结构和连贯性需求,包括:固定窗口大小和固定步长分割(FFS)、动态窗口大小和固定步长分割(DFS),以及动态窗口大小和动态步长分割(DDS). 这些策略灵活调整窗口大小和步长,以更好捕捉文本中的关键信息,同时确保分割后文本片段的连贯性.
2)将这些文本分割策略与多查询机制集成,以提高检索结果的准确性. 通过两者结合,本系统能够更加准确地从外部数据源提取和整合相关信息,从而生成更可靠和可信的内容.
3)经过一系列的实验研究,本系统在解决生成内容中常见的幻觉问题及提升生成的信息准确性方面的有效性得到充分验证和高度认可.
项目的研究展示了滑动窗口检索增强生成系统在提升大语言模型输出可靠性方面的潜力,特别是应用在需要高事实准确性的项目中. 通过动态调整文本分割策略和多查询机制,滑动窗口检索增强生成系统不仅提高了检索信息的精度,还增强了生成内容的上下文相关性和连贯性,从而为用户提供更可信赖的生成式人工智能解决方案.
1. 相关工作
Gao等人[10]将RAG的范式划分为3个阶段:初级RAG、进阶RAG和模块化RAG,这些阶段代表了RAG技术从基本的索引检索方法发展到复杂且进一步模块化的演进路径. 每个范式都固有地包含一个检索组件,突显了持续优化的必要性. RAG系统的优化可以分为3个主要类别:检索源优化、索引优化和查询优化[18].
在检索源优化阶段,Luo等人[19]提出了将表格数据转换为文本格式,从而便于应用基于文本的分析方法,然而此方法在实际应用中通常表现出较低的准确性. 值得注意的是,一个显著的进展是G-Retriever系统的提出,该系统巧妙地融合了图神经网络、大语言模型和检索生成技术. 通过对大语言模型进行软提示,G-Retriever系统显著提升了其图结构理解和问答处理能力. 此外,该系统采用奖收集斯坦纳树优化方法,成功实现了有针对性地图检索[20]. 尽管这一方法确实具备显著的优点,但建设、验证以及维护结构化数据库依然需要投入大量的精力与资源.
在索引优化阶段,文档会经过处理、分割,并最终转换成嵌入形式存储在向量数据库中. 高质量的索引构建是至关重要的,直接影响到检索的精度. 一种普遍采用的方法是将文档按固定大小的块进行分割(如100,256或512个标记)[21]. 虽然使用较小的块可以有效减少噪音,但这种方式不能完全传达所需的上下文信息. 此外,将文档分割成块可能会导致句子内部发生截断现象,这一问题引发了递归分割技术的研究,该技术通过在多次检索过程中合并全局相关信息,以实现更层次化的检索[22],然而递归分割技术存在灵活性不足和性能较差的缺点. 项目在借鉴这一策略的基础上,将数据划分为特定的字符串和词语元素,但在语义完整性与上下文长度之间找到最佳平衡依然困难. 为解决此问题,项目进一步提出滑动窗口策略的思想,通过在相邻文本块间引入适度重叠,增强连贯性并保持文本的完整性. 此外,该策略具有较低的时间复杂度,有效平衡了语义完整性与计算效率.
在查询优化阶段,RAG的主要挑战之一是其对用户原始查询的依赖,这通常会导致次优结果,Dhuliawala等人[23]开发了“验证链”方法通过LLMs对扩展查询进行验证,以提高可靠性. 在实际应用中,原始查询叶可能不适合检索,提示LLMs重写查询已被验证是有效的,“重写-检索-阅读”模型[24]以及在淘宝BEOUE系统中实施查询重写方法[25]均显著提高了长尾查询的召回效果.
2. 方法概述
每个基于滑动窗口策略的检索增强生成系统包含2个主要组件:由参数θ表示的文本生成模型Gθ,以及由参数ϕ表示并从大型文档集合C中检索文档的检索模型Rϕ.
2.1 问题定义
RAG期望效用定义如式(1)所示,首先设T={(x1,y1),(x2,y2),…,(xn,yn)} 为包含n对的xi(输入文本)和yi(真实输出文本)的训练集,并设U为效用函数,其接受由RAG系统生成的输出ˆy 和真实输出y,并生成1个标量值.
期望效用=1n∑(x,y)∈T∑ˆy∈YU(y,ˆy)p(ˆy|x;Gθ,Rφ). (1) 效用函数可以是任意的度量标准,包括但不限于精确匹配、术语重叠F1,BLEU,ROUGE. 项目假设:
1)效用值越高越好;
2)效用函数在[0, 1]范围内;
3)U(y,ˆy)=1.
本项目将RAG的期望效用定义为式(1),其中y代表输出空间,即所有可能的输出文本. 在某些模型中,输出空间是有限的,例如在事实验证中,输出空间通常是二元的,即给定的候选事实要么是真实的,要么是虚假的. 然而,在其他情况下,如自由形式的文本生成,输出空间则是无限的.
在RAG系统中生成任意给定输出ˆy 的概率可以建模为式(2):
p(ˆy|x;Gθ,Rφ)=∑d∈πk(C)p(ˆy,d|x;Gθ,Rφ)=∑d∈πk(C)p(ˆy|x,d;Gθ)p(d|x;Gθ,Rφ)=∑d∈πk(C)p(ˆy|x,d;Gθ)p(d|x;Rφ), (2) 其中πk(C) 表示从检索集合C中选择k个文档的所有排列组合. 式(2)的第1步是使用全概率公式,第2步使用链式法则,第3步则基于结果列表d被检索到的概率与文本生成模型Gθ无关这一事实.
项目的主要目标在于提高检索到相关文本的概率,具体来说,就是增加结果列表d中包含相关信息的概率. 为了实现这一目标,项目引入了索引过程,其关键在于将原始、未经结构化处理的内容转化成计算机能够理解和处理的格式. 这个过程不仅使得内容的结构变得更加清晰,还显著提升了计算机对数据的解析和操作能力. 通过这样的转化,索引内容得以更高效地存储和组织起来,从而为后续的信息检索和数据处理任务打下坚实基础.
具体过程如图1所示,该过程的初始步骤包括对内容进行索引处理,其中非结构化的内容首先被转换为长文本格式,然后再被细分成多个“块”,每个块包含相对独立的信息单元. 这些块经过处理后会被嵌入并存储在向量数据库中,以确保每条信息可以在需要时进行高效的检索和分析.
为此,项目提出了一种滑动窗口的方法,用以有效地将文档拆分为一系列独立的块. 如式(3)所示,在该公式中,w表示窗口大小,s表示步长,D表示文档,而n是生成的块的数量,其取决于文本的长度、窗口的大小和步长的长度. 函数f生成一系列块:
[W1,W2,…,Wn]=f(D,w,s). (3) 该问题的核心挑战在于选择适当的分割方法并确定合适的w和s值,以确保:
1)每个块内的连贯性,避免在重要语义单元(如句子中间或关键上下文连接处)中断.
2)全面捕捉D中的所有关键信息,确保生成的块中没有遗漏.
3)提升方法对各种文本结构和内容的适应性,满足多种应用场景的需求.
2.2 滑动窗口的基本概念
为了有效处理文本信息并使关键信息的捕获最大化,同时确保文本连贯性,项目提出了一种基于滑动窗口方法的文本分割策略. 考虑到滑动窗口方法的实现目标,项目进一步细化并引入了3种具体的文本分割策略,以满足不同的需求.
滑动窗口方法旨在最大化关键信息的捕获,确保文本连贯性并解决模型标记限制带来的约束. 假设文档D的长度为L,窗口大小为w,步长为s,则文档可以分割为N个块,其中N可以近似表示为式(4):
N=⌈L−ws⌉+1, (4) 其中⌈x⌉表示向上取整函数,其基于初始窗口从文档的开头开始,然后每次移动步长s. 对于每个窗口Wi(其中1≤i≤N)可以表示为式(5):
Wi=D[(i−1)×s:min (5) 其中使用min()函数确保最后一个窗口不超过文档D的长度.
结合上述2个公式,项目可以清楚地描述如何将文档D分解为一系列窗口W并计算每个窗口的内容. 此外,在考虑动态窗口大小和步长时,可以根据需要修改上述公式以反映这些动态调整.
2.3 滑动窗口的分割策略
为有效处理和分割文本,项目提出3种具体的滑动窗口策略,包括:固定窗口大小和固定步长分割(fixed window size and fixed step length split,FFS)、动态窗口大小和固定步长分割(fixed window size and fixed step length split,FFS)以及动态窗口大小和动态步长分割(dynamic window size with fixed step length split,DDS),3种策略的区别在图2中进行了示例说明.
这些策略的设计旨在提高文本处理的效率与准确性,FFS策略通过预设的固定窗口大小和步长进行分割,适用于结构较为均匀的文本;DFS策略允许窗口大小根据文本内容动态调整,但步长保持不变,从而适应文本多样性;DDS策略进一步灵活化,不仅窗口大小可变,步长也可根据具体需求动态调整,从而在复杂文本处理中提供更高适应性和精确性. 这些策略的理论基础和实际应用效果将在后续章节中详细探讨.
2.3.1 固定窗口大小和固定步长分割(FFS)
固定窗口大小和固定步长分割是一种直观且简单的文本处理策略. 在这种方法中,窗口在文本中移动的距离以及窗口本身大小都是预设的、不变的. 这种技术适用于结构清晰、内容连贯性要求不高的文本类型. 由于这种方法的窗口大小w和步长s是预设的,每个分割的窗口可以用前述的式(5)进行表示.
算法1是实现固定大小步长分割的伪代码,详细描述了使用固定窗口大小和固定步长对文档进行分割的计算步骤. 该算法通过从头到尾迭代文本,生成可能的窗口,并根据预定义的窗口大小w和步长s调整起始和结束点.
算法1. 固定大小步长分割.
输入:文本D,窗口大小w,步长s;
输出:窗口列表W.
① W \leftarrow []{\text{ }} ;
② N \leftarrow \left\lceil {\dfrac{{length(D) - w}}{s}} \right\rceil + 1{\text{ }} ;
③ for i=1 to N do
④ start \leftarrow (i - 1) \times s ;
⑤ end \leftarrow \min (start + w,length(D)) ;
⑥ {W_i} \leftarrow D[start:end] ;
⑦ Append Wi to W;
⑧ end for
⑨ return W.
2.3.2 动态窗口大小和固定步长分割 (DFS)
该策略允许在固定步长的同时动态调整窗口大小,以确保文本中的语义单元(如句子或段落)不被不当分割. 这一机制的核心目标是确保文本中的语义单元,诸如句子或段落,能够保持其完整性,避免在处理过程中被不恰当地分割. 此方法尤其适用于那些结构清晰、组织良好的文本,通常这些文本包含明确的句子边界和段落分隔.
该策略步长s保持不变,而窗口大小w可在遇到特定符号(如句号和段落标记)时动态调整. 因此,尽管窗口大小可能大于w,但每个窗口都尽量保持语义完整性. 窗口Wi是从文本D中提取的第i个窗口,并由式(6)表示,结束位置由固定窗口大小w和起始位置后下一个特定符号的位置共同确定.
\begin{split} {W_i} =\;& D[(i - 1) \times s:\min ((i - 1) \times s + w +\\ & next\_symbol(D,(i - {\text{1}}) \times s,T),L)]. \end{split} (6) 算法2概述了一种实现动态大小和固定步长分割的方法. 该算法通过检测文本中的特殊符号,动态调整窗口分割的大小. 在具体操作过程中,算法通过循环遍历文本,每当经过一个固定步长后,就定位下一个出现的特殊符号,然后依据该符号的位置动态调整当前窗口的大小,从而确保分割后的文本片段在语义上保持连贯性,并保留了原始文本的结构完整性.
算法2. 动态大小固定步长分割.
输入:文本D,特定符号T,窗口大小w,步长s;
输出:窗口列表W.
① W \leftarrow []{\text{ }} ;
② splits \leftarrow split\_text\_with\_regex(D,T) ;
③ start \leftarrow 0 ;
④ while start < len(D){\text{ }} do
⑤ end \leftarrow start + w ;
⑥ for each split in splits do
⑦ split\_start \leftarrow find(split,start){\text{ }} ;
⑧ if split_start ≥ end then
⑨ end \leftarrow next\_symbol(D,{\text{s}}plit\_start,T) ;
⑩ break;
⑪ end if
⑫ end for
⑬ chunk \leftarrow D[start:end] ;
⑭ W.append(chunk);
⑮ start \leftarrow start + s ;
⑯ end while
⑰ return W.
⑱ function next_symbol(D,position,T)
⑲ for each i from position to len(D) do
⑳ if D[i] is in T then
㉑ return i+1;
㉒ end if
㉓ end for
㉔ return len(D);
㉕ end function
2.3.3 动态窗口大小和动态步长分割(DDS)
该策略根据文本内容动态调整窗口大小和步长,确保全面覆盖所有重要细节,特别是当关键或密集信息分散在文本中的情况下. 该方法适用于信息密度变化较大或关键信息分散在特定位置的文本. 值得注意的是,该策略中的步长由遇到的特定字符数量决定,这与FFS和DFS中使用固定字符步长不同.
窗口大小和步长的动态调整由式(7)表示,其中Wi表示文档D中提取的第i个窗口. 窗口从起始位置 (i - {\text{1}}) \times s 开始,跨度由窗口大小w和起始位置后下一个特殊符号位置共同决定. 为确保窗口不超过文本D的总长度,故取 (i - {\text{1}}) \times s{\text{ + }}w{\text{ + }}next\_symbol(D,(i - {\text{1}}) \times s,T) 和L的最小值.
\begin{split} &{W_i} = D[(i - 1) \times s + next\_symbol(D,(i - {\text{1}}) \times s,T):\\ &\min ( (i - {\text{1}}) \times s{\text{ + }}w{\text{ + }}next\_symbol(D,(i - {\text{1}}) \times s,T),L)]. \end{split} (7) 算法3是实现动态大小动态步长划分的伪代码. 该算法首先使用特殊符号T对文本D进行分割,并用以识别重要段落,然后通过动态调整窗口大小和步长,基于内容和特殊符号位置迭代地创建窗口W,确保嵌套循环结构覆盖整个文本,同时适应不同信息密度.
算法3. 动态大小动态步长分割.
输入:文本D,特定符号T,窗口大小w,步长s;
输出:窗口列表W.
① W \leftarrow []{\text{ }} ;
② splits \leftarrow split\_text\_with\_regex(D,T) ;
③ start \leftarrow 0 ;
④ while start < len(splits){\text{ }} do
⑤ start\_index \leftarrow start ;
⑥ total\_length \leftarrow {\text{0}} ;
⑦ temp\_chunk \leftarrow '' ;
⑧ while start_index < len(splits) do
⑨ total\_length \leftarrow total\_length + len(splits[start\_index]) ;
⑩ temp\_chunk \leftarrow temp\_chunk + splits[start\_index];
⑪ if total_length ≥ w then
⑫ W.append(temp_chunk);
⑬ break;
⑭ end if
⑮ {\text{end}} \leftarrow {\text{next}}\_{\text{symbol}}(D,{\text{split}}\_{\text{start}}) ;
⑯ end while
⑰ start \leftarrow next\_symbol(splits,start,s,T) ;
⑱ end while
⑲ return W.
⑳ function next_symbol(splits,position,count,T)
㉑ symbol\_count \leftarrow 0 ;
㉒ for each i from position to len(splits) do
㉓ if splits[i] is in T then
㉔ symbol\_count \leftarrow symbol\_count + 1 ;
㉕ end if
㉖ if symbol_count ≥ count then
㉗ return i+1;
㉘ end if
㉙ end for
㉚ return len(D);
㉛ end function
3. 系统实现
滑动窗口检索增强生成系统通过在检索过程中实施滑动窗口机制,解决了固定窗口和静态检索方法的常见限制,这些限制通常会导致上下文丢失和信息检索错误. 本系统架构由多个关键组件组成,每个组件在生成准确响应的过程中发挥着重要作用.
如图3所示,工作流程始于收集各种文档格式,包括PDF、CSV和纯文本,这些文档作为信息检索的私有数据源.
文档首先经过预处理,以识别句子和段落等语义单元,这一步确保了分割不破坏语义边界. 然后应用滑动窗口技术将文本分割成重叠的块,这些块被索引并嵌入到向量数据库中. 这种索引方法允许更细粒度和语境上更准确的信息检索,从而增强LLMs生成可靠和连贯响应的能力. 具体实现过程如下:
1)窗口分割. 此过程主要包括对基于内容的语义结构进行动态分析,从而调整窗口的大小和步距. 这一调整的目的是高效识别文档中特定标记,如标点符号和段落分隔符. 通过灵活设定窗口大小,系统能够在每个文本段落中包含完整的语义单元,进而显著提升了上下文检索的相关性和信息的完整性. 这种方法确保了在处理和分析文本时,能够更准确地捕捉和理解文档的结构和内容.
2)嵌入和索引. 每个分割后的窗口将被输入到经过预训练的语言模型中处理,最终转化为相应的向量表示. 这些生成的嵌入向量随后会被存储在的向量数据库中,以确保数据能够实现高效存储和精确检索[26].
3)预检索. 此阶段参考了MultiQueryRetriever[27]的技术,将查询嵌入到基于距离的向量数据库中的高维空间进行检索. 然而,若查询或嵌入未能准确捕捉数据语义的变化将可能导致不同的检索结果. 此阶段有时需要手动调整或通过提示工程来解决这些问题,这可能既烦琐又低效. 为了克服这些限制,项目在滑动窗口检索增强生成系统中采用了一种先进特性,即LLMs自动生成给定用户查询的多个变体. 这种方法旨在从多个角度处理查询,通过增加获取最相关和语境上适当文档的机会来增强检索过程. 图4展示了这一过程,其中多个查询被用于探测向量数据库,显著提高了系统检索信息的准确性和相关性.
1)检索. 在接收到用户的多个查询后,系统将通过先进的检索算法访问向量数据库中最相关的段落. 对于每个查询,系统检索到一组相关文档后,将融合所有查询以形成一个更大且更加相关的文档集. 该技术通过提供同一问题的多个视角,提高了对主题的全面覆盖,并增强了对细微差异的捕捉能力.
2)回答. 检索到的文本片段将作为上下文输入,供LLMs处理. LLMs综合利用这些信息,生成连贯且符合事实的回应. 通过调用全面的训练数据和所提供的上下文,LLMs能够构建不仅相关且准确的答案.
4. 实验评估
项目对滑动窗口检索增强生成系统的评估采用了严格的方法论,其中响应主要利用LLaMA-3模型(https://llama.meta.com/llama3)生成. LLaMA-3模型由Meta AI开发,代表了最新的大语言模型,在各种自然语言处理基准测试中表现出色[28]. 项目的实验包括对比分析各种滑动窗口策略和现有的段落分割方法. 此外,项目还进行了多查询与单查询场景的消融实验,以进一步揭示系统在不同条件下的性能. 通过这些系统性的实验,项目不仅验证了滑动窗口检索增强生成系统的有效性,还为未来优化和提升此类系统提供了宝贵的数据和经验.
4.1 实验数据集
实验数据集源自LongBench[29]和Scrolls[30]基准,这些基准因其复杂性和多样性在研究社区中得到了认可和广泛应用. 为确保分析的全面性和准确性,本项目选取并测试了5个数据集,涵盖了不同类型的文档和多样的查询场景,具体见表1. 这5个数据集的选择旨在为不同情境下的分析提供依据,从而深入探讨其在多种应用场景中的性能表现.
4.2 实验设计
对于文档存储和检索,项目使用ChromaDB向量数据库(https://www.trychroma.com),采用最大边际相关性算法进行文档选择,该算法优化了查询的相关性和文档的多样性.
项目嵌入模型选择LLaMA-3-chat embeddings,它是LLaMA-3模型的扩展,基于优化的自回归变压器框架构建,并专门针对对话和问答任务微调.
在推理过程中,项目采用贪婪解码,温度设置为0,重复惩罚为1.1,以确保生成的响应精确且不重复. 项目使用的RAG提示词如下:
基于以下上下文回答问题为{context};
问题为{question}.
项目实验一方面通过对比分析各种滑动窗口策略和现有段落分割方法来考察系统的有效性,另一方面设计并实施了多查询与单查询情境下的消融实验以深入了解系统在不同场景下的性能表现.
项目对固定窗口大小和固定步长分割(FFS)、动态窗口大小和固定步长分割(DFS)、动态窗口大小和动态步长分割(DDS)以及常用的方法进行了一系列评估. 此外,项目还进一步使用了常用的RCS(RecursiveCharacterTextSplitter)[34]作为基线,将RCS的参数分别设置为512,1 024,2 048的窗口大小,以便在相同数据集上进行比较分析.
实验参数选择如下:对于FFS和DFS,项目分别使用了窗口大小512,步长为256,128,64;窗口大小
1024 ,步长为512,256,128;窗口大小2048 ,步长为1024 ,512,256. 对于DDS,步长由特殊字符的数量动态确定,项目测试了步长为2,3,5,以评估不同分割粒度的影响. 用于DFS和DDS的特殊分割字符包括“\n\n”“\n”“. ”“,”“?”“!”.在选择窗口大小时,项目选定了512,
1024 ,2048 这3种长度,长度参考自GPT-3.5之后的大语言模型常用的4096 令牌范围[35],并考虑到多数研究认为短文本的值为4096 个令牌[36],因此项目以4096 的1/2及其变体作为窗口大小的基准. 这样的设置不仅符合常规的文本处理习惯,也能有效处理不同长度的文本. 至于步长,其设置对数据处理的重叠程度和结果的连续性有直接影响,项目将步长定为窗口大小的1/2,1/2,1/8. 在DDS算法中,项目选择使用质数作为步长,以避免不同步长之间的倍数关系导致的内容重叠,确保数据分割的多样性与广泛覆盖,优化了算法的整体性能.4.3 评估指标
项目的评估指标是F1得分,它提供了精确度和召回率的平衡度量. 在项目的分析中,Unigramspred表示系统输出中的单元集合,而Unigramscorrect表示参考文本中的单元集合. 精确度(Precision)和召回率(Recall)根据式(8)和式(9)计算.
Precision = \frac{{|Unigramspred \cap Unigramscorrect|}}{{|Unigramspred|}} , (8) Recall = \frac{{|Unigramspred \cap Unigramscorrect|}}{{|Unigramscorrect|}} . (9) 因此,F1得分可进一步通过式(10)计算:
F1 = 2 \times \frac{{Precision \times Recall}}{{Precision + Recall}} . (10) 4.4 实验情况
实验结果如表2所示.
表 2 不同窗口大小和步长配置下的F1得分Table 2. F1 Scores Under Various Window Sizes and Step Configurations方法 窗口
大小步长 F1得分/% MultiFieldQA-en
数据集MultiFieldQA-zh
数据集RCS
(基线)512 - 47.35 44.89 1 024 - 47.55 50.47 2 048 - 48.10 49.59 FFS
(本文)512 64 46.82 45.65 512 128 48.84 39.70 512 256 49.21 30.95 1 024 128 45.49 40.38 1 024 256 46.02 31.95 1 024 512 47.56 21.98 2 048 256 48.18 30.69 2 048 512 47.52 22.00 2 048 1 024 47.86 19.76 DFS
(本文)512 64 40.76 48.46 512 128 47.61 49.10 512 256 46.12 48.62 1 024 128 47.51 48.77 1 024 256 46.38 52.15 1 024 512 46.41 50.51 2 048 256 48.93 48.07 2 048 512 46.37 47.12 2 048 1 024 44.86 53.05 DDS
(本文)512 2 45.37 45.48 512 3 46.91 47.61 512 5 45.92 46.15 1 024 2 47.57 51.24 1 024 3 49.81 53.36 1 024 5 46.90 52.42 2 048 2 46.10 51.87 2 048 3 45.70 50.89 2 048 5 45.12 51.45 注:-指RCS(基线)方法下无步长区分,黑体数值表示最优结果. 在英文数据集中,不同策略之间的性能差异并不显著,仅DDS略微优于其他策略,其F1得分达到49.81%. 在中文数据集中,DDS表现尤为突出,特别是在窗口大小为1 024时,优势更加明显. 较小窗口大小(512)的英文数据集中,FFS策略表现相对较好,但在中文数据集中却表现不佳,导致许多回答出现诸如“无法根据上下文回答”的情况,这表明FFS不适合应用于中文文本分割. 相比之下,DFS在2种数据集中表现较为平衡,虽然在英文数据集中表现最差,但在中文数据集中与DDS的差距并不显著.
综合来看,DDS在中英文语料库中都呈现出最佳表现,特别是中文语料库中,其相比于基线RCS效果更显著. 对于FFS和DFS,在不同窗口大小和步长下性能有所波动,部分窗口大小和步长下能超越基线.
此外,项目还进行了多查询消融实验,以测试滑动窗口检索增强生成系统在多查询情况下是否能提高答案的准确性. 项目测试了所有数据集,并采用DDS策略. 图5的结果显示,多查询在大多数数据集中比单查询具有性能优势. 此外,最佳窗口大小和步长分别为
1024 和3时,提供了最高的F1得分.上述结果表明,滑动窗口检索增强生成系统不仅在滑动窗口策略上明显优于传统段落分割方法,而且在多查询场景下显著提升了检索结果的准确性和相关性.
5. 讨 论
项目的实验结果表明,基于DDS(动态窗口大小和动态步长分割)的方法在多个数据集上表现良好,特别是在使用多查询时显著提高了性能. 以下是对这些结果的详细讨论:
5.1 影响因素分析
窗口大小和步长对F1得分影响:如图5所示,滑动窗口检索增强生成系统在大多数的数据集中使用
1024 的窗口大小和3的步长时达到了最高的F1得分. 实验表明,最小(512)和最大(2048 )的窗口大小都未能提供最佳性能,相反,多个数据集上的最佳窗口大小均为1024 . 不同的参数会对模型造成较大的影响,例如MultiFieldQA-zh数据集下,F1得分最高能达到53.36%,但相同策略中不同参数的F1得分最大差值能达到7.88%. 这一发现表明,在使用RAG解决LLMs幻觉问题时,检索所用块的大小是一个关键参数,使用过小的块可能导致上下文缺失,而过大的块可能引入无关信息,这两者都会负面影响生成响应的事实准确性.实验结果表明,最优参数配置的存在依赖于多个因素,包括数据集特性、算法策略和性能指标. 例如在DDS策略中,中等窗口(
1024 )和步长(3)在多数数据集上表现最佳,但在长度较长的数据集(NarrativeQA,平均长度18409 个令牌)中表现不佳,其所有参数组合下F1得分在11.68~15.22之间.单查询与多查询的对比:本研究数据集涵盖单文档问答和多文档问答,确保了实验的全面性和结果的广泛适用性,特别是使用了诸如NarrativeQA和HotpotQA等复杂数据集,对系统的理解和生成能力提出了更高的要求. 实验结果显示,多重查询方法在多数数据集上整体优于单一查询方法,这是因为多重查询方法能够更加全面地涵盖查询的不同方面,从而提升检索文档的多样性和相关性,从而提高生成答案的准确性. 然而,在NarrativeQA和HotpotQA数据集中,DDS方法在
1024 和2048 窗口大小下,单一查询方法表现优于多重查询方法,这表明对于这些复杂数据集,即使采用单一查询,DDS方法也能高度有效,体现了精心配置的单一查询有时也能提供更优的结果.5.2 滑动窗口检索增强生成系统的优势与局限性
优势:滑动窗口检索增强生成系统通过动态调整窗口大小和步长,有效保持了文本的语义完整性和结构连贯性,显著提升了信息检索的准确性和回答的相关性. 该系统展现了出色的适应性,能够处理各种数据集和查询类型,显示了其广泛的应用潜力. 与固定窗口的系统如Facebook AI的RAG[37]和Google的REALM[38]相比,Facebook AI的RAG在自然问题数据集上的F1得分为44.5%,REALM为40.5%,而本项目的滑动窗口检索增强生成系统在同一数据集上达到了49.8%的F1得分,具备更高准确率优势的主要原因在于减少了信息丢失,并能够更好地应对实时更新的数据需求. 此外,系统通过引入多查询处理技术从而生成多个查询变体,有效增加了获取最相关文档的机会,提高了复杂查询的处理能力. 这种结合检索与生成的方法为检索增强生成系统的发展开辟了新的可能性,特别是在保持高检索精度和生成回答的准确性方面表现突出.
局限性:滑动窗口检索增强生成系统由于滑动窗口策略和多查询方法,由此增加的计算成本和存储开销在处理大规模数据时可能成为瓶颈.
从时间复杂度角度看,基线RCS在最坏情况下,即频繁需要重新组合或分割大量元素时,时间复杂度达到 O({n^2}) ,其中n是原始文本长度;FFS的时间复杂度为 O({n \mathord{\left/ {\vphantom {n s}} \right. } s} \times w) ,其中s是步长,w是窗口的长度;DFS和DDS策略的时间复杂度分为2部分:使用分割符分割文本和创建块,两者的分割文本的时间复杂度都是 O(m \times n) ,其中m是分割符的数量,n是文本长度,DFS创建块的时间复杂度为 O(k \times n) ,其中k为分割块数量,所以DFS的总体时间复杂度为 O((m + k) \times n) ,DDS创建块的时间复杂度为 O({n^2}) ,因此DDS的时间复杂度为 O(m \times {n^2}) . 综上,基于滑动窗口的分割方法中FFS的优化策略可以选择合适的窗口长度和步长,而DFS和DDS的优化策略可以从提前计算分割文本和缓存分割点方面考虑.
从存储成本的角度来看,关键因素包括块的数量和每个块的大小. DFS和FFS策略的存储开销主要取决于窗口的大小,其中较大的窗口意味着更高的内存消耗. DDS策略在块数量多或步长小的情况下存储耗费较大,因为每个块可能被多次读取和处理,增加了对缓存和额外数据存储的需求. 存储成本优化存储成本可以考虑合理选择步长和块的大小以平衡准确性和存储需求.
综合考虑计算和存储开销,FFS策略由于其块大小和步长的固定性,提供了最佳的计算和资源使用效率,但若是在精度需求较高的场景,则可以使用DDS策略. 此外,需要进一步进行参数优化,例如为不同的数据集和任务调整窗口大小和步长设置,这增加了系统部署和应用的复杂性.
5.3 未来研究方向
基于当前的研究结果,未来对滑动窗口检索增强生成系统的探索和改进可以集中在以下几个方面. 首先可以开发自适应参数优化方法,自动根据不同任务和数据集调整窗口大小和步长,以实现最佳性能. 其次,将滑动窗口检索增强生成系统与知识图谱检索和领域自适应预训练等技术结合,可以进一步提高生成答案的准确性和可靠性. 最后,通过探索更高效的算法和硬件加速技术来优化计算效率,可以降低滑动窗口检索增强生成系统的计算成本[39],使其在实际应用中更具可行性.
6. 结 论
滑动窗口检索增强生成系统为提高LLMs输出的事实准确性和可靠性提供了一种有富有前景的方法. 通过在检索过程的索引阶段引入滑动窗口机制,系统解决了与固定大小上下文窗口和静态检索方法相关的常见限制.
项目对滑动窗口检索增强生成系统进行了全面评估,特别关注了动态窗口大小和动态步长分割(DDS)策略,证明了其在多个数据集和查询类型中的有效性. 实验结果表明,滑动窗口检索增强生成系统,尤其是使用DDS策略时,在F1得分方面表现出色,结果优于RCS等基线方法.
尽管滑动窗口检索增强生成系统展示了其有效性,但也存在一些局限性,包括增加了计算成本和参数优化的需求. 然而,其在上下文保留和强适应性方面的优势超越了这些限制,使得滑动窗口检索增强生成系统成为解决LLMs输出中,事实缺乏准确性和可靠性问题的解决方案.
通过进一步的研究和优化,滑动窗口检索增强生成系统有望在实际应用中发挥更大的作用,提供更准确和可靠的答案生成能力. 未来的研究方向包括开发自适应参数优化方法、结合知识图谱检索和领域自适应预训练技术,以及优化计算效率以降低计算成本. 通过这些改进,滑动窗口检索增强生成系统将能够更好地满足各种复杂任务的需求,进一步提升LLMs生成输出的质量.
致谢:本文的研究工作是在开放原子开源大赛(https://competition.atomgit.com/)——基于BigDL-LLM的轻量级大语言模型应用开发创新赛的框架下完成的,得到了开放原子开源基金会及赛项共建方英特尔(中国)有限公司的大力支持.
作者贡献声明:毕枫林负责方案及算法设计;张豈明、张嘉睿负责实验及论文撰写;王衍童负责实验数据分析;陈阳负责论文修订;张琰彬负责对研究提出意见并指导论文修改;王伟、周烜参与论文修改及定稿讨论.
-
表 1 研究中使用的数据集
Table 1 Datasets Used in the Study
表 2 不同窗口大小和步长配置下的F1得分
Table 2 F1 Scores Under Various Window Sizes and Step Configurations
方法 窗口
大小步长 F1得分/% MultiFieldQA-en
数据集MultiFieldQA-zh
数据集RCS
(基线)512 - 47.35 44.89 1 024 - 47.55 50.47 2 048 - 48.10 49.59 FFS
(本文)512 64 46.82 45.65 512 128 48.84 39.70 512 256 49.21 30.95 1 024 128 45.49 40.38 1 024 256 46.02 31.95 1 024 512 47.56 21.98 2 048 256 48.18 30.69 2 048 512 47.52 22.00 2 048 1 024 47.86 19.76 DFS
(本文)512 64 40.76 48.46 512 128 47.61 49.10 512 256 46.12 48.62 1 024 128 47.51 48.77 1 024 256 46.38 52.15 1 024 512 46.41 50.51 2 048 256 48.93 48.07 2 048 512 46.37 47.12 2 048 1 024 44.86 53.05 DDS
(本文)512 2 45.37 45.48 512 3 46.91 47.61 512 5 45.92 46.15 1 024 2 47.57 51.24 1 024 3 49.81 53.36 1 024 5 46.90 52.42 2 048 2 46.10 51.87 2 048 3 45.70 50.89 2 048 5 45.12 51.45 注:-指RCS(基线)方法下无步长区分,黑体数值表示最优结果. -
[1] Zhao W X, Zhou Kun, Li Junyi, et al. A survey of large language models[J]. arXiv preprint, arXiv: 2303.18223, 2023
[2] Taffa A T, Usbeck R. Leveraging LLMs in scholarly knowledge graph question answering[J]. arXiv preprint, arXiv: 2311.09841, 2023
[3] Wang Chaojie, Xu Yishi, Peng Zhong, et al. Keqing: Knowledge-based question answering is a nature chain-of-thought mentor of LLM[J]. arXiv preprint, arXiv: 2401.00426, 2023
[4] Rawte V, Sheth A, Das A. A survey of hallucination in large foundation models[J]. arXiv preprint, arXiv: 2309.05922, 2023
[5] Zhang Yue, Li Yafu, Cui Leyang, et al. Siren’s song in the AI ocean: A survey on hallucination in large language models[J]. arXiv preprint, arXiv: 2309.01219, 2023
[6] Zhu Zhiying, Sun Zhiqing, Yang Yiming. HaluEval-Wild: Evaluating hallucinations of language models in the wild[J]. arXiv preprint, arXiv: 2403.04307, 2024
[7] Lewis P, Perez E, Piktus A, et al. Retrieval-augmented generation for knowledge-intensive NLP tasks[J]. Advances in Neural Information Processing Systems, 2020, 33: 9459−9474
[8] Finardi P, Avila L, Castaldoni R, et al. The chronicles of RAG: The retriever, the chunk and the generator[J]. arXiv preprint, arXiv: 2401.07883, 2024
[9] 田永林,王兴霞,王雨桐,等. RAG-PHI:检索增强生成驱动的平行人与平行智能[J]. 智能科学与技术学报,2024,6(1):41−51 Tian Yonglin, Wang Xingxia, Wang Yutong, et al. RAG-PHI: Retrieval-enhanced generation-driven parallel humans and parallel intelligence[J]. Journal of Intelligent Science and Technology, 2024, 6(1): 41−51 (in Chinese)
[10] Gao Yunfan, Xiong Yun, Gao Xinyu, et al. Retrieval-augmented generation for large language models: A survey[J]. arXiv preprint, arXiv: 2312.10997, 2023
[11] 田萱,吴志超. 基于信息检索的知识库问答综述[J/OL]. 计算机研究与发展. [2025-02-17]. http://kns.cnki.net/kcms/detail/11.1777.TP.20240805.1345.004.html Tian Xuan, Wu Zhichao. Review of knowledge base question answering based on information retrieval[J/OL]. Journal of Computer Research and Development. [2025-02-17]. http://kns.cnki.net/kcms/detail/11.1777.TP.20240805.1345.004.html (in Chinese)
[12] Anantha R, Bethi T, Vodianik D, et al. Context tuning for retrieval augmented generation[J]. arXiv preprint, arXiv: 2312.05708, 2023
[13] Ortiz L J, Olaya A G, Borrajo D. A dynamic sliding window approach for activity recognition[C]//Proc of the 19th Int Conf on user modeling, adaption and personalization (UMAP 2011). Berlin: Springer, 2011: 219−230
[14] Packer C, Fang V, Patil S G, et al. MemGPT: Towards LLMs as operating systems[J]. arXiv preprint, arXiv: 2310.08560, 2023
[15] Xu Peng, Ping Wei, Wu Xianchao, et al. Retrieval meets long context large language models[J]. arXiv preprint, arXiv: 2310.03025, 2023
[16] 韩炳涛,刘涛. 大模型关键技术与应用[J]. 中兴通讯技术,2024,30(2):76−88 doi: 10.12142/ZTETJ.202402012 Han Bingtao, Liu Tao. Key technologies and applications of large models[J]. ZTE Communications, 2024, 30(2): 76−88 (in Chinese) doi: 10.12142/ZTETJ.202402012
[17] Chen H, Xu Fangyuan, Arora S, et al. Understanding retrieval augmentation for long-form question answering[J]. arXiv preprint, arXiv: 2310.12150, 2023
[18] Chor B, Kushilevitz E, Goldreich O, et al. Private information retrieval[J]. Journal of the ACM, 1998, 45(6): 965−981 doi: 10.1145/293347.293350
[19] Luo Ziyang, Xu Can, Zhao Pu, et al. Augmented large language models with parametric knowledge guiding[J]. arXiv preprint, arXiv: 2305.04757, 2023
[20] He Xiaoxin, Tian Yijun, Sun Yifei, et al. G-Retriever: Retrieval-augmented generation for textual graph understanding and question answering[J]. arXiv preprint, arXiv: 2402.07630, 2024
[21] Teja R. Evaluating the ideal chunk size for a RAG system using LlamaIndex[EB/OL]. [2024-04-01]. https://www.llamaindex.ai/blog/evaluating-the-ideal-chunk-size-for-a-rag-system-using-llamaindex-6207e5d3fec5
[22] LangChain. Recursively split by character[EB/OL]. [2024-05-01]. https://python.langchain.com/docs/modules/dataconnection/documenttransformers/recursivetextsplitter
[23] Dhuliawala S, Komeili M, Xu Jing, et al. Chain-of-verification reduces hallucination in large language models[J]. arXiv preprint, arXiv: 2309.11495, 2023
[24] Ma Xinbei, Gong Yeyun, He Pengcheng, et al. Query rewriting for retrieval-augmented large language models[J]. arXiv preprint, arXiv: 2305.14283, 2023
[25] Peng Wenjun, Li Guiyang, Jiang Yue, et al. Large language model based long-tail query rewriting in Taobao search[J]. arXiv preprint, arXiv: 2311.03758, 2023
[26] 张嘉睿,张豈明,毕枫林,等. 基于IPEX-LLM的本地轻量化课程教学智能辅助系统[J]. 华东师范大学学报:自然科学版,2024(5):162−172 Zhang Jiarui, Zhang Qiming, Bi Fenglin, et al. Locally lightweight course teaching-assistant system based on IPEX-LLM[J]. Journal of East China Normal University: Natural Science, 2024(5): 162−172 (in Chinese)
[27] LangChain. MultiQueryRetriever documentation[EB/OL]. [2024-05-11]. https://python.langchain.com/v0.1/docs/modules/data_connection/retrievers/MultiQueryRetriever
[28] Hugging Face. Open LLM leaderboard[EB/OL]. [2024-05-01]. https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard
[29] Bai Yushi, Lv Xin, Zhang Jiajie, et al. Longbench: A bilingual, multitask benchmark for long context understanding[J]. arXiv preprint, arXiv: 2308.14508, 2023
[30] Shaham U, Segal E, Ivgi M, et al. Scrolls: Standardized comparison over long language sequences[J]. arXiv preprint, arXiv: 2201.03533, 2022
[31] Kočisk`y T, Schwarz J, Blunsom P, et al. The narrativeqa reading comprehension challenge[J]. Transactions of the Association for Computational Linguistics, 2018, 6: 317−328 doi: 10.1162/tacl_a_00023
[32] Dasigi P, Lo K, Beltagy I, et al. A dataset of information-seeking questions and answers anchored in research papers[J]. arXiv preprint, arXiv: 2105.03011, 2021
[33] Yang Zhilin, Qi Peng, Zhang Saizheng, et al. HotpotQA: A dataset for diverse, explainable multi-hop question answering[J]. arXiv preprint, arXiv: 1809.09600, 2018
[34] LangChain. RecursiveCharacterTextSplitter - LangChain API documentation[EB/OL]. [2024-05-01]. https://api.python.langchain.com/en/latest/character/langchain_text_splitters.character.RecursiveCharacterTextSplitter.html
[35] OpenAI. GPT−3.5 Turbo model documentation[EB/OL]. [2024-07-01]. https://platform.openai.com/docs/models/gpt-3-5-turbo
[36] Fu Yao. Challenges in deploying long-context transformers: A theoretical peak performance analysis[J]. arXiv preprint, arXiv: 2405.08944, 2024
[37] Lewis P. , Perez E. , Piktus A. , et al. Retrieval-augmented generation for knowledge-intensive NLP tasks[J]. Advances in Neural Information Processing Systems, 2020, 33: 9459-9474
[38] Guu K, Lee K, Tung Z, et al. REALM: retrieval-augmented language model pre-training[J]. arXiv preprint, arXiv: 2002.08909, 2020
[39] 冯杨洋,汪庆,谢旻晖,等. 从BERT到ChatGPT:大模型训练中的存储系统挑战与技术发展[J]. 计算机研究与发展,2024,61(4):809−823 doi: 10.7544/issn1000-1239.202330554 Feng Yangyang, Wang Qing, Xie Wenhui, et al. From BERT to ChatGPT: Challenges and technological developments in storage systems for large model training[J]. Journal of Computer Research and Development, 2024, 61(4): 809−823 (in Chinese) doi: 10.7544/issn1000-1239.202330554