|
在使用智能系统处理海量文档时,你是否遇到过这样的困扰:输入问题后,得到的答案要么答非所问,要么信息碎片化,无法精准命中需求?其实,这背后很大程度上是知识切片环节出了问题。而 RAGflow 的分片策略,就像是一把精准的 “手术刀”,能巧妙解决这些难题,让知识检索变得既精准又高效。
传统的文本切片方式,往往采用固定长度分割或简单的按段落划分,这种 “一刀切” 的做法,在面对复杂文档时,容易割裂知识的完整性,导致检索结果出现偏差。想象一下,一篇包含多个专业知识点、逻辑紧密的学术论文,若被随意切割,当用户检索特定概念时,系统很可能无法关联到完整且准确的内容。
其实在项目中,我们也碰到了客户经常问这些问题,我们的文档,如何采用更加合理的分块策略,才能更好的查询到所需的数据,这些才是客户更加关注的。
那我们来看下RAGflow提供了哪些分块的方法
General 分块方法: 支持的文件格式为DOCX、XLSX、XLS (Excel97~2003)、PPT、PDF、TXT、JPEG、JPG、PNG、TIF、GIF、CSV、JSON、EML、HTML。 此方法将简单的方法应用于块文件:
Q&A 分块方法: 此块方法支持 excel 和 csv/txt 文件格式。 如果文件是excel格式,则应由两个列组成 没有标题:一个提出问题,另一个用于答案, 答案列之前的问题列。多张纸是 只要列正确结构,就可以接受。 如果文件是csv/txt格式 以 UTF-8 编码且用 TAB 作分开问题和答案的定界符。 未能遵循上述规则的文本行将被忽略,并且 每个问答对将被认为是一个独特的部分。
Resume分块方法: 支持的文件格式为DOCX、PDF、TXT。
Manual分块方法: 仅支持PDF。
Table分块方法: 支持XLSX和CSV/TXT格式文件。 对于 csv 或 txt 文件,列之间的分隔符为 TAB。 第一行必须是列标题。 列标题必须是有意义的术语,以便我们的大语言模型能够理解。 列举一些同义词时最好使用斜杠'/'来分隔,甚至更好 使用方括号枚举值,例如 'gender/sex(male,female)'。 表中的每一行都将被视为一个块。
Paper 分块方法: 仅支持PDF文件。
Book分块方法: 支持的文件格式为DOCX、PDF、TXT。
Laws分块方法: 支持的文件格式为DOCX、PDF、TXT。
Presentation 分块方法: 支持的文件格式为PDF、PPTX。
One分块方法: 支持的文件格式为DOCX、EXCEL、PDF、TXT。
Tag分块方法: Tag 分块方法支持XLSX和CSV/TXT文件格式。 使用“Tag”分块方法的知识库用作标签集.其他知识库可以把标签集当中的标签按照相似度匹配到自己对应的文本块中,对这些知识库的查询也将根据此标签集对自己进行标记。
使用“标签”作为分块方法的知识库不参与 RAG 检索过程。
标签集中的每个文本分块是都是相互独立的标签和标签描述的文本对。
如果文件为XLSX格式,则它应该包含两列无标题:一列用于标签描述,另一列用于标签,标签描述列位于标签列之前。支持多个工作表,只要列结构正确即可。
如果文件为 CSV/TXT 格式,则必须使用 UTF-8 编码并以 TAB 作为分隔符来分隔内容和标签。
在标签列中,标签之间使用英文逗号分隔。不符合上述规则的文本行将被忽略。
其实在我们选择切片方法的同时,还有一个很重要的一个设置文档解析器:DeepDoc。
不同格式和不同检索要求的大量文档,准确的分析成为一项极具挑战性的任务。DeepDoc 就是为了这个目的而诞生的。到目前为止,DeepDoc 中有两个组成部分:视觉处理和解析器。
parser解析器:可以看到包括有如下的这些不同类型的文件解析器。
PDF、DOCX、EXCEL和PPT四种文档格式都有相应的解析器。最复杂的是PDF解析器,因为PDF具有灵活性。PDF解析器的输出包括:
视觉处理:包括了OCR、recognizer、LayoutRecognizer、TSR、init_in_out。
OCR 。由于许多文档都是以图像形式呈现的,或者至少能够转换为图像,因此OCR是文本提取的一个非常重要、基本,甚至通用的解决方案。
输入可以是图像或PDF的目录,或者单个图像、PDF文件。您可以查看文件夹 path_to_store_result ,其中有演示结果位置的图像,以及包含OCR文本的txt文件。
Recognizer:接收图像→预处理→模型推理→后处理→返回识别结果(包含类型、边界框和置信度)。
这个代码似乎是用于文档分析的视觉组件,可能用于识别文档中的表格、文本框、标题等元素。
布局识别(Layout recognition)。来自不同领域的文件可能有不同的布局,如报纸、杂志、书籍和简历在布局方面是不同的。只有当机器有准确的布局分析时,它才能决定这些文本部分是连续的还是不连续的,或者这个部分需要表结构识别(Table Structure Recognition,TSR)来处理,或者这个部件是一个图形并用这个标题来描述。我们有10个基本布局组件,涵盖了大多数情况:
文本 标题 配图 配图标题 表格 表格标题 页头 页尾 参考引用 公式
TSR(Table Structure Recognition,表结构识别)。数据表是一种常用的结构,用于表示包括数字或文本在内的数据。表的结构可能非常复杂,比如层次结构标题、跨单元格和投影行标题。除了TSR,我们还将内容重新组合成LLM可以很好理解的句子。TSR任务有五个标签:
init_in_out方法是一个用于初始化输入和输出的函数,主要功能是处理输入文件(图像或PDF)并准备相应的输出路径。这个函数在视觉识别流程中起到了准备数据的作用,为后续的识别过程提供了标准化的输入和输出路径。 RagFlow在文档切片过程中提供了丰富的配置项供用户进行选择,大家在使用时也需要根据文档的内容和形式仔细进行选择。通过这些配置,可以看到提供的确实比dify在知识管理上有一定的优势。后续在针对RAGflow的其他特性在进行介绍。 |