链载Ai

标题: 开源支持ORC及板式识别:RAGFlow解锁文档智能,引领 RAG 技术新潮流 [打印本页]

作者: 链载Ai    时间: 昨天 22:20
标题: 开源支持ORC及板式识别:RAGFlow解锁文档智能,引领 RAG 技术新潮流

RAGFlow 是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型(LLM)针对用户各类不同的复杂格式数据提供可靠的问答以及有理有据的引用。

RAGFlow 的核心优势在于其深度文档理解能力,它能够从各类复杂格式的非结构化数据中提取真知灼见,并支持无限上下文场景。通过基于模板的文本切片机制,RAGFlow 保证了结果的可控性和可解释性,并最大程度降低了幻觉的风险。此外,RAGFlow 兼容各类异构数据源,并提供自动化 RAG 工作流,方便用户集成到自己的系统中。


RAGFlow 的核心优势


DeepDoc:深度文档理解的基石

DeepDoc 是 RAGFlow 的核心组件,它利用视觉信息和解析技术,对文档进行深度理解,提取文本、表格和图像等信息。DeepDoc 的功能模块包括:


系统架构

系统由以下组件组成:

RAG系统架构的工作流程如下:

  1. 用户输入查询。

  2. 查询分析器分析查询并提取关键信息。

  3. 检索模块使用关键信息从文档中检索相关的信息。

  4. 重排模块对检索到的信息进行排序和过滤。

  5. LLM使用排序后的信息生成最终答案或输出。


核心代码实现

OCR识别:ocr.py

代码导读和解析: ocr.py代码定义了一个OCR 的类 OCR 以及相关的辅助类和函数。它利用 ONNX Runtime 进行推理,并使用 PaddleOCR 模型进行文本检测和识别。
主要组件:TextRecognizer 类: 负责文本识别。使用 ONNX Runtime 加载识别模型 (rec.onnx)。对图像进行预处理,包括缩放、归一化和填充。使用 CTCLabelDecode 进行后处理,将模型输出转换为文本。TextDetector 类: 负责文本检测。使用 ONNX Runtime 加载检测模型 (det.onnx)。对图像进行预处理,包括缩放、归一化和通道转换。使用 DBPostProcess 进行后处理,提取文本框坐标。对文本框进行过滤和排序。OCR 类: 整合检测和识别功能。初始化 TextDetector 和 TextRecognizer 实例。定义 detect 方法,用于检测图像中的文本框。定义 recognize 方法,用于识别单个文本框中的文本。定义 __call__ 方法,用于对图像进行端到端 OCR 处理,包括检测和识别。
辅助函数:transform(data, ops=None): 对数据进行一系列操作。create_operators(op_param_list, global_config=None): 根据配置创建操作列表。load_model(model_dir, nm): 加载 ONNX 模型。
代码流程:1.创建 OCR 实例。2.调用 __call__ 方法,传入图像数据。3.__call__ 方法首先使用 TextDetector 进行文本检测,获取文本框坐标。4.对每个文本框,使用 get_rotate_crop_image 方法进行旋转和裁剪。5.使用 TextRecognizer 对裁剪后的图像进行文本识别。6.过滤掉置信度低于阈值的识别结果。7.返回最终的文本框坐标和识别结果。
代码特点:使用 ONNX Runtime 进行推理,可以实现跨平台部署。支持多种预处理和后处理操作,可以灵活调整模型的行为。代码结构清晰,易于理解和扩展。


文档板式分析实现(recognizer.py)

RAGFlow提供了一个用于文档板式分析的解决方案,可以识别文档图像中的不同区域类型,例如表格、标题、段落等。它可以用于文档理解、信息提取等任务。

代码定义了一个名为Recognizer的类,用于对文档图像进行板式分析,识别不同类型的区域,例如表格、标题、段落等。它使用ONNX Runtime进行推理。
主要组件:Recognizer 类: 负责板式分析的核心功能。使用ONNX Runtime加载模型 (task_name.onnx)。定义多种排序方法,例如按Y坐标、X坐标、类别置信度等排序。定义计算重叠区域的方法。定义布局清理方法,用于消除冗余或重叠的布局区域。定义创建模型输入的方法。定义后处理方法,将模型输出转换为布局信息。定义 __call__ 方法,用于对图像进行板式分析。
辅助函数:排序方法: sort_Y_firstly, sort_X_firstly, sort_C_firstly, sort_R_firstlyoverlapped_area(a, b, ratio=True): 计算两个矩形区域的重叠面积或重叠比例。layouts_cleanup(boxes, layouts, far=2, thr=0.7): 清理布局信息,消除冗余或重叠的区域。查找重叠区域的方法: find_overlapped, find_horizontally_tightest_fit, find_overlapped_with_threashold
代码流程:1.创建 Recognizer 实例,指定类别列表和任务名称。2.调用 __call__ 方法,传入图像列表和置信度阈值。3.__call__ 方法首先将图像列表转换为模型输入格式。4.使用ONNX Runtime进行推理,获取模型输出。5.对模型输出进行后处理,提取布局信息,包括区域类型、坐标和置信度。6.返回最终的布局信息列表。
代码特点:使用ONNX Runtime进行推理,可以实现跨平台部署。支持批量推理,提高处理效率。提供多种排序和重叠区域查找方法,方便布局分析和后处理。代码结构清晰,易于理解和扩展。
可能的改进:支持GPU加速,提高推理速度。支持更复杂的布局分析,例如表格结构识别、文字方向检测等。集成OCR功能,可以识别布局区域内的文本内容。


RAGFlow 的应用场景

RAGFlow 可以应用于各种场景,例如:


代码及Demo

代码库:https://github.com/infiniflow/ragflow

在线Demo:https://demo.ragflow.io/


RAGFlow:开启文档智能的新时代

RAGFlow 作为新一代开源 RAG 引擎,在文档理解能力、可控可解释性、防幻觉性、异构数据支持、工作流灵活性等多个维度均展现出了卓越的表现。相信通过 RAGFlow 的加持,个人和企业在面对纷繁复杂的文档数据时,将不再像摸象认形那般被蒙在鼓里,而是拥有了高效获取真知灼见的力量。

对于正在寻求突破文档数据利用瓶颈的企业来说,RAGFlow 绝对是一款值得拥抱的利器。 我们有理由期待,在不久的将来,以 RAGFlow 为代表的新型文档智能基础设施,将为知识型经济带来前所未有的推动力。






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5