一个上标让计算结果相差4倍:AI计算书审查中的公式识别与数值校核实践

举报
yd_229372842 发表于 2026/10/31 10:30:38 2026/10/31
【摘要】 在AI文档审查中,数学公式的上标、下标及特殊符号容易在解析过程中丢失,导致计算错误。本文以44²被识别为442为例,介绍公式结构识别、参数提取、Python Decimal确定性重算、单位校验及人工复核机制,探索大模型与传统计算引擎结合的工程化方案。

一个上标让计算结果相差4倍:AI计算书审查中的公式识别与数值校核实践

一、问题背景:AI 为什么会把 44² 识别成 442?

随着大语言模型在工程设计、施工方案审查和技术文档分析中的应用不断深入,AI 已经能够辅助识别部分计算问题。

但在实际应用中,数学公式的解析仍然存在较大挑战。

例如,一份 PDF 计算书包含以下表达式:

0.330 × 44² × 1770 / 1000

正确的数学含义是:

0.330 × (44 × 44) × 1770 / 1000

但如果 PDF 文本解析过程中丢失了上标格式,就可能变成:

0.330 × 442 × 1770 / 1000

虽然只丢失了一个上标信息,但计算结果可能发生显著变化。

解析方式 计算结果
正确识别 44² 1130.8176
错误识别为 442 258.1722

两种结果相差约 4.38 倍。

需要说明,上述表达式仅作为数学解析示例,不代表某项工程公式及其单位、系数已经得到规范验证。

这个案例反映出一个重要问题:AI 计算审查的准确性,不仅取决于模型推理能力,还取决于输入数据是否正确。

二、数学公式识别有哪些常见问题?

在 PDF、Word 和扫描文档中,公式可能具有复杂的排版形式。

常见错误包括:

1. 上标和下标丢失

例如:

  • x² 被解析成 x2。
  • 10⁻³ 被解析成 10-3。
  • F₁ 被解析成 F1。

这些变化可能直接改变数学表达式的含义。

2. 运算符识别错误

例如:

  • × 被识别为字母 x。
  • ÷ 被识别为普通斜杠。
  • ≥ 被识别为 > 或 >。
  • √ 被漏识别。

3. 分式结构丢失

例如,原公式为:

    a + b
F = ─────
      c

但文本解析可能得到:

F = a + b / c

由于运算优先级不同,最终结果可能发生变化。

4. 公式与参数无法正确关联

一份计算书可能包含多组计算工况。

如果 AI 将工况 A 的荷载参数错误地用于工况 B,即使公式运算完全正确,结论仍然可能存在问题。

因此,公式审查不能停留在简单的数值提取。

三、推荐架构:大模型与确定性计算引擎结合

对于工程计算类审查,建议采用以下流程:

文档解析 → 公式识别 → 参数结构化 → 确定性计算 → 适用性判断 → 审查意见输出

其中,大模型与传统计算程序承担不同的职责。

大模型负责语义理解

例如:

  • 识别计算对象。
  • 理解公式中的参数含义。
  • 判断公式对应的计算工况。
  • 提取计算依据。
  • 解释可能存在的计算问题。

确定性计算程序负责数值运算

例如:

  • 加减乘除。
  • 乘方和开方。
  • 数值精度控制。
  • 中间结果复核。
  • 已知公式的计算结果验证。

这样的分工能够降低完全依赖大模型进行复杂数值计算的风险。

但需要注意:确定性计算只能保证在输入和计算规则正确的前提下,按照指定算法执行运算。

如果公式本身识别错误,程序仍然可能得到错误的结果。

四、使用 Python Decimal 进行数值校验

Python 提供了 decimal 模块,可以进行十进制数值运算。

与普通浮点数相比,Decimal 能够精确表示许多常见的有限十进制输入,并支持精度和舍入方式控制。

下面使用 Python 验证前面的表达式。

from decimal import Decimal, getcontext

# 设置计算精度
getcontext().prec = 28

# 读取结构化参数
coefficient = Decimal("0.330")
diameter = Decimal("44")
strength = Decimal("1770")
divisor = Decimal("1000")

# 正确公式:包含平方
correct_result = (
    coefficient
    * diameter ** 2
    * strength
    / divisor
)

# 错误解析:44² 被转换为 442
wrong_result = (
    coefficient
    * Decimal("442")
    * strength
    / divisor
)

print("正确结果:", correct_result)
print("错误结果:", wrong_result)
print("结果比值:", correct_result / wrong_result)

程序输出:

正确结果:1130.8176
错误结果:258.1722
结果比值:4.380090497...

这样可以发现数学表达式中上标识别错误带来的显著影响。

实际项目中,不建议直接使用 Python 的 eval() 执行模型生成的公式字符串。

更安全的方式是采用受限的公式解析器,或者将已经确认的公式转换成结构化参数和预定义运算。

五、如何进一步识别公式中的上标?

对于包含可提取文本的 PDF,可以尝试使用 PyMuPDF 读取文字及其排版属性。

例如:

import pymupdf

doc = pymupdf.open("example.pdf")

for page in doc:
    data = page.get_text("dict")

    for block in data["blocks"]:
        for line in block.get("lines", []):
            for span in line["spans"]:
                text = span["text"]
                flags = span["flags"]

                is_superscript = bool(
                    flags & pymupdf.TEXT_FONT_SUPERSCRIPT
                )

                if is_superscript:
                    print("检测到可能的上标:", text)

PyMuPDF 支持提取文本片段、字体属性及位置信息,并提供上标识别标记。

但是,上标标记属于推断结果,并不保证所有 PDF 都能正确识别。

特别是扫描件、字体嵌入异常或者复杂公式排版的文档,还需要结合页面图像进行核验。

一种可行的优化方式是:

  1. 优先读取 PDF 原始文本及排版信息。
  2. 对存在疑义的公式区域进行图像识别。
  3. 比较两种解析结果。
  4. 对公式结构不一致的位置进行复核。
  5. 确认公式结构后,再执行数值计算。

这样可以避免单纯依赖文本解析导致的公式结构丢失。

六、数值正确,不代表工程计算一定正确

这是 AI 计算审查中非常容易忽略的问题。

例如,某项计算:

  • 公式运算正确。
  • 输入参数正确。
  • 计算结果也正确。

但如果选择的参数不适用于当前工况,仍然可能导致错误的工程结论。

因此,建议把计算审查划分为三个层次。

审查层次 核心问题
公式识别 是否正确还原原始公式
数值校核 计算结果是否准确
工程适用性 参数、单位、工况与判断依据是否合理

其中,前两类问题可以在一定程度上通过程序自动化处理。

第三类问题往往需要结合专业知识、适用规范和工程实际条件进行判断。

此外,还应考虑单位换算、数值取整、保守取值和安全裕度等情况。

例如,计算结果与原文存在差异,并不必然意味着方案不合格。

有时设计人员采用了更保守的参数,反而提高了安全裕度。

因此,不能简单采用“计算结果不同就判定错误”的规则。

七、如何建立更可靠的自动审查流程?

从工程应用角度,建议建立以下机制。

1. 识别不确定性管理

如果系统无法确认某个符号究竟是上标还是普通数字,应将其标记为待核验。

不能在公式结构尚未确认时,直接生成确定性的计算错误结论。

2. 参数来源追溯

每个关键参数应当尽量关联:

  • 原文摘录。
  • 文件及页面位置。
  • 参数名称。
  • 数值和单位。
  • 对应计算工况。

这样可以帮助用户核查计算输入是否正确。

3. 数值结果与专业判断分离

建议输出两类信息:

数值校核结果:

记录提取的公式、输入参数、程序计算结果以及与原文结果的差异。

专业审查结论:

结合工程适用条件、引用依据及安全裕度,判断是否构成实际问题。

这样可以减少将普通计算差异直接升级为专业审查问题的情况。

4. 人工复核与反馈

对于公式无法准确识别、依据不明确或工程工况复杂的情况,应保留人工复核入口。

人工确认后的结果可以用于建立测试样本集,持续优化公式识别和计算校验能力。

八、如何评价 AI 计算审查效果?

建议使用以下指标:

评测指标 评价目的
公式结构识别准确率 公式是否被正确还原
参数提取准确率 数值、单位和参数含义是否正确
数值校核准确率 程
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。