基于大语言模型(LLM)的表格理解任务探索与实践

大语言模型(LLMs)的发展日新月异,为表格理解任务带来了新的可能性。表格理解任务,如基于表格的问答和表格事实验证,要求从自由形式的文本和半结构化的表格数据中提取深层次的语义信息。与泛化的文本推理任务不同,表格数据的复杂性对推理任务提出了更高的要求。

目前,研究者们主要探索了两种技术路线来应用LLMs于表格理解任务。

  • 针对表格数据类型对LLMs进行领域适配,以更好地支持表格数据的理解。
  • 直接使用预训练的通用LLMs,并借助一些额外手段(如Prompt技巧、工具使用等)来完成表格理解任务。

1、方法概览

直接使用预训练LLMs进行表格数据理解的技术路线主要有两种主流做法。第一种是基于文本推理的直接方式,将全量表格数据以一定分隔符的方式标记,作为Prompt的一部分输入LLMs,并结合Prompt技巧,直接对问题进行文本推理。第二种是基于符号推理的间接方式,将表格的结构信息(如表头、数据样例等)输入Prompt,根据任务需求指导LLMs编写一定的代码(如SQL、Python等),并调用对应的工具执行代码,得到想要的结果。

1.1、文本推理的方式

1.1.1、GPT4Table

GPT4Table提出了一种全新的benchmark,并在此基础上验证了ChatGPT在各个子任务上的效果。研究团队提出了self-augmentation的Prompt技巧,进一步提升了理解效果:

  • 首先让LLM输出一些对表格数据的理解作为额外的知识
  • 将这些额外的知识加入到之前的问题prompt里,用于生成最终的答案

他们将表格数据的结构理解能力分为两大类:

  • 区分出表格数据(从文本中定位出哪些内容表示的是表格数据)及解析表格数据(从各种类型,包括XML、CSV、XLSX等,中解析出表格数据的能力)
  • 搜索(根据值进行位置搜索/根据位置定位到单元格值)和检索(根据行列信息找到对应的值)

他们设计并对比了一系列Prompt方式进行文本推理进行表格数据理解任务的能力,得出了一些结论和技巧。

  • 不同分隔符的差异:在prompt中使用HTML语言表示数据,能普遍取得比简单分隔符表示数据更好的效果。
  • one-shot相比zero-shot效果提升明显:尤其是对于一些高度依赖结构解析能力的任务。
  • Prompt顺序的影响:添加的外部信息的prompt放在表格数据之前比放在之后会更好。
  • 有关Partition mark和format explanation的prompt可能损失搜索/检索相关的能力

论文原文

1.1.2、Rethinking Tabular Data Understanding with LLM

这篇论文深入研究了LLMs如何感知表格结构,以及如何确保它们在面对结构变化时的鲁棒性。文中提出了一种针对数据表的规范化方法,以增强表格数据应对结构变化(如转置、乱序等)的鲁棒性。同时,文中还对文本推理方式常见的出错类型进行了分析,指出文本推理方式最大的挑战在于正确地解释表格。

论文原文或解读文章。

1.2、符号推理的方式

相较于文本推理,基于符号推理的研究以及尝试会更加丰富多样。可以分成单轮推理和多轮推理两大类。单轮推理是利用LLMs生成代码时,期望只生成一份代码就能够完整回答用户的问题,而多轮推理则是采用类似CoT的思想,寄希望于LLMs强大的逻辑推理能力,让LLMs每次只完成一个小的功能,从而一步步地完成问题。

1.2.1、单轮推理

单轮推理的主要实现方式是使用ReAct的思想指导LLMs生成一段代码并运行来得到答案。此外,PandasAI是一个开源的表格数据问答框架,它支持使用类似dataframe的语法进行数据问答。OpenAgents中的data agent提供了搜索、处理、操作、可视化等方面的数据能力。

1.2.1.1、简单Prompt

这篇论文就提出了使用ReAct的思想指导LLM生成一段python代码并运行,最后得到答案的方式。详细的Prompt如下。

同时分析出符号推理最大的挑战是在于生成错误的代码,导致代码本身无法运行或者得到错误的结果。

1.2.1.2、PandasAI

PandasAI主要的实现方式是单轮的符号推理,使用固定的模版代码框架,同时支持自定义工具函数,让LLM生成数据处理的代码并执行得到运算结果。同时支持多种不同的输出类型(包括纯文本输出、DataFrame输出、图表等)。此外,针对生成的代码可能会报错的问题,PandasAI设计了修改代码的流程,一旦发生语法错误,会将python解释器的报错也一起加入prompt,进行retry,默认的retry次数是三次。

1.2.1.3、OpenAgents

OpenAgents中的data agent使用ReAct的思想,根据现有的数据和问题,选择合适的工具(Python或者SQL)以及代码生成的Prompt模板(如可视化就使用Echarts的代码生成模版,数据处理就用普通的代码生成模板)进行代码生成和结果回答。同时也会根据Observation的结果判定当前是否能够正确回答用户问题,如果能够正确回答就返回结果,不能则重复以上流程。

1.2.2、多轮推理

多轮推理采用的是类似CoT的思想,让LLMs每次只完成一个小的功能,从而一步步地完成问题。TaskWeaver是微软开源的代理框架,用于无缝规划和执行数据分析任务。Chain-of-Table提出针对一个表格问答问题,可以在每步动态地根据当前表格内容、已选择的操作历史、用户的问题,动态地确定下一步应该采用什么样的操作,从而一步步地递进对表格进行处理,得到最终的答案。

1.2.2.1、全局规划

TaskWeaver这种创新框架通过代码片段解释用户请求,并以函数的形式有效协调各种插件,以有状态的方式执行数据分析任务。

该框架会事先利用LLM进行任务和计划拆分,然后针对每个sub-task去生成不同的代码去执行得到中间结果,最终得到答案。

1.2.2.2、动态生成计划

  • Chain-of-Table

整体来看,随着需要的推理步数的增加,意味着问题复杂度的增加,各种方法的效果都会有所下降。Chain-of-Table似乎比其他的常规方法更加稳健,即便是在操作步数适当增加的情况下,其性能下降也比较小。这意味着Chain-of-Table可能更加有利于处理实际世界中复杂多变的表格推理问题,因为它可以在问题难度升高时,保持较为稳定的性能表现。

论文原文或详细解读。

  • ReAcTable

和Chain-of-Table类似,ReAcTable框架是以迭代的方式逐步对表数据进行变换,每一步输入当前表数据及用户查询,采用ReAct的思想,让LLM有个观察-思考-行动的过程,判断选择使用SQL工具、Python工具进行数据转换或者是直接给出回答。

论文原文或详细解读

1.3、融合方法

单次LLM的输出结果往往不一定可靠,为了提高表格数据问答的准确性,很多方法都会设计一定的技巧对多次输出的结果进行融合(其实就是机器学习中的Bagging思想)。采用一定的融合方式能够提升LLM在数据问答任务上的精度,但同时也大幅度增加了模型调用的成本,在做实际应用时要根据具体场景做取舍。

1.3.1、投票

ReAcTable方法中提出了三种投票方式,并进行了一系列比较。得出的结论是简单的多数投票法就能取得不错的融合效果,其他更复杂的投票方式(如Tree-exploration voting、Execution-based voting方式)也能达到和多数投票类似的效果。

1.3.2、借助大模型进行整合

这篇论文为了有效结合文本推理和符号推理两种方法的优势,研究者们提出了两种融合策略,并对它们进行了比较。

  • 自我评估(Self-Evaluation),它利用LLM来对文本推理和符号推理的结果进行选择,从中确定一个最终答案。这种方法依赖于LLM的判断能力,以决定哪种推理方式更可靠。
  • 混合自我一致性(Mix Self-Consistency),它结合了自我一致性和自我评估的思路。具体来说,文本推理和符号推理各独立产生五个可能的结果,然后将这十个结果进行投票,以决定最终的答案。这种方法不仅利用了LLM的判断力,还通过多数投票来增加结果的稳定性。

实验结果表明,混合自我一致性方法在提高答案准确性方面表现更佳,因此,这种方法已经被纳入llamaindex中,以供实际应用中使用。

2、挑战与研究方向

应用于实际场景的一些挑战包括如何应对复杂的问题、如何进行多表的联合分析、准确率不够、运行效率/成本等如何权衡。下一步的研究方向包括借鉴RAG等技术增强对领域知识的理解能力,提高问答效果,以及分析的可靠性保证等。

参考资料

  1. GPT4Table: Can Large Language Models Understand Structured Table Data?
  2. https://github.com/gventuri/pandas-ai
  3. https://github.com/xlang-ai/OpenAgents
  4. Rethinking Tabular Data Understanding with Large Language Models
  5. Chain-of-Table: Evolving Tables in the Reasoning Chain for Table Understanding
  6. ReAcTable: Enhancing ReAct for Table Question Answering
  7. TaskWeaver: A Code-First Agent Framework代码

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

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

相关文章

外包干了5天,技术明显退步。。。。。

先说一下自己的情况,本科生,19年通过校招进入南京某软件公司,干了接近2年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

深入理解TCP的四次分手过程

文章目录 深入理解TCP的四次分手过程四次分手的意义四次分手的工作原理四次分手的重要性实际应用中的考虑结论补充:TIME_WAIT在哪一步?TIME_WAIT状态的目的TIME_WAIT状态的影响 深入理解TCP的四次分手过程 在网络通信中,TCP(传输控制协议)确…

GoLang:云原生时代致力于构建高性能服务器的后端语言

Go语言的介绍 概念 Golang(也被称为Go)是一种编程语言,由Google于2007年开始设计和开发,并于2009年首次公开发布。Golang是一种静态类型、编译型的语言,旨在提供高效和可靠的软件开发体验。它具有简洁的语法、高效的编…

电商场景下 ES 搜索引擎的稳定性治理实践

继上文在完成了第一阶段 ES 搜索引擎的搭建后,已经能够实现对千万级别的商品索引的读写请求的支持。目前,单机房读流量在 500~1000 QPS 之间,写流量在 500 QPS 左右。 但随着业务的发展,问题也逐渐开始暴露&#xff0…

2.MongoDB与关系数据库对比

MongoDB的简单操作与比较 与关系数据库对比 MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库。它们各有各的优点,来看看他们之…

AttributeError: cannot assign module before Module.__init__() call

原因 调用了自定义的类,但是在自定义的类的__init__函数下面没有写super( XXX, self ).init() 错误案例 import torch import torch.nn as nnclass SelfAttention(nn.Module):""" Self-Attention """def __init__(self, n_head, d…

海外媒体宣发套餐推广:如何选择最佳方案-华媒舍

在信息时代,传播和宣传已经成为各个行业发展的关键部分。尤其对于拓展国际市场的企业来说,海外媒体宣发更是至关重要。由于各种原因,很多企业在选择海外媒体宣发套餐时感到困惑。本文将为您介绍如何选择最佳的海外媒体宣发方案。 1.了解目标市…

mysql数据库备份学习笔记

数据库备份 方法1 物理备份:xtrabackup 方法2 逻辑备份 mysqldump 参考备份与恢复的方法: 【MySql】Mysql之备份与恢复_mysql数据库备份与还原-CSDN博客 可以借鉴的物理备份: 思路是 先做一次全量备份,然后每天做一次增量备份…

pta—剪切粘贴

使用计算机进行文本编辑时常见的功能是剪切功能(快捷键:Ctrl X)。请实现一个简单的具有剪切和粘贴功能的文本编辑工具。 工具需要完成一系列剪切后粘贴的操作,每次操作分为两步: 剪切:给定需操作的起始位置…

1.2 课程架构介绍:STM32H5 芯片生命周期管理与安全调试

1.2 课程架构介绍:STM32H5 芯片生命周期管理与安全调试 下面开始学习课程的第二节,简单介绍下STM32H5芯片的生命周期和安全调试,具体课程大家可以观看STM32官方录制的课程,链接:1.2. 课程架构介绍:STM32H5…

【爬虫开发】爬虫从0到1全知识md笔记第1篇:爬虫概述【附代码文档】

爬虫开发从0到1全知识教程完整教程(附代码资料)主要内容讲述:爬虫概述。selenium的其它使用方法。Selenium课程概要。常见的反爬手段和解决思路。验证码处理。chrome浏览器使用方法介绍。JS的解析。Mongodb的介绍和安装,小结。mongodb的简单使…

一、C#冒泡排序算法

一、C#冒泡排序算法 简介 冒泡排序算法是一种基础的排序算法,它的实现原理比较简单。核心思想是通过相邻元素的比较和交换来将最大(或最小)的元素逐步"冒泡"到数列的末尾。 实现原理 冒泡排序是一种简单的排序算法,其…

《系统架构设计师教程(第2版)》第6章-数据库设计基础知识-04-应用程序与数据库的交互

文章目录 1. 库函数级别访问接口2. 嵌入SQL访问接口2.1 概述2.2 数据库厂商 3. 通用数据接口标准3.1 开放数据库连接 (ODBC)3.2 一些数据库接口1)数据库访问对象 (DAO)2)远程数据库对象 (RDO)3)ActiveX数据对象 (ADO)4)Java数据库…

python爬虫实战——小红书

目录 1、博主页面分析 2、在控制台预先获取所有作品页的URL 3、在 Python 中读入该文件并做准备工作 4、处理图文类型作品 5、处理视频类型作品 6、异常访问而被中断的现象 7、完整参考代码 任务:在 win 环境下,利用 Python、webdriver、JavaS…

在Django中使用PyJWT实现登录及验证功能

目录 1、安装PyJWT 2、对信息加密及解密 3、配置登录视图和及url 4、登录装饰器 5、在验证有登录权限的的视图中登录 PyJWT的使用 1、安装PyJWT pip isntall pyjwt 2、对信息加密及解密 import jwt import datetime from jwt import exceptions# 加密盐 JWT_SALT &qu…

Spring Boot中Excel数据导入导出的高效实现

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

《Ubuntu20.04环境下的ROS进阶学习4》

一、发布地图消息 在上一小节中我们已经获取到了激光雷达的数据,在本接中我们将学习地图数据格式和如何发布地图数据。 二、了解地图数据格式 首先登录 index.ros.org 网站搜索一下map_server消息包。您也可以直接搜这个网址 map_server - ROS Wiki ,下翻…

QT 如何防止 QTextEdit 自动滚动到最下方

在往QTextEdit里面append字符串时,如果超出其高度,默认会自动滚动到QTextEdit最下方。但是有些场景可能想从文本最开始的地方展示,那么就需要禁止自动滚动。 我们可以在append之后,添加如下代码: //设置编辑框的光标位…

水库大坝安全监测中需要注意的事项

随着经济和社会的发展,水资源的需求也在不断增加。因此,建设水库已成为保障水资源的主要方式之一。然而,随着水库规模的增大和工程的复杂性的增加,水库大坝的安全问题也日益引起重视。为此,需要对水库大坝进行安全监测…

链路聚合实验(华为)

思科设备参考:链路聚合实验(思科) 一,技术简介 网络设备的链路聚合技术(Link Aggregation)是一种将多个物理链路捆绑在一起,形成一个逻辑链路的技术。这样做可以增加带宽、提高可靠性和实现负…