RAG高阶技巧---窗口上下文检索

文章详细描述了RAG模型的检索流程,包括文档加载、拆分、向量化和检索,以及在拆分与检索中遇到的问题。提出改进策略,如使用预检索和后检索,以及根据位置标识提取上下文信息以提升回答质量。

RAG(Retrieval-Augmented Generation)模型的检索流程主要包括以下步骤:

  1. 加载文档:此步骤涉及将不同格式的文件转化为可处理的文档形式,例如将PDF文件转换为文本,或将表格数据转化为键值对。
  2. 拆分文档:在此步骤中,文档被分割成更小的单元,以便于存储和检索。例如,将“我是kxc。我喜欢唱跳、rap和篮球。”拆分为“我是kxc。”和“我喜欢唱跳、rap和篮球。”两个数据块。
  3. 嵌入表示:文档被转换为向量形式,这通常通过BERT或TF-IDF等模型完成。
  4. 存储向量:向量化后的数据块被存入向量数据库中。
  5. 检索:根据输入的问题和文档向量,计算它们之间的相似度,然后根据相似度排序,选择最相关的文档作为检索结果。余弦相似度或点积是常用的相似度度量方法。
  6. 生成回答:最后,使用检索到的文档作为生成模型的输入,根据问题生成回答。GPT-3或T5等模型常用于这一步骤。

虽然基础RAG的检索流程相对简单,但在拆分(split)和检索(retrive)步骤中存在一些问题,这些问题可能会影响RAG的检索效果,导致生成的回答不准确或不完整。

  • 如果拆分的数据块太大,那么在检索时,同一块中可能包含大量与问题不相关的内容,从而影响检索的准确性。例如,如果将维基百科的一篇文章作为一个整体进行检索,那么由于文章可能涉及多个主题和细节,与问题的相关性可能会降低。在这种情况下,生成模型可能会提取出一些无关或错误的信息,从而降低回答的质量。
  • 另一方面,如果拆分的数据块太小,虽然可以提高检索的匹配度,但在生成回答时,由于缺乏足够的上下文信息,可能导致回答不准确。例如,如果将维基百科的一篇文章拆分为多个句子进行检索,那么每个句子可能只包含部分信息,与问题的相关性较高。在这种情况下,生成模型可能会提取出一些有用的信息,但可能会忽略重要的上下文信息,从而影响回答的完整性。

 

在比较两种RAG(Retrieval-Aided Generation)模型的流程时,我们可以观察到它们在生成任务中的不同处理方式。左侧展示的是基本的RAG模型,而右侧则展示了更为先进的RAG模型。这两个模型都包含检索和生成两个核心阶段。

在基本RAG模型中,用户的查询直接与文档进行索引,随后通过检索过程得到结果,这些结果作为提示传递给冻结的LLM(Language Learning Model,语言学习模型),最终由LLM生成输出。

相比之下,先进RAG模型引入了预检索和后检索阶段。在预检索阶段,对用户查询进行路由、重写和扩展等操作;在检索阶段,获取结果;在后检索阶段,对这些结果进行重新排序、总结和融合,然后传递给冻结的LLM以生成输出。

为了解决在拆分和检索步骤中遇到的问题,通常采取的策略是在拆分时尽可能将文本划分为最小的语义单元,如句子或段落,并为每个单元分配一个唯一编号,作为其在文本中的位置标识。

在检索时,基于问题和文档向量之间的相似度,选择最相关的文档作为结果,并记录其编号。

在生成回答时,利用这些编号从文本中提取相关单元的上下文信息,如前后相邻的单元,然后将这些信息拼接成一个完整的文档,作为生成模型的输入,以便根据问题生成回答。这种方法不仅提高了检索的精确度,还保留了上下文的完整性,从而提升了生成回答的质量和多样性。

总结

当检索出相关文档后,系统会根据这些文档的位置标识符,在原始文本中提取它们的上下文信息,比如前后几个单位的内容。然后,将这些上下文信息与检索结果合并,形成一个新的文档,作为生成模型的输入。 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值