AI知识库 AI知识库

53AI知识库

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


RAG系列07:当RAG遇上PDF表格,如何构建索引并使用大模型进行QA
浏览次数: 1568

有效解析和理解非结构化文档中的表格时,设计 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


推荐新闻
RAG系列04:使用ReRank进行重排序
本文介绍了重排序的原理和两种主流的重排序方法:基于重排模型和基于 LLM。文章指出,重排序是对检索到的上下文进行再次筛选的过程,类似于排序过程中的粗排和精排。在检索增强生成中,精排的术语就叫重排序。文章还介绍了使用 Cohere 提供的在线模型、bge-reranker-base 和 bge-reranker-large 等开源模型以及 LLM 实现重排序的方法。最后,文章得出结论:使用重排模型的方法轻量级、开销较小;而使用 LLM 的方法在多个基准测试上表现良好,但成本较高,且只有在使用 ChatGPT 和 GPT-4 时表现良好,如使用其他开源模型,如 FLAN-T5 和 Vicuna-13B 时,其性能就不那么理想。因此,在实际项目中,需要做出特定的权衡。
LangGPT论文:面向大语言模型的自然语言编程框架(中文版)
大语言模型 (Large Language Models, LLMs) 在不同领域都表现出了优异的性能。然而,对于非AI专家来说,制定高质量的提示来引导 LLMs 是目前AI应用领域的一项重要挑战。
第三篇:要真正入门AI,OpenAI的官方Prompt工程指南肯定还不够,您必须了解的强大方法论和框架!!!
自从ChatGPT(全名:Chat Generative Pre-trained Transformer)于2022年11月30日发布以来,一个新兴的行业突然兴起,那就是提示工程(Prompt engineering),可谓如日冲天。从简单的文章扩写,到RAG,ChatGPT展现了前所未有的惊人能力。
(三)12个RAG痛点及其解决方案
痛点9:结构化数据QA 痛点10:从复杂 PDF 中提取数据 痛点11:后备模型 痛点12:LLM安全
(二)12个RAG痛点及其解决方案
痛点5:格式错误 痛点6:不正确的特异性 痛点7:不完整 痛点8:数据摄取可扩展性

联系我们

售前咨询
186 6662 7370
产品演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询