ST-Raptor:无需训练的半结构化表格问答工具
在处理日常工作和研究数据时,我们经常会遇到形式多样的表格:财务报表、学术数据、人事信息表……这些表格往往结构复杂、排版不规则,甚至包含合并单元格、多级表头等半结构化内容。传统方法或简单的人工处理往往效率低下,且容易出错。
那么,有没有一种工具,能够真正理解这些“复杂表格”,并准确回答我们提出的问题?
答案是肯定的。ST-Raptor 正是为解决这一难题而诞生的工具。它仅需一张Excel表格和一个自然语言问题,就能快速输出精准的答案,而无需任何额外的模型训练。
什么是 ST-Raptor?
ST-Raptor 是一种专门用于对具有多样化半结构化布局的表格进行问答的工具。它结合了视觉语言模型(VLM)和树构造算法(HO-Tree),并可灵活集成不同的大语言模型(LLM),通过两阶段验证机制确保结果的高可靠性。
最令人惊喜的是,ST-Raptor 不需要针对特定表格结构进行微调,即可实现高质量的问答效果。这意味着即使你面对的是从未见过的不规则表格,ST-Raptor 依然能够可靠工作。
ST-Raptor 能处理哪些表格?
ST-Raptor 的设计目标非常明确:应对现实世界中那些结构复杂、版式多样的“半结构化表格”。例如:
-
个人信息表单 -
学术研究表格 -
财务报表 -
市场营销数据 -
仓库管理记录 -
课程安排表 -
销售统计表
这些表格可能来源于Excel、网页HTML、Markdown文档或CSV文件,格式灵活多样。
下图展示了一些ST-Raptor可以处理的复杂表示例:

SSTQA 基准测试集
为了全面评估ST-Raptor的性能,研究团队专门构建了SSTQA基准测试集。该数据集包含102张表格和764个问题,这些表格是从2031个真实场景表格中精心筛选而来,涵盖19个代表性领域,包括:
-
人力资源管理 -
企业治理 -
财务管理 -
市场营销 -
仓库管理 -
学术研究 -
日程管理 -
应用表单 -
教育相关表格 -
销售管理
这一基准测试集的构建,确保了评估结果的全面性和可靠性。
性能表现:ST-Raptor 显著领先
ST-Raptor在SSTQA基准测试以及其他两个测试集上进行了全面评估,结果显著优于其他方法:
方法 | WikiTQ-ST准确率(%) | TempTabQA-ST准确率(%) | SSTQA准确率(%) | SSTQA ROUGE-L(%) |
---|---|---|---|---|
OpenSearch-SQL | 38.89 | 4.76 | 24.00 | 23.87 |
TableLLaMA | 35.01 | 32.70 | 40.39 | 26.71 |
TableLLM | 62.40 | 9.13 | 7.84 | 2.93 |
ReAcTable | 68.00 | 35.88 | 37.24 | 7.49 |
TAT-LLM | 23.32 | 61.86 | 39.78 | 19.26 |
TableLLaVA | 20.41 | 6.91 | 9.52 | 5.92 |
mPLUG-DocOwl1.5 | 39.80 | 39.80 | 29.56 | 28.43 |
GPT-4o | 60.71 | 74.83 | 62.12 | 43.86 |
DeepSeekV3 | 69.64 | 63.81 | 62.16 | 46.17 |
ST-Raptor | 71.17 | 77.59 | 72.39 | 52.19 |
从结果可以看出,ST-Raptor在所有测试集上都取得了最佳性能,特别是在SSTQA基准上,准确率达到了72.39%,显著优于其他方法。

快速开始使用 ST-Raptor
1. 克隆仓库
首先需要获取ST-Raptor的源代码:
git clone git@github.com:weAIDB/ST-Raptor.git
cd ST-Raptor
2. 环境配置与依赖安装
创建虚拟环境
# 创建虚拟环境
conda create -n straptor python=3.10
conda activate straptor
# 安装所需依赖包
pip install -r requirements.txt
安装HTML渲染插件
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb
sudo apt install -f ./wkhtmltox_0.12.6.1-2.jammy_amd64.deb
3. 准备基准测试数据
-
下载SSTQA基准测试集,并保存到./data目录 -
修改./main.py中的相关设置:
# 需要修改以下路径
input_jsonl = '你的输入JSONL文件路径'
table_dir = '你的表格目录路径'
output_jsonl = '你的输出JSONL文件路径'
log_dir = '你的日志目录路径'
问答数据使用JSONL格式存储,每条记录格式如下:
{
"id": "问题ID",
"table_id": "表格ID",
"query": "自然语言问题",
"label": "标准答案"
}
4. 模型配置
ST-Raptor支持多种模型配置。在论文中使用的配置包括:
-
Deepseek-V3 (LLM API) -
InternVL2.5 26B (VLM) -
Multilingual-E5-Large-Instruct (嵌入模型)
这一配置大约需要160GB的GPU内存。您可以根据硬件情况调整模型配置,或改用API方式。
需要在 /utils/constnts.py 中设置模型配置:
# 设置LLM API
API_URL = "你的LLM_API网址"
API_KEY = "你的LLM_API密钥"
# 如果使用本地部署的LLM,设置以下参数
LLM_PORT = 你的LLM端口
LLM_MODEL_TYPE = 你的LLM模型名称
# 设置本地部署的VLM API,默认使用vllm
VLM_PORT = 你的VLM端口
VLM_MODEL_TYPE = 你的VLM模型名称
# 设置Multilingual-E5模型路径
MULTILINGUAL_E5_MODEL_PATH = "你的模型路径"
如果需要使用其他格式的API,请修改 ./utils/api_utils.py 中的代码。
5. 部署InternVL2.5模型
我们以使用vLLM部署InternVL2.5为例:
安装vllm包
pip install vllm
指定GPU并部署VLM
CUDA_VISIBLE_DEVICES=0,1,2,3 python -m vllm.entrypoints.openai.api_server \
--model=INTERNVL路径 \
--port 8138 \
--trust-remote-code \
--max-num-batched-tokens 8192 \
--seed 42 \
--tensor-parallel-size 4
6. 开始问答!
完成以上所有设置后,使用以下命令开始执行:
python ./main.py
实际问答示例对比
为了更直观展示ST-Raptor的性能,以下是多个模型在处理实际表格问答任务时的表现对比:
问题 | 标准答案 | TableLLaMA | TableLLM | ReAcTable | TAT-LLM | TableLLaVA | mPLUG-DocOwl1.5 | DeepseekV3 | GPT-4o | ST-Raptor |
---|---|---|---|---|---|---|---|---|---|---|
2024年市级部门整体预算绩效目标表中就业服务满意度指标的指标值是多少? | ≧90% | 75.0 | 737 | ≧95% | ≧90% | 80% | ≧90% | ≧90% | ≧90% | ≧90% |
图纸规范中共有多少个项目? | 15 | 2 | 需要更改模板,您可以按照以下步骤操作… | 7 | 108 | 17 | 4 | 15 | 23 | 15 |
状态码表中有多少种状态码? | 3 | 3 | 需要更改模板,您可以按照以下步骤操作… | 7 | 5 | 33 | 3 | 3 | 4 | 3 |
2020年哪个月份支出最低? | 二月 | 差旅费 | 要查找2019年6月的总支出金额… | 6月5日 | “” | 6月5日 | 龙舟节福利 | 二月 | 一月 | 二月 |
品牌”腾远明居”在6月份有多少条销售记录? | 7 | 3 | “” | 7 | “” | 13 | 5 | 7 | 8 | 7 |
综合管理办公室2月份的业务招待费是多少? | 5106.36 | 5106.36 | “” | “” | SELECT SUM(发生金额) FROM DF WHERE 项目内容 = ‘业务招待费用’ … | 3500 | 130,168 | 5106.36 | 5106.36 | 5106.36 |
“三支一扶”计划下高校毕业生社会保险缺口和生活补助的拟投入资金是多少? | 5.8781亿元 | 587.81 | 要查找受资助人员数量… | 要查找社会保险缺口和生活补助的拟投资金额… | 587.81 | 12亿 | 1140 | 587.81 | 587.81 | 587.81 |
2024年市级部门整体预算绩效目标表中新增城镇就业人数的指标值是多少? | 50000人 | 50000 | 要查找受资助人员数量… | 问题要求新增城镇就业人数的指标值… | 50000 | 1484 | 50000 | 50000 | 50000 | 50000 |
绩效指标中有多少个一级指标? | 3 | 10 | 10 | 10 | 10 | 100 | 2 | 3 | 4 | 3 |
绩效指标中数量指标有多少个三级指标? | 4 | 2 | 需要更改模板,您可以按照以下步骤操作… | 要确定信息项对比中有多少个信息项… | 12#13#14#15#16#17#18#19#20#21#22#23#24#25#26#27#28#29#30… | 108 | 4 | 8 | 3 | 8 |
注:表格中的””表示基线方法未能生成该问题的答案
从上述示例可以看出,ST-Raptor在大多数情况下都能给出正确答案,表现稳定且可靠。
未来发展规划
ST-Raptor团队正在积极扩展工具的功能和支持范围:
外部支持扩展
-
✅ 已支持Excel表格输入 -
⌛ 即将支持HTML/CSV/JSON/Markdown等多种表格格式输入 -
⌛ 计划提供Web演示界面和API访问方式
框架功能扩展
-
⌛ 扩展表格提取模块,支持更多类型的表格结构
常见问题解答
ST-Raptor是否需要额外的训练数据?
不需要。ST-Raptor采用零样本学习方式,无需针对特定表格结构进行额外训练即可直接使用。
ST-Raptor支持哪些类型的表格?
ST-Raptor专门设计用于处理半结构化表格,包括但不限于人事表单、学术表格、财务报表、销售数据等具有复杂布局的表格。
使用ST-Raptor需要多大的计算资源?
基础配置需要约160GB的GPU内存,但您可以根据实际硬件情况调整模型配置,或选择使用API方式降低本地资源需求。
ST-Raptor如何处理中文表格?
ST-Raptor使用多语言E5大型指令模型,能够很好地处理中文表格和中文问题。
如果遇到特别复杂的表格,ST-Raptor能否有效处理?
ST-Raptor专门针对复杂半结构化表格设计,通过结合视觉语言模型和树构造算法,能够有效处理各种复杂布局的表格。
结语
ST-Raptor代表了对复杂半结构化表格进行智能问答的重要进展。它不仅能有效处理各种现实世界中的复杂表格,还不需要额外的训练成本,这使得它成为研究人员和数据分析师的强大工具。
无论您是从事学术研究、商业分析还是数据处理工作,ST-Raptor都能为您提供高效、准确的表格问答解决方案。随着工具的不断发展和完善,我们相信ST-Raptor将在更多领域发挥重要作用。