RAG在未来会消失吗?附RAG的5种切分策略

文摘   2024-11-08 17:52   新加坡  


最近,Prompt大神李继刚在即刻抛出一个问题:



随即,就有很多大神在群里讨论起来,大家总体的看法是Prompt会更加重要,RAG和微调可能会消失或者变成另一种形式而存在。


而讨论这个问题大家可能需要先了解模型训练的一些基本原理(以下总结来自社恐患者杨老师):


目前模型训练有几个瓶颈亟待突破:


1、模型无法进行实时增量训练,现在预训练完成之后,再微调还是RLHF都无法让模型学到新的知识。模型参数无法动态更新。


2、上下文长度限制,这个与transformer架构有很大关系,模型上下文长度,限制了token的吞吐量,即使RAG在不断推陈出新,也不能解决这一核心问题。模型需要建立更加高效的短期记忆与长期记忆的范式。


3、没必要纠结Prompt,因为Prompt的存在核心是希望模型可以按照cot的方式,约束它的输出。而如果模型真的某一天具备逻辑推理的可能性之后,就不需要专门的Prompt来约束输出,模型会自动匹配寻找局部最优解的路线。当然前提是模型真的可以实现逻辑推理。


今天,我们就先来看看RAG的工作原理,以及数据科学家 Avi Chawla 对RAG的5种切分策略。看完或许有新的认识。


什么是 RAG?


RAG(Retrieval Augmented Generation)是一种利用额外信息增强语言模型生成能力的技术。其工作流程如下:


  1. a.切分: 将大型文档分割成较小的部分。


  2. b.向量化: 将切分后的文本片段转换为向量表示。


  3. c.检索: 将输入查询与向量数据库中的向量进行匹配,找到最相似的文本片段。


  4. d.生成: 将检索到的相关信息与查询一起传递给大型语言模型 (LLM),生成最终的响应。


以下是典型的RAG应用工作流程(来自Avi Chawla):



RAG:将额外信息存储为向量,将传入的查询与这些向量匹配,并将最相似的信息与查询一起传递给大语言模型(LLM)。


由于额外的文档可能非常大,第1步还需要进行切分操作,将大文档分割成较小、易于管理的部分。



这一步至关重要,它确保文本能够适应嵌入模型的输入大小。此外,它提高了检索步骤的效率和准确性,这直接影响生成响应的质量。


以下是RAG的五种切分策略:



让我们今天来了解它们!


01 固定大小切分


最直观的切分方法是根据预定的字符数、单词数或Token数量将文本均匀分割成若干段落。



由于直接切分可能会破坏语义流畅性,建议在连续段落间保留一些重叠(如上图的蓝色部分)。


这种方法易于实现,而且所有段落大小相同,有助于简化批处理。


但它存在一个大问题:通常会在句子(或想法)中途切分,导致重要信息可能分散在不同段落中。


02 语义切分


概念很简单。



a.根据句子、段落或主题部分等有意义的单元来切分文档。


b.接着,为每个段落生成嵌入。


c.假设从第一个段落及其嵌入开始。


    • 如果第一个段落的嵌入与第二个段落的嵌入余弦相似度较高,则两个段落组成一个切片。

    • 这个过程持续进行,直到余弦相似度显著下降。

    • 一旦下降,我们就开始一个新切片并重复此过程。

    

输出可能如下所示:



这种方式与固定大小切片不同,能够保持语言的自然流畅性,并保留完整的思想。


由于每个切片语义更为丰富,它提高了检索准确度,进而使LLM生成的响应更加连贯且相关。


一个小问题是,确定余弦相似度下降的阈值在不同文档间可能有所不同。


03 递归切分


这个方法也非常简单。



首先,基于内在的分隔符(如段落或章节)进行切分。


然后,如果某个切片的大小超过预定义的切片大小限制,就将其进一步分割。如果切片符合大小限制,则不再进行切分。


输出结果可能如下所示:



如上所示:


  • 首先,我们定义了两个切片(紫色的两个段落)。

  • 接下来,第1段被进一步分割成较小的切片。


与固定大小的切片不同,这种方法也保持了语言的自然流畅性,并保留了完整的思想。


不过,在实现和计算复杂性方面有一些额外的开销。


04 基于文档结构的切分


这是一种直观的方法。



利用文档内在的结构(如标题、章节或段落)定义切片边界。


这种方式能保持文档的结构完整性,确保切片与文档的逻辑部分对齐。


该方法假设文档结构清晰,但这可能并非总是如此。此外,切片长度可能不同,甚至超过模型的Token限制。可以尝试与递归切分结合使用。


输出结果可能如下所示:



05 基于LLM的切分



由于每种方法都有其优缺点,为什么不让LLM来生成切片呢?


LLM可以通过提示词生成语义隔离且有意义的切片。


显然,这种方法确保了高语义准确性,因为LLM能理解上下文和意义,远超简单的启发式方法。


唯一的问题是,这种方式的计算成本是五种方法中最高的。


此外,由于LLM通常有上下文窗口限制,需要对此加以处理。


每种技术都有各自的优劣。


我发现语义切分在许多情况下效果不错,但仍然需要测试。


最终的选择将取决于内容的性质、嵌入模型的能力和计算资源等。


我们很快会进行这些策略的实际操作演示。


Avi Chawla 对RAG的5种切分策略原文链接:

https://blog.dailydoseofds.com/p/5-chunking-strategies-for-rag?=




Last but not least


所以站在3年后,甚至更远的未来看今天,模型能力无比强大,回归到现在,我们能做什么,应该怎么调整方向,这才是一个值得思考的问题。


最后,技术无论怎么发展,或许你现在研究的,在未来会被取代甚至毫无用处,我都向你致敬,你都是推动科技进步的一份子,这个世界需要你这样的人。




关注公众号,用极客视角洞察未来!

往期精彩文章推荐:

1.AI能像人一样操控电脑了!熬夜实测Claude新版本,只能说太牛逼!!

2.从AI搜索开始到AI信息官,我们只想实现一个事情…

3.OpenAI开源多Agent框架Swarm,熬夜实测整理出几大亮点!

GeekSavvy
GeekSavvy是一个新世代AI极客社区,主要覆盖AI极客、创业者和投资人。我们会用Geek视角👉见识行业趋势、洞察AI产品和预见未来科技风向标🚀!
 最新文章