AI热点 17 hours ago 172 Views 0 Comments

RAGFlow切片方法深度实测:Manual/Book/Laws等对比分析

AI中国
AI中国

Published 8252 Articles

团队在自研知识库底座的过程中,想对比参考下RAGFlow,发现其切片方法缺乏详细说明和清晰案例,如果你也遇到以下问题,本文能帮你节省大量试错时间:


文档切片时章节目录名称是如何处理的?是单独分块,还是和对应的正文内容放一个分块?


文档正文里如果包含有图片,那它和正文内容会放到一个分块里?


对MANUAL、BOOK、LAWS等文档切片方法傻傻分不清,是按标题,还是按章节目录,还是按段落进行切分?


表格按行切片时如何保留表头信息?


Table切片方法能否用于QA对的场景?


为了搞清楚这些问题,LiaoYan同学对RAGFlow的十来种切片方法做了实际测试和验证,我们可以大致做如下分类:


1)最通用的切片方法:General ,覆盖所有文件类型和格式,包括文档、表格、PPT、图片等,主要切片逻辑就是按长度+分隔符方式,这种方法用的最多,就不介绍了。


2)按文档章节目录结构切片方法:MANUAL、BOOK、LAWS,我们选择同样一篇文档,分别用Manual、Book、Laws等方式进行重点对比分析,看看它们各自的切片依据都是什么,看看哪种切片粒度更细。


3)按表格结构切片方法:TABLE、QA,我们选择一个运维知识表格,进行对比分析。


4)其他特殊切片方法:ONE、RESUME、PAPER、PRESENTATION等,比较少见和少用,因篇幅限制,只稍做描述。


按文档结构切片方法:Manual、Book、Laws


之所以把这三种切片方法放一起比较,主要是因为它们都是针对文档类型的文件,都是依据文档的目录结构进行切片。


为了更加直观的理解这三种切片方法之间的差异,我们选择一个相同的文档来实测“中华人民共和国税收征收管理法.docx”,由于文档比较长,主要截取了其中前4个章节的内容来进行验证,原始文档内容结构如下:



  • Manual手册切片方法(按“标题”样式)



Manual方法是依据“标题”样式进行切片,并且切片到最细粒度的“标题”样式,注意它强调是“标题”样式,也就是说“正文”样式的内容它是不做切片的,比如图中的“第十五条”、“第十六条”等内容,虽然看起来像目录标题,但实际只是字体加粗放大的正文而已,所以在文档左边的目录结构列表中看不到,所以不会单独分块。样例文章按Manual方法切片结果如下:



如图,最终有“标题”样式的目录结构如文档左侧列表,切片到最细粒度一共有6个分块,每个内容分块中都会带入其所有上级目录标题,包括最顶级的文档标题。


其中文档标题“中华人民共和国税收征收管理法”下面有一些直属的正文内容,所以它也会被单独切片成一个块如下:



  • Book书籍切片方法(按目录+段落)



Book书籍切片方法则主要是按“章节目录+段落”语义切片,先按章节分割,再对章节正文按语义切片(章节→子主题→段落),包括按段落切片,所以它比Maual和Laws切片粒度都更细。样例文章按Book方法切片结果如下:



如图,Book和前面Manula结果不同的是,“第十五条”下面的三段内容被切片成3个分块了,所以这篇文档最终切片出128个分块,它是粒度最细的一种方式

Book方式每个分块也会带入其上级目录标题,但和Manual不同之处在于,它不包括最顶级的文档标题。


另外对于上级目录下如果有正文,它和Manual处理方式类似,也是会单独一个分块,如上图中红色线框所示。


  • Laws法规切片方法(按“章节条款”标记)



Laws法规切片方法是按“章节条款”标记切片,如“第X章”、 “第 X 条”、“第 X 款”,它与目录层次和标题样式都没有关系。样例文章按Laws方法切片结果如下:



如图,按Laws章节条件方式切片后有87条。它和Manual不同在于,“第十五条”、“第十六条”这些目录虽然没有“标题”样式,但因为符合“章节条款”的标记,所以会逐条切片出来。它和Book不同在于,“第十五条”下面的3个段落没有分成3个分块,而是切在一个分块中。


另外它和Maual、Book方式有个很大不同,它的上级目录标题不带入到当前条款内容所在分块中,而是会逐层将条款名称做个汇总并单独一个分块,如上图中绿色线框所示。另外上层目录下的正文也会单独一个分块,但不含目录标题名称。


  • 三种文档切片方法总结


依据以上测试验证结果,对这三种文档切片方法梳理汇总如下:



注意针对Manual这种方式,RAGFlow产品界面中描述只支持PDF格式文件,通过实测发现DOC文件实际也是支持的,只是由于它是依赖“标题”样式作为切片依据的,所以确实不支持TXT文件。


同时Manual方式如果文档正文内容中包含有图片,它会将图片和正文内容切片到同一个分块中,具体效果如下:



按表格结构切片方法:Table、QA


以上是对Doc文档类文件的几种切片方法,包括PDF\TXT\DOCX等文件类型,它们本质内容都是文档模式才行,你要是硬把excel内容转成PDF,然后用以上几种切片方法会怎样?老实说我们没试过,读者有兴趣可以自行验证下。


接下来我们针对表格类结构,再实际验证下RAGFlow提供的Table和QA两种切片方法。


  • Table切片方法


按照老规矩,我们先准备了一个表格案例,是个常见的运维问题知识表格,包括问题所属产品、适用地区、业务域等信息,以及问题详细描述、产生原因描述、解决办法描述等。



如图表格中第一行要专门设置列头标题信息,经过Table方式切片后,会将这些列标题带入每个分块中,同时除了标题行之外,下面的表格内容会被逐行切片,每行一个分块,最终切片结果如下:



  • QA切片方法


继续用这个运维问题知识表格,不做任何修改直接用QA切片方法的话,RAGFlow会直接将表格中“所属产品”、“适用地区”两列当做Question和Answer来进行切片,其他列都会被忽略,然后按行切片,并得到去重后的分块结果。


我们再用符合QA结构的表格来正式验证一遍,表格只保留问题描述和解决方案两列内容:



如图表格经过QA方式切片后,会每行一个分块,并且每个块中都自动补充Question和Answer的标题,最终切片结果如下:



  • 两种表格切片方法总结


依据以上测试验证结果,对这两种表格切片方法梳理汇总如下:



仔细对比以上两个实际案例,就会发现QA可以说是一种特殊简化的Table方法,不嫌麻烦的话,用Table也可以实现QA的切片效果,在对应表格中设置好两列,列头分别命名为Question和Answer,然后按Table切片方式,就自动把这个列头,带入到每行里面去,和QA切片结果会一模一样。


针对以上运维问题表格案例,可根据业务需要来选择具体切片方法,如果表中问题描述、原因、解决方案、所属产品、适用地区等信息列,都有可能要按语义相似度方式去检索,则使用Table方式比较好。


如果只想针对问题描述和解决方案进行语义相似度检索,则只保留这两列作为Question和Answer,对于适用产品、地区、业务域等信息,则可以把这些信息保存到分块的元数据中去,用元数据实现按结构化方式的筛选过滤。


不过用RAGFlow验证了下,发现其分块没有元数据,只有Document层面(RAGFlow的数据集)才有元数据,而且仔细研究了下RAGFlow的API,貌似其retrieval 检索接口请求参数中并未包含meta_fields筛选条件,这也是我们要自研的一个小原因。


其他特殊切片方法:One、Resume、Paper、Presention


除了文档三剑客+表格两重奏之外,RAGFlow还提供了一些比较特殊的切片方法,简单提一下:


One方法,实际不做切片,一份文档内容全在一个分块中,文档和表格都支持,所以可支持PDF\TXT\DOCX\XLSX等文件类型。


Resume方法,针对简历文档格式,做结构化要素提取和拆分,一个要素一个分块,可支持PDF\TXT\DOCX等文档类文件(注,时间有限未验证)。


Paper方法,针对论文,提取摘要和章节目录等,据产品介绍只支持PDF文件类型(注,时间有限未验证)。Presention方法,针对PPT讲稿的(也支持PPT转成的PDF文件格式),每一页PPT都拆分成一个分块,分块内包含当前PPT页面原始截图,以及从其中提取的文字内容,和前面Manual方法对文档内包含图片的内容切片结果有点类似,实际测试结果如下:



确实费了一番力气,才终于梳理好以上这些切片方法的关键点,自诩相比无论是RAGFlow产品本身的介绍,还是网上的搬运工,我们这篇文章是真的有点内容的,希望对正在研究使用RAGFlow的同学有所帮助,则力气就没有白费,真诚希望得到大家的反馈哈。


有同学好奇RAGFlow有这么丰富的切片方法,使用者也很多,为啥我们还要自研知识库底座呢?


因为除了以上这些切片方法外,还要能够方便的根据业务需要扩展自定义切片方法,比如对数据字典类知识的切片,对业务知识的切片等。


因为还要支持给知识记录元数据,以实现按元数据进行筛选过滤,以聚焦每次语义检索的范围,同时提高检索效率。


因为除了这些最基础的切片方法和向量化机制外,还有实现知识库的有效管理和运营,以确保知识的正确性,在新增或修改知识时,要做到既不影响线上应用的检索结果,又能进行检索测试和验证,验证通过才能正式生效。


因为还要进行知识的提炼和增强,要记录提炼增强后知识与原始知识之间的关系,修改原始知识时能判断影响范围等。


所以且待后续分解:RAG的工程化实践思考(会隶属到AI基础的合集)。


文章来自于微信公众号“木昆子记录AI”,作者是“木昆子”。


AI中国

AI中国

8252 Articles 1320437 Views 950300 Fans

Comment (0)

睡觉动画