前面很多期介绍了密集文档场景的RAG方法,今天来看看大量表格场景的RAG怎么做的。
现有结合大模型的方法通常需要将整个表格作为输入,这会导致一些挑战,比如位置偏差、上下文长度限制等,尤其是在处理大型表格时。为了解决这些问题,文章提出了TableRAG框架,该框架利用查询扩展结合模式和单元格检索,以在向LLM提供信息之前精确定位关键信息。这种方法能够更高效地编码数据和精确检索,显著减少提示长度并减轻信息丢失。
表提示技术在LLM中的应用比较
(a) Read Table
语言模型读取整个表格。这是最直接的方法,但往往不可行,因为大型表格会超出模型的处理能力。阴影区域表示提供给语言模型的数据,包括所有行和列。对于大型表格,这种方法不现实,因为会超过模型的令牌限制。
(b) Read Schema
语言模型只读取表格的模式(schema),即列名和数据类型。只包含列名和数据类型的信息,不包含表格内容的具体信息。这种方法会导致表格内容的信息丢失。
(c) Row-Column Retrieval
对行和列进行编码,然后根据它们与问题的相似性进行选择。只有行和列的交集被呈现给语言模型。 编码后,基于与问题的相关性选择行和列。 对于大型表格,编码所有行和列仍然不可行。
(d) Schema-Cell Retrieval (Ours)
编码列名和单元格,并根据它们与语言模型生成的关于问题查询的相关性进行检索。只有检索到的模式和单元格提供给语言模型。 包括检索到的列名和单元格值。 提高了编码和推理的效率。
(e) Retrieval Performance on ArcadeQA
展示了在 ArcadeQA 数据集上不同方法的检索结果。TableRAG 在列和单元格检索方面都优于其他方法,从而提高了后续表格推理过程的性能。
方法
TableRAG Example
核心思想是结合模式检索和单元格检索,获得解决问题的必要信息,通过程序辅助的LLM。实际上,没必要将整个表格给LLM。相反,关键信息通常位于与问题直接相关的特定列名、数据类型和单元格值中。例如,考虑一个问题“钱包的平均价格是多少?”为了解决这个问题,程序可能只需要提取与“钱包”相关的行,然后从价格列计算平均值。仅知道相关列名以及表中“钱包”的表示方式就足以编写程序。因此,TableRAG解决了RAG的上下文长度限制。
图片
TableRAG流程图:表格被用来构建Schema和单元格数据库。然后通过LLM将问题扩展成多个模式和单元格查询。这些查询依次用于Schema检索和列-单元格对。每个查询的前K个候选项被组合起来,输入到LLM求解器的提示中以回答问题。
TableRAG核心组件
- Tabular Query Expansion(表格查询扩展)
为了有效地操作表格,关键是要精确地找出查询所需的列名和单元格值。与之前的方法不同,TableRAG 不仅使用问题本身作为单一查询,而是为模式和单元格值生成单独的查询。例如,对于问题 "What is the average price for wallets?",模型被提示生成针对列名(如 "product" 和 "price")以及相关单元格值(如 "wallet")的潜在查询。然后,这些查询被用来从表格中检索相关的模式和单元格值。 - Schema Retrieval(Schema检索)
在生成查询后,Schema检索会使用预训练的编码器fenc
来获取相关的列名。编码器将查询与编码的列名进行匹配,以确定相关性。检索到的模式数据包括列名、数据类型和示例值。对于被识别为数值或日期时间类型的列,会显示最小值和最大值作为示例值;对于分类列,会展示三个最常见的类别作为示例值。通过这种方式,检索到的模式为表格的格式和内容提供了结构化的概览,这将用于更有针对性的数据提取。
相关prompt如下:
- Cell Retrieval(单元格检索)
在Schema检索之后,进行单元格检索以提取回答查询所需的特定单元格值。这涉及到构建一个由表格 T 中的不同列-值对组成的数据库,表示为 $ V = {(C_j, v_{ij})} $,其中 $ C_j $ 是第 $ j $ 列的列名。在实践中,不同值的数量通常远小于单元格的总数,这显著提高了单元格检索的效率。
单元格检索在 TableRAG 中起着至关重要的作用:
相关prompt如下:
- 单元格识别:它允许语言模型准确地检测表格中特定关键词的存在,这对于有效的索引至关重要。
- 单元格-列关联:它还使语言模型能够将特定单元格与其相关的列名关联起来,这在问题涉及特定属性时至关重要。
- Cell Retrieval with Encoding Budget
在最坏的情况下,不同值的数量可能与单元格的总数相匹配。为了保持 TableRAG 在这种情况下的可行性,引入了一个单元格编码预算$ B $。如果不同值的数量超过$ B $,编码过程将限制在出现频率最高的 $ B $ 对,从而在处理大型表格时提高效率。 - Program-Aided Solver(程序辅助求解器)
在获得与问题相关的列名和单元格值后,语言模型可以使用这些信息有效地与表格交互。TableRAG 与可以以编程方式与表格交互的语言模型代理兼容。在这项工作中,作者考虑了 ReAct,这是一种流行的扩展语言模型功能的方法,已在最近的文献中用于在表格 QA 基准测试中取得最先进的结果。
相关prompt如下:
实验结果
数据集:为了验证TableRAG在大规模表格上的可扩展性,作者构建了两个新的基准数据集:ArcadeQA和BirdQA,分别源自Arcade和BIRD-SQL数据集。此外,作者还从TabFact数据集中生成了合成数据,将表格扩展到更大的规模。
并且比较了四种不同的方法,包括ReadTable、ReadSchema、RandRowSampling和RowColRetrieval。所有方法都基于相同的PyReAct求解器实现。
图片
图片
图片
TableRAG的检索设计显著减少了计算成本和token使用,同时保持了高性能。
参考文献
TableRAG: Million-Token Table Understanding with Language Models,https://arxiv.org/abs/2410.04739v1