Langchain中的表格解析:RAG 和表格的爱恨情仇

实现 RAG(Retrieval-Augmented Generation)是一个挑战,尤其是在有效解析和理解非结构化文档中的表格时。这在处理扫描文档或图像格式的文档时尤为困难。这些挑战至少包括以下三个方面:

  • 1.表格的“叛逆期”:不准确的解析可能会破坏表格结构
    表格在文档里就像个叛逆的青少年,结构复杂、格式多变,手写和打印混在一起,还时不时带点非文本元素(比如图片、公式)。想要准确解析它们?难上加难!一不小心,表格结构就被破坏得七零八落,RAG 的结果也跟着遭殃。

  • 2.表格标题的“捉迷藏”:如何提取表格标题并有效地将其与相应的表格关联起来。
    表格标题就像个调皮的小精灵,总是藏在表格旁边,但就是不肯乖乖现身。如何找到它并把它和表格“配对”?这可是个技术活儿!

  • 3.索引结构的“拼图游戏”如何设计索引结构以有效存储表格的语义信息。
    表格的语义信息怎么存?是存成图像、纯文本、LaTeX,还是只存个摘要?这就像在玩拼图,得找到最合适的拼法,才能让 RAG 系统跑得顺畅。

本文首先介绍了在 RAG 中管理表格的关键技术,然后回顾了一些现有的开源解决方案,最后提出并实现了一个新的解决方案。
在这里插入图片描述

工具大比拼

表格解析

该模块的主要功能是从非结构化文档或图像中准确提取表格结构。

附加功能:最好能提取相应的表格标题,并方便开发者将表格标题与表格关联起来。

根据我目前的理解,有几种方法,如图 1 所示:
在这里插入图片描述
图 1:表格解析器。

(a). 利用多模态 LLM,如 GPT-4V,来识别表格并从每个 PDF 页面中提取信息。

  • 输入:图像格式的 PDF 页面
  • 输出:JSON 或其他格式的表格。如果多模态 LLM 无法提取表格数据,它应该对图像进行总结并返回总结。

(b). 利用专业的表格检测模型,如 Table Transformer,来识别表格结构。

  • 输入:图像格式的 PDF 页面
  • 输出:图像格式的表格

©. 使用开源框架,如 unstructured 等,这些框架也使用对象检测模型(unstructured 的表格检测过程在这篇文章中有详细说明)。这些框架允许对整个文档进行全面的解析,并从解析结果中提取与表格相关的内容。

  • 输入:PDF 或图像格式的文档
  • 输出:从整个文档的解析结果中获得的纯文本或 HTML 格式的表格

(d). 使用端到端模型,如 Nougat、Donut 等,来解析整个文档并提取与表格相关的内容。这种方法不需要 OCR 模型。

  • 输入:PDF 或图像格式的文档
  • 输出:从整个文档的解析结果中获得的 LaTeX 或 JSON 格式的表格

值得一提的是,无论使用哪种方法提取表格信息,都应包含表格标题。因为在大多数情况下,表格标题是文档或论文作者对表格的简要描述,可以在很大程度上概括整个表格。

在上述四种方法中,方法 (d) 可以轻松获取表格标题。这对开发者来说非常有利,因为它允许他们将表格标题与表格关联起来。这将在接下来的实验中进行进一步解释。

索引结构

根据索引的结构,解决方案大致可以分为以下几类:

(e). 仅索引图像格式的表格。

(f). 仅索引纯文本或 JSON 格式的表格。

(g). 仅索引 LaTeX 格式的表格。

(h). 仅索引表格的摘要。

(i). 小到大或文档摘要索引结构,如图 2 所示。

  • 小块的内容可以是表格每一行的信息或表格的摘要。
  • 大块的内容可以是图像格式、纯文本格式或 LaTeX 格式的表格。
    在这里插入图片描述

图 2:小到大索引结构(上部)和文档摘要索引结构(中部和下部)。作者提供的图片。

如上所述,表格摘要通常使用 LLM 生成:

  • 输入:图像格式、文本格式或 LaTeX 格式的表格
  • 输出:表格摘要

不需要表格解析、索引或 RAG 的算法

有些算法不需要表格解析。

(j). 将相关图像(PDF 页面)和用户的查询发送到 VQA 模型(如 DAN 等)或多模态 LLM,并返回答案。

  • 需要索引的内容:图像格式的文档
  • 发送到 VQA 模型或多模态 LLM 的内容:查询 + 对应的页面(图像形式

(k).相关文本格式的 PDF 页面和用户的查询发送到 LLM,然后返回答案。

  • 需要索引的内容:文本格式的文档
  • 发送到 LLM 的内容:查询 + 对应的页面(文本格式

(l).相关图像(PDF 页面)、文本块和用户的查询发送到多模态 LLM(如 GPT-4V 等),并直接返回答案

  • 需要索引的内容:图像格式的文档和文本格式的文档块
  • 发送到多模态 LLM 的内容:查询 + 对应的图像格式文档 + 对应的文本块

此外,以下是一些不需要索引的方法,如图 3 和图 4 所示:
在这里插入图片描述

图 3:类别 (m)

(m). 首先,应用类别 (a) 到 (d) 中的一种方法,将文档中的所有表格解析为图像格式。然后直接将所有表格图像和用户的查询发送到多模态 LLM(如 GPT-4V 等),并返回答案。

  • 需要索引的内容:无
  • 发送到多模态 LLM 的内容:查询 + 所有解析后的表格(图像格式)在这里插入图片描述
    图 4:类别 (n)。

(n). 使用 (m) 中提取的图像格式的表格,然后使用 OCR 模型识别表格中的所有文本,然后直接将表格中的所有文本和用户的查询发送到 LLM,并直接返回答案。

  • 需要索引的内容:无
  • 发送到 LLM 的内容:用户的查询 + 所有表格内容(文本格式)

值得注意的是,有些方法不依赖于 RAG 过程:

  • 第一种方法不使用 LLM,而是在特定数据集上进行训练,使模型(如 BERT 类 Transformer)更好地支持表格理解任务,例如 TAPAS。
  • 第二种方法使用 LLM,采用预训练、微调方法或提示,使 LLM 能够执行表格理解任务,如 GPT4Table。

现有的开源解决方案

LlamaIndex 提出了四种方法,其中前三种使用多模态模型。

  1. 检索相关图像(PDF 页面)并将其发送到 GPT-4V 以响应查询。
  2. 将每个 PDF 页面视为图像,让 GPT-4V 对每个页面进行图像推理。为图像推理构建文本向量存储索引。查询答案时,针对图像推理向量存储进行查询。
  3. 使用 Table Transformer 从检索到的图像中裁剪表格信息,然后将这些裁剪后的图像发送到 GPT-4V 以响应查询。
  4. 对裁剪后的表格图像应用 OCR,并将数据发送到 GPT4/ GPT-3.5 以回答查询。

根据本文的分类:

  • 第一种方法类似于本文的类别 (j),不需要表格解析。然而,结果显示,即使答案在图像中,也无法生成正确答案。
  • 第二种方法涉及表格解析,对应于类别 (a)。索引的内容是表格内容或摘要,基于 GPT-4V 返回的结果,可能对应于类别 (f) 或 (h)。这种方法的缺点是 GPT-4V 从图像中识别表格并提取其内容的能力不稳定,特别是当图像包含表格、文本和其他图像的混合时,这在 PDF 格式中很常见。
  • 第三种方法类似于类别 (m),不需要索引。
  • 第四种方法类似于类别 (n),也不需要索引。其结果表明,由于无法从图像中提取表格信息,导致生成错误答案。

通过测试,发现第三种方法的整体效果最好。然而,根据我的测试,第三种方法在检测表格方面存在困难,更不用说正确地将表格标题与表格合并了。

Langchain 也提出了一些解决方案,半结构化 RAG 的关键技术包括:

  • 表格解析使用 unstructured,属于类别 ©
  • 索引方法是文档摘要索引,属于类别 (i),小块内容:表格摘要,大块内容:原始表格内容(文本格式)。

如图 5 所示:在这里插入图片描述
图 5:Langchain 的半结构化 RAG。来源:半结构化 RAG

半结构化和多模态 RAG 提出了三种解决方案, 架构如图 6 所示。在这里插入图片描述

图 6:Langchain 的半结构化和多模态 RAG。来源:半结构化和多模态 RAG。

选项 1 类似于本文的类别 (l)。它涉及使用多模态嵌入(如 CLIP)来嵌入图像和文本,使用相似性搜索检索两者,并将原始图像和块传递给多模态 LLM 以进行答案合成。

选项 2 利用多模态 LLM,如 GPT-4V、LLaVA、FUYU-8b,从图像生成文本摘要。然后,嵌入并检索文本,并将文本块传递给 LLM 以进行答案合成。

  • 表格解析使用 unstructured,属于类别 (d)
  • 索引结构是文档摘要索引(类别 (i)),小块内容:表格摘要,大块内容:文本格式的表格

选项 3 使用多模态 LLM(如 GPT-4V、LLaVA、FUYU-8b)从图像生成文本摘要,然后嵌入并检索图像摘要,并引用原始图像(类别 (i)),然后将原始图像和文本块传递给多模态 LLM 以进行答案合成。

提出的解决方案

本文提出的解决方案:在这里插入图片描述

  • 表格解析:使用 Nougat(类别 (d))。根据我的测试,它的表格检测比 unstructured(类别 ©)更有效。此外,Nougat 可以很好地提取表格标题,非常方便与表格关联。
  • 文档摘要索引结构(类别 (i)):小块的内容包括表格摘要,大块的内容包括相应的 LaTeX 格式的表格和文本格式的表格标题。我们使用 multi-vector retriever 实现它。
  • 表格摘要获取方法:将表格和表格标题发送到 LLM 进行摘要。

这种方法的优点是它高效地解析表格,同时全面考虑了表格摘要与表格之间的关系。它还消除了对多模态 LLM 的需求,从而节省了成本。

Nougat 的原理

Nougat 是基于 Donut 架构开发的。它通过网络隐式识别文本,不需要任何 OCR 相关的输入或模块,如图 8 所示。在这里插入图片描述
图 8:基于 Donut 的端到端架构。Swin Transformer 编码器将文档图像转换为潜在嵌入,随后以自回归方式转换为标记序列。来源:Nougat: Neural Optical Understanding for Academic Documents。

Nougat 解析公式的能力令人印象深刻。它在解析表格方面也表现出色。方便的是,它可以关联表格标题,如图 9 所示:
在这里插入图片描述图 9:运行 Nougat 的结果,结果文件为 Mathpix Markdown 格式(通过 vscode 插件打开),表格为 LaTeX 格式。

我测试发现表格标题总是固定在表格的下一行。这种一致性表明这不是偶然的。 Nougat 是如何实现这种效果的?

鉴于它是一个端到端模型,缺乏中间结果,它很可能严重依赖于其训练数据。

根据格式化训练数据的代码,对于表格,紧跟在 \end{table} 之后的行是 caption_parts,这似乎与提供的训练数据的格式一致:

def format_element(element: Element, keep_refs: bool = False, latex_env: bool = False
) -> List[str]:"""将给定的元素格式化为格式化字符串列表。参数:element (Element): 要格式化的元素。keep_refs (bool, 可选): 是否在格式化中保留引用。默认为 False。latex_env (bool, 可选): 是否使用 LaTeX 环境格式化。默认为 False。返回:List[str]: 表示格式化元素的格式化字符串列表。""".

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/899020.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/899020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Solr-搜索引擎-入门到精通

以下是对 Apache Solr 的简介及其常用语法的快速入门指南: 一、Solr 是什么? • 核心定位:Apache Solr 是一个基于 Lucene 的高性能、开源的搜索平台,支持全文检索、分词、高亮、聚合统计等功能。 • 核心功能: • 全…

原生后台GPS位置限制,降低功耗

1.后台 GPS 位置限制的背景 为了控制功耗,Android 平台对后台应用获取位置信息的频率进行了限制。后台的定义与后台执行限制一致,即应用不在前台运行时被视为后台应用。 2.更新间隔限制: 后台应用获取位置信息的更新间隔不能超过一定阈值。…

Docker 搭建 PlantUML 服务:高效生成 UML 图的最佳实践

PlantUML 是一款开源的 UML 图形生成工具,它支持生成类图、时序图、用例图、活动图等多种类型的 UML 图,广泛应用于软件设计、文档编写以及团队沟通中。通过 Docker 安装 PlantUML,开发者可以快速搭建环境,轻松生成 UML 图&#x…

简鹿办公汇总快速打开 Windows 资源管理器的几种方式

无论你是刚开始使用电脑的新手,还是已经有一定经验的用户,了解如何在 Windows 系统中打开资源管理器都是一个非常基本且重要的技能。Windows 资源管理器(现在称为“文件资源管理器”)是帮助你浏览、查找和管理计算机上所有文件的主…

嵌入式 python 安装

下载嵌入式Python后解压 https://www.python.org/ftp/python/3.12.9/python-3.12.9-embed-amd64.zip cd python-3.12.9-embed-amd64 安装 pip .\python.exe .\get-pip.py 放开限制 嵌入式 Python 为了减少体积,默认会有一些限制。你需要编辑 python312._pth 文…

DeepSeek底层揭秘——GEMM

目录 1. 什么是 GEMM? (1) 定义 (2) 核心目标 2. 核心功能 3. 对比传统通用矩阵乘法库 4. 技术要素 (1) 硬件感知优化 (2) 自动调优 (3) 高效内存管理 (4) 混合精度计算 5. 难点挑战(含解决方案) 6. 技术路径 7. 具体技术实现 8…

DNA-PAINT

参考: 【科研教程】NUPACK网页版使用教程 https://www.bilibili.com/video/BV1G94y1W7mN/NUPACK新版网页版教程-模拟部分 https://zhuanlan.zhihu.com/p/678730568NUPACK 4.0 User Guide https://docs.nupack.org/NUPACK网页版使用指南 https://zhuanlan.zhihu.com/p/55024017…

小程序内表格合并功能实现—行合并

功能介绍:支付宝小程序手写表格实现行内合并,依据动态数据自动计算每次需求合并的值,本次记录行内合并,如果列内合并,同理即可实现 前端技术:grid布局 display:grid 先看实现效果: axml&…

计算机视觉cv2入门之角点检测

角点是指图像中两条边缘线的交点,这些交点通常代表了图像中的重要特征。在计算机视觉中,角点检测是一种关键的技术,它可以帮助我们从图像中提取出这些重要的特征点,进而用于图像匹配、物体识别、图像拼接等多种应用。 角点检测示例…

抽奖的诱惑系统注册与登录功能测试报告

目录 一:项目背景 二:项目功能 (1) 注册功能 (2) 登录功能 电话 密码登录 电话 短信登录 三:设计测试用例 四:功能测试 五:自动化测试代码 七:遗留风…

【多媒体交互】Unity Kinect实现UI控件的点击

在Unity中,通过Kinect实现UI控件的点击功能,主要涉及手部追踪、坐标映射和手势检测三个核心环节。 实现步骤 初始化Kinect与关节追踪 使用KinectManager获取用户ID和手部关节点(如JointType.HandLeft)的坐标。 long userId _…

【蓝桥杯】每日练习 Day12 贡献法

前言 今天给大家带来两道贡献法的问题,先来讲一下什么是贡献法。 贡献法,与其说是一种算法,不如说是一种数学方法,是一种思维方式。 先来给大家举个例子,假设现在有个问题,需要你在一个只有小写字母的字…

go test相关命令

在 Go 项目中,go test 可以用于运行整个工程中的测试文件。以下是几种方式: 1. 运行当前模块或整个工程的测试 go test ./..../... 表示递归测试所有子目录中的测试文件(*_test.go)。适用于 Go Modules 或 GOPATH 结构的项目。 …

RocketMQ 详细知识点总结

RocketMQ 详细知识点总结 1. 核心概念 1.1 基础组件 Producer(生产者) 消息的发送者支持同步、异步和单向发送方式提供事务消息功能Consumer(消费者) 消息的接收者支持Push和Pull两种消费模式支持集群消费和广播消费NameServer(命名服务) 路由注册中心无状态节点,可集…

文字也能生成视频?【蓝耘实践】:通义万相2.1文生视频

文字也能生成视频?【蓝耘实践】:通义万相2.1文生视频 上次我们已经介绍了关于在蓝耘云平台实践通义万相的基本玩法,这次将介绍进阶玩法,也就是使用文字来生成视频。 首先我们还是先注册或者登录蓝耘云平台。 通过蓝耘平台进入流…

蓝桥杯 跑步计划

问题描述 小蓝计划在某天的日期中出现 1 时跑 5 千米,否则只跑 1 千米。注意:日期中出现 1 不仅指年月日,也指星期。 请问按照小蓝的计划,2023 年小蓝总共会跑步锻炼多少千米? 例如: 5 月 1 日1 月 13 …

K8S集群新增和删除Node节点(K8s Cluster Adds and Removes Node Nodes)

实战:在已有K8S集群如何新增和删除Node节点 在Kubernetes (K8S) 集群中,Node节点是集群中的工作节点,它们运行着容器的实际实例。管理K8S集群中的Node节点,包括新增和删除节点,是一个常见且重要的操作,可以…

ASP.NET Web的 Razor Pages应用,配置热重载,解决.NET Core MVC 页面在更改后不刷新

Razor Pages应用,修改页面查看修改效果,如果没有热重载,改一句话跑一次,这个活就没法干了。 1、VS2022中的NuGet中安装RuntimeCompilation Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 需要配套你的.net sdk版本&#x…

死亡并不是走出生命 而是走出时间

目录 第一章 倒春寒 第二章 悖论与共生 第三章 坍缩与永恒 第四章 在时差里相爱 终章 你从未离开 第一章 倒春寒 2022年春天的扬州东关街,青衣在文昌阁古槐下调试着「时间胶囊」算法。这个能将人类记忆转化为数据流的程序,是他用三年时间对抗渐冻…

网络安全基础:五类安全服务、八种安全机制与OSI七层模型的全面解析

目录 引言 五类安全服务 2.1 认证服务 2.2 访问控制 2.3 数据保密性 2.4 数据完整性 2.5 不可否认性 八种安全机制 3.1 加密机制 3.2 数字签名 3.3 访问控制机制 3.4 数据完整性机制 3.5 认证交换机制 3.6 流量填充机制 3.7 路由控制机制 3.8 公证机制 OSI七层…