RAG中涉及的Chunk方法介绍

2024年8月27日修改
作者:王大锤
一、背景
在RAG系统中,如何切分Chunk对RAG系统的影响还是挺大的。而且PDF中结构会比较复杂,包括图片,而且有些排版比较奇怪,所以 分Chunk 还是一个相对有难度的事情。如果:
chunk粒度 是一个句子/单词,那么更加注重局部、关键信息的查询,相应的会缺失上下文的信息
完整的长篇段落或文章,chunk 被embedding出来的就是整个文章的意思,但是很难精准到个体单词
这里有几个场景的区分,首先是微博(少字符)、知乎/小红书(中小量字符数)、博客(超多字符),还有专业性较强、专有名词较多的文章 与 综述类信息总结文章;不同类型的场景会需要不同chunk分块粒度。
此时Chunk会影响到以下的信息( RAG行业交流中发现的一些问题和改进方法 ):
上下文信息: 例如,《统计学习的要素》这本书有18章,每一章都专注于一个主题。每章有副标题和第二层副标题等。人们习惯于在语境中理解文章。
位置信息( 文本的权重取决于它们在文档中的位置。文档开头和结尾的文字比中间的文字更重要
连续的信息: 一个故事可能以“in the beginning”开头,然后以“then”、“therefore”、“after that”继续,直到以“finally”、“finally”等结尾。使用 分块策略 ,这种连接不再是完整的。
描述信息: 使用分块,可能无法保证描述性信息集中在一起。想象一下你正在打电话,突然电话线被切断了。这取决于你的电话有多重要,当它发生时,影响范围从微不足道到非常令人沮丧。
由此RAG任务不擅长回答的几类问题:
1.
不擅长小范围的描述性问题回答 。例如,哪个主体具有某些特征?
2.
不擅长关系推理 ,即寻找从实体A到实体B的路径或识别 实体集团
3.
不擅长时间跨度很长的总结 。例如,“列出所有哈利波特的战斗”或“哈利波特有多少次战斗?”
在确定最佳分块策略时,有几个因素会对我们的选择起到至关重要的影响:
被索引内容的性质是什么? 这可能差别会很大,是处理较长的文档(如文章或书籍),还是处理较短的内容(如微博或即时消息)?答案将决定哪种模型更适合您的目标,从而决定应用哪种分块策略。
您使用的是哪种Embedding模型,它在多大的块大小上表现最佳?例如,sentence-transformer模型在单个句子上工作得很好,但像text- embedt-ada -002这样的模型在包含256或512个 tokens 的块上表现得更好。
你对用户查询的长度和复杂性有什么期望?用户输入的问题文本是简短而具体的还是冗长而复杂的?这也直接影响到我们选择分组内容的方式,以便在嵌入查询和嵌入文本块之间有更紧密的相关性。
如何在您的特定应用程序中使用检索结果? 例如,它们是否用于语义搜索、问答、摘要或其他目的?例如,和你底层连接的LLM是有直接关系的,LLM的tokens限制会让你不得不考虑分块的大小。
没有最好的分块策略,只有适合的分块策略,为了确保查询结果更加准确,有时候我们甚至需要选择性的使用几种不同的策略。
二、相关产品
2.1 FastGPT
附件不支持打印

加载失败,