AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


RAG系列07:当RAG遇上PDF表格,如何构建索引并使用大模型进行QA
发布日期:2024-05-09 10:54:50 浏览次数: 2563 来源:差分隐私


有效解析和理解非结构化文档中的表格时,设计 RAG 方案仍然是一大挑战。 以图片格式存在的表格情况下,这更困难,如扫描文件中的表格。这些挑战至少包含一下几个方面:

  • 扫描文档或图像文档的复杂性,如多样化的结构、包含非文本元素以及手写和打印内容的结合,为自动准确提取表格信息带来了挑战。不准确的解析可能会破坏表格结构,使用不完整的表格进行嵌入不仅可能无法捕获表格的语义信息,而且还很容易破坏 RAG 结果。
  • 如何提取表格标题并有效地将它们链接到各自的表格。
  • 如何设计一个索引结构来有效地存储表格的语义信息。 本文首先介绍管理 RAG 中表格的关键技术,然后回顾一些现有的开源解决方案,再提出并实施一个可能的解决方案。

关键技术

Table Parsing(表格解析)

这个模块的主要功能是从非结构化文档或图像中准确提取表格结构。最好能够提取相应的表格标题,并方便开发者将表格标题与表格关联起来。目前有以下几种方法:

  1. 使用多模态 LLM(multimodal LLM)如 GPT-4V 来识别表格并从每个 PDF 页面中提取信息
  2. 利用专门的标检测模型,如Table Transformer[1]来辨别表结构
  3. 使用开源框架,如unstructured[2]或者其他框架,这些框架允许对整个文档进行全面分析,并从分析的结果中提取与表相关的内容。
  4. 使用端到端模型(如 Nougat、Donut 等)解析整个文档并提取与表格相关的内容。此方法不需要 OCR 模型。 值得一提的是,无论使用何种方法提取表格信息,都应包含表格标题。这是因为在大多数情况下,表格标题是文档或论文作者对表格的简要描述,可以在很大程度上总结整个表格。在以上几种方法中,第四种可以相对较容易地对表格标题进行检测以及和表格进行关联。

Index Structure

索引表格的方式大概可以分为以下几种

  1. 仅对图像格式的表格进行索引
  2. 仅对纯文本或 JSON 格式的表进行索引
  3. 仅索引 LaTeX 格式的表格
  4. 仅索引表的摘要(表的摘要通常可以使用 LLM 进行生成,也可以尝试使用多模态模型)
  5. 从小到大或按照文档摘要索引结构(小块内容可以是表中的行,大块内容是图像、文本或者 LaTeX 格式表格),如下图所示

也有一些算法不需要对表进行解析,比如可以将相关的 PDF 页面(图像)和用户查询发送到 VQA 模型(如 DAN)或者多模态 LLM(如 GPT-4V),即可返回答案,如下图所示:

同时,也可以将图片,文本块,用户查询发送到多模态 LLM 直接得到答案。

值得注意的是,并不是所有的方法都依赖于 RAG 流程,比如:

  • 在特定数据集上进行训练,并使模型(类似 BERT 的 transformers)能够支持表理解的任务,如TAPAS[3]方法。
  • 使用 LLM 采用预训练、微调或者提示词的方式,是的 LLM 可以执行表格理解任务,如  GPT4Table[4]方法。

现有开源解决方案

LlamaIndex 中提供了四种方法,其中前三种依赖多模态模型:

  1. 检索相关图像,并将其发送到 GPT-4V 进行回复
  2. 将每个 PDF 页面作为图像,让 GPT-4V 对每个页面进行 reasonings,并对其建立文本索引,然后根据 Image Reasoning Vector Store 进行查询答案
  3. 使用 Table Transformer 从检索到的图像中裁切表信息,然后使用 GPT-4V 进行回答
  4. 对裁剪后的表格图像 OCR 处理,将文本发送到 LLM 中进行回答 Langchain 中也有一些解决方案,有以下几类:
  • 半结构化 RAG[5]:首先使用 Unstructured 从 pdf 中解析文本和表格,然后使用 multi-vector retriever 存储原始的表格和文本,同时对表格进行总结,最后用 LCEL 实现问答链路。主要流程如下所示(实际上这里的最后一个 LLM 并不是多模态 LLM)
  • 半结构化与多模态 RAG[6]:这个当中实际上提出了多种方案,如下图所示。 - Option1:和半结构化 RAG 类似,使用多模态 embedding(如 CLIP)对图像和文本进行 embedding,然后将原始图像和文本块传入到多模态 LLM 进行回答 - Option2:也是使用多模态 LLM,根据图像生成文本摘要,然后对文本进行 embedding,这样通过传统 RAG 链路即可进行 QA - Option3:从图像生成文本摘要,然后进行 embedding,但是 QA 的时候,根据 embedding 找到原始的图像,并使用多模态 LLM 进行回答

建议的方案

本文对关键技术和现有解决方案进行了总结、分类和讨论。基于此,我们提出了以下解决方案,如下图所示。为简单起见,这里省略了一些 RAG 模块,例如重新排名和查询重写。

  • 表格解析:采用 Nougat,根据作者的描述,他的表检测功能比 unstructured 更强大,同时也能很好地提取表格标题,非常方便与表格进行关联
  • 文档摘要索引:小块的内容包括表格摘要,大块的内容包括 LaTeX 格式的表格和标题,然后采用 Multi-Vector Retriever 策略存储
  • 表格摘要:将表格和表格标题发送给 LLM 进行汇总

这里介绍一下Nougat[7],它基于Donut[8]开发,不需要与 OCR 相关的模块,总体架构图为:Nougat 解析公式表格的能力令人印象深刻,也能对表格标题进行关联(解析出来的表格式 LaTeX 格式),比如下面这个例子:

采用 Nougat,有以下有缺点:

  • Pros(优点) - 可以将公示和表格等比较难解析的部分解析为 LaTeX 源码 - 解析的结果是类似于 Markdown 的半结构化文档 - 可以轻松获取表格标题并与表关联
  • Cons(缺点) - 解析速度慢,大规模使用可能受限 - Nougat 是基于科研论文进行训练的,因此对于类似格式比较友好,对于其他格式可能效果一般 - 双栏中解析表格不如单栏中效果好

总结

本文讨论了 RAG 流程中表处理的关键技术和现有解决方案,并提出了解决方案及其实现。本文推荐使用 nougat 来解析表格。但是,如果有更快、更有效的解析工具可用,我们也建议对其进行替换。对工具的态度是先有正确的想法,然后找到工具来实现它,而不是依赖某个具体的工具。在本文中,我们将所有表内容输入到 LLM。但是,在实际场景中,我们应该考虑表超过 LLM 上下文长度的情况,比如通过有效地分块方法来在一定程度上解决这个问题。

参考资料

[1]

Table Transformer: https://github.com/microsoft/table-transformer

[2]

unstructured: https://unstructured-io.github.io/unstructured/best_practices/table_extraction_pdf.html

[3]

TAPAS: https://aclanthology.org/2020.acl-main.398.pdf

[4]

GPT4Table: https://arxiv.org/pdf/2305.13062.pdf

[5]

半结构化RAG: https://github.com/langchain-ai/langchain/blob/master/cookbook/Semi_Structured_RAG.ipynb?ref=blog.langchain.dev

[6]

半结构化与多模态RAG: https://github.com/langchain-ai/langchain/blob/master/cookbook/Semi_structured_and_multi_modal_RAG.ipynb

[7]

Nougat: https://arxiv.org/pdf/2308.13418.pdf

[8]

Donut: https://arxiv.org/pdf/2111.15664.pdf



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询