You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TAPEX大模型执行表格问答时无法正确计算差值、平均值问题咨询

TAPEX表格问答算术类查询返回错误的原因及解决方法

核心原因

你遇到的差值、平均值类算术问题返回错误结果,和字段类型、提问表述格式无关,是所选模型微调数据集的能力边界导致的:

  • 你当前调用的microsoft/tapex-base-finetuned-wtq是在WikiTableQuestions(WTQ)数据集上微调的版本,该数据集的标注答案以表格原生存在的单元格值为主,几乎没有覆盖跨单元格数值计算类的样本,模型没有学到算术推理的能力。哪怕你将表格字段转换为数值类型,模型推理阶段依然是将数值作为文本token生成结果,不会执行真正的数值运算,返回的错误值属于模型生成的幻觉文本,不是计算得出的结果。
  • 你查到的TAPEX支持AVE等算术运算符,是模型在预训练阶段通过合成的SQL执行数据学到的能力,该能力仅在对应下游任务微调的权重上才会激活,WTQ微调版本没有保留这部分能力。

问题复现代码

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import pandas as pd

tokenizer = AutoTokenizer.from_pretrained("microsoft/tapex-base-finetuned-wtq")
model = AutoModelForSeq2SeqLM.from_pretrained("microsoft/tapex-base-finetuned-wtq")

# 测试表格数据
data = {"Actors": ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"], "Number of movies": ["87", "53", "69"]}
table = pd.DataFrame.from_dict(data)

# 测试问题列表
questions = [
    "how many movies does Leonardo Di Caprio have?",
    "how many more movies does Leonardo Di Caprio have than George Clooney?",
    "what's the first name of the actor who has 87 movies?"
]

运行上述代码后,查询原生单元格值的问题(莱昂纳多的电影数、87部电影对应的演员名)可以返回正确结果,涉及算术计算的问题会返回错误值,和你测试中调整提问格式、转换字段类型后依然出错的表现一致。

解决方案

可根据实际业务场景二选一:

  • 更换适配算术任务的模型权重:直接替换为在WikiSQL等带算术标注数据集上微调的TAPEX版本,这类权重激活了预训练阶段学到的计数、求差、求和、求平均等算术能力,可以直接返回正确的计算结果。
  • 增加代码计算兜底逻辑:如果需要继续使用WTQ微调版本,不要让模型直接输出计算结果,拆分推理流程:
    1. 第一步让TAPEX从表格中抽取问题涉及的所有原生数值(比如差值问题分别抽取两个演员的电影数量)
    2. 第二步用Python原生逻辑执行数值计算,得到最终准确结果,该方案可以100%避免算术类幻觉。

内容的提问来源于stack exchange,提问作者Ayazhan Kadessova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 12:27:17