1. 项目概述:当大模型遇上几何题
最近在折腾本地部署的大语言模型时,我突发奇想,想看看这些动辄千亿参数的“智能大脑”,在面对我们中学时代最熟悉的几何证明题时,到底表现如何。这可不是简单的“看图说话”,几何推理要求模型理解图形中的空间关系、逻辑链条,并能进行符号化的演绎。我手头正好有几个不同规模的模型,从70亿到700亿参数的都有,于是决定设计一套测试,核心就围绕两个问题:**模型对几何问题的“表示形式”有多敏感?**以及,当直接求解失败时,引导它进行“表示形式转换”能否成为破局的关键策略?
这个测试的动机很实际。大语言模型在处理文本、代码甚至多轮对话上已经让人惊艳,但其在严格逻辑和空间推理上的能力,尤其是对同一问题的不同表述(文本描述、图形描述、符号公式)的鲁棒性,一直是个黑箱。评估这一点,不仅能让我们更清醒地认识当前模型的边界,也能为如何更好地利用模型解决复杂问题(比如教育辅助、设计验证)提供方法论上的启发。简单说,我想知道:给模型一道几何题,是直接甩一张图给它看成功率更高,还是用文字把图形关系描述清楚更靠谱?当它卡壳时,我们该怎么帮它?
2. 评估框架设计与核心思路拆解
2.1 评估目标与问题定义
我的评估目标非常明确,不是做一个笼统的“模型智商测试”,而是聚焦于两个可量化、可操作的核心维度:
表示形式敏感性:探究同一种几何问题,当以不同形式呈现给大语言模型时,其解答性能的差异。这里主要对比三种主流形式:
- 纯文本描述:用自然语言详细描述图形构成、已知条件和求证目标。例如:“在三角形ABC中,AB=AC,D是BC延长线上一点,连接AD。求证:∠BAD = ∠CAD。”
- 文本+几何标记语言:在文本描述基础上,加入如GeoGebra脚本或简单的几何关系符号(如
△ABC,⊥表示垂直)。这考验模型对半形式化语言的理解。 - 文本+图像:提供问题的文字描述,并附上一张清晰的几何图形(在测试中,我通过代码生成标准矢量图,并以Base64编码或文件路径形式提供给支持视觉的模型)。这是最接近人类解题场景的方式。
转换求解策略的有效性:当模型在某种表示形式下解答失败或陷入循环时,主动干预,引导它将问题转换为另一种形式再尝试求解。例如,当模型无法理解纯文本描述的复杂图形时,提示它“请根据上述描述,先用几何语言(如点、线、角的关系)重新表述这个问题”,或者当它面对图像但推理混乱时,让它“用文字逐步描述你从图中观察到的所有等量关系和位置关系”。
2.2 模型选择与测试集构建
为了结论更有说服力,我选取了不同架构和规模的模型进行横向对比:
- 闭源/API模型:测试了GPT-4系列(包括纯文本版和视觉版)。它们代表了当前商业模型的最高水平。
- 开源大模型:重点测试了
Llama 3系列(8B, 70B)、Qwen 2.5系列(7B, 72B)以及DeepSeek的最新版本。这些模型可以本地部署,方便进行大量、可控的测试。 - 专用推理模型:尝试了如
WizardMath等针对数学能力微调过的模型,作为对照。
测试集的构建是关键,不能直接用现成的奥数题,那样难度曲线不均衡。我自制并筛选了约50道几何题,涵盖初中到高中难度,并确保每道题都可以无损地在上述三种表示形式间转换。题目类型包括:
- 基础证明题:如等腰三角形性质、平行线判定。
- 长度/角度计算题:涉及勾股定理、相似三角形、三角函数。
- 存在性与构造题:难度较高,如“证明某点在某线上”或“满足某个条件的图形是否存在”。
2.3 评估指标:超越简单的对错
传统的机器学习模型评估指标如准确率(Accuracy)在这里过于粗糙。我采用了一套更细致的评估体系:
- 最终答案正确率:答案是否完全正确(计算值精确或证明逻辑无漏洞)。
- 推理步骤得分:将解题过程分解为多个关键推理步骤(如“识别出三角形全等”、“应用圆周角定理”),即使最终答案错误,步骤正确也能获得部分分数。这能反映模型“思路”的正确性。
- 逻辑连贯性评分:评估模型生成的推理文本是否自洽,有无循环论证、偷换概念或凭空引入未声明条件等硬伤。
- 形式转换成功率:在转换求解策略中,评估模型能否成功执行转换指令,并生成一个语义等价的新问题表述。
注意:评估过程完全自动化是不现实的,尤其是对证明题的逻辑判断。我的做法是,先让模型输出,然后由我(作为有经验的评估者)根据上述指标进行打分。同时,我会编写一些规则脚本,对计算题的数值答案进行自动比对,以提高效率。
3. 核心发现:表示形式如何深刻影响模型表现
经过数百轮的测试和结果分析,一些模式逐渐清晰起来。模型的表现并非简单地随参数增大而线性变好,表示形式的选择常常是决定成败的第一步。
3.1 不同表示形式的性能对比
我将主要发现总结为下表:
| 表示形式 | 适合的模型类型 | 优势 | 劣势 | 典型表现(以70B参数级开源模型为例) |
|---|---|---|---|---|
| 纯文本描述 | 所有纯文本模型 | 1. 模型训练数据中最常见的形式,适应性强。 2. 便于模型进行链式思考(CoT),生成详细的推理过程。 3. 不受图形解析能力限制。 | 1. 对复杂空间关系的描述可能冗长且易产生歧义。 2. 模型需要极强的“脑补”图形能力,容易遗漏隐含条件。 | 对于简单问题(如等腰三角形性质)正确率可达85%以上。一旦图形涉及超过5个关键点、多条交叉线,正确率骤降至40%以下,且常出现“幻觉”出不存在线段或角的情况。 |
| 文本+几何标记 | 代码能力强的模型(如CodeLlama系列、Qwen) | 1. 半形式化,减少了自然语言的歧义。 2. 模型有时会尝试将几何关系“翻译”成代码逻辑,推理更结构化。 | 1. 模型必须理解特定的几何符号或脚本语法。 2. 如果标记不标准或模型不熟悉,效果可能比纯文本还差。 | 在描述中明确使用如“∠ABC = 90°”、“AD ⊥ BC”时,模型对条件的提取明显更准确。但对于复杂的比例关系(如(AB/BC) = (DE/EF)),处理起来并不稳定。 |
| 文本+图像 | 多模态大模型(如GPT-4V,Qwen-VL) | 1.信息传递最直接,人类解题的天然方式。 2. 能直观呈现点、线、面的相对位置,模型无需从文本重建图形。 | 1. 极度依赖模型的视觉编码和理解能力。 2. 模型可能过度关注视觉细节而忽略文本中的关键约束条件。 3. 目前优秀的开源多模态模型较少,且计算开销大。 | 表现两极分化。对于图形清晰、元素不多的题目,多模态模型表现惊艳,正确率常超过纯文本模型。但对于需要深度推理或图形中有大量辅助线、重叠部分时,模型容易“看晕”,出现低级的方向性或相对位置判断错误。 |
一个关键发现是:对于纯文本模型,提供一张图的“文本描述”版本,其表现往往优于让多模态模型直接读图。这是因为前者强制要求人类(或脚本)在描述过程中已经完成了信息筛选和结构化,而多模态模型需要自己完成从像素到几何关系的提取,这一步目前仍是瓶颈。
3.2 模型规模与推理能力的非线性关系
一个有趣的观察是,模型参数量的增长对几何推理能力的提升存在“阈值效应”。
- 7B-13B参数模型:基本只能处理记忆性的几何定理复述,无法进行连贯的、多步的推理。它们容易在第二步或第三步迷失方向,或者开始胡言乱语。
- 70B参数模型:这是一个关键的拐点。模型开始展现出初步的、可追踪的推理能力。它能够按照“因为...,所以...”的格式组织语言,尝试应用定理,但非常脆弱。一旦推理链超过4-5步,或者需要引入辅助线(这本质上是创造性的一步),失败率就很高。
- GPT-4级别(推测万亿参数):表现有质的飞跃。它不仅正确率高,更重要的是展现了策略性。例如,它会主动说“要证明这两条线段相等,我可以尝试证明它们所在的两个三角形全等”,然后去搜索满足全等条件的信息。它具备了初步的“解题思路规划”能力。
实操心得:不要盲目追求大参数。对于许多具体的几何问题,一个在高质量数学数据上精调过的70B模型,其表现可能接近甚至在某些环节超过未针对数学优化的更大规模通用模型。数据质量和领域微调的重要性,在几何推理这个专项上体现得淋漓尽致。
4. 转换求解策略:从“死胡同”里找“活路”
当模型在初始表示形式下“卡住”时,我的干预策略——转换求解——开始显现其威力。这本质上是在模拟人类解题时切换思路的过程。
4.1 策略一:从文本到图形(或图形描述)
场景:模型面对一段复杂的纯文本几何描述,推理混乱,反复提及不存在的图形部分。干预指令:“请根据上面的文字描述,画出一个简单的几何草图,并用文字描述你画的图形中各点、线、角之间的关系。”作用机制:这个指令强迫模型将抽象的文本具象化,在内部(或通过代码工具)构建一个心理(或符号)模型。许多模型在执行此指令后,输出的“文字描述图”会比原问题文本更结构化、更简洁,因为它完成了一次信息过滤和重组。随后,基于这个重组后的问题进行求解,成功率显著提升。示例:原题描述“四边形ABCD内接于圆O,对角线AC与BD交于点E,F是AB延长线上一点...”。模型可能搞不清点的位置关系。经过“画图并描述”后,它可能会输出:“我画了一个圆,圆上顺时针有A、B、C、D四点,AC和BD是两条在圆内相交的对角线,交点为E。AB线段向B点外方向延长,上面取一点F。” 这个新描述虽然长,但顺序清晰,模型自己理清了思路。
4.2 策略二:从图形到文本(关系枚举)
场景:多模态模型看着图,给出了一个直觉性的、但缺乏严格步骤的答案,或者明显误解了图形。干预指令:“忽略之前的推理。请仅基于给定的图片,以清单形式列出所有你能直接观察或推断出的几何事实(例如,线段相等、角相等、平行、垂直、共圆等)。”作用机制:这相当于让模型进行“感知增强”,将视觉信息转化为离散的、符号化的命题。这个清单构成了后续推理的“已知条件数据库”。模型接下来只需要基于这个清单进行逻辑演绎,避免了视觉信息持续干扰推理过程。示例:面对一个复杂的相似三角形图形,模型可能直接猜答案。但让它列出事实后,它可能会输出:“1. ∠BAC = ∠EDF; 2. ∠ABC = ∠DEF; 3. 因此△ABC ∽ △DEF (AA相似);4. 所以 AB/DE = BC/EF = AC/DF。” 这样,推理的起点就变得坚实了。
4.3 策略三:问题分解与子目标设定
场景:模型面对一个需要多步转化、目标遥远的证明题,不知从何下手。干预指令:“要证明最终结论A,我们可以先尝试证明一个中间的结论B。你认为结论B可能是什么?并给出证明B的思路。”作用机制:这是任务分解的直接应用。将一道难题分解为若干个子问题,降低了每个步骤的认知负荷。大语言模型在规划长链条任务时比较弱,但解决定义清晰的子任务能力较强。通过人工或模型自己设定子目标,可以引导推理走向正轨。示例:要证明“点P是线段AB的黄金分割点”。直接证明很难。可以引导模型:“第一步,先证明△APC ∽ △ABC。你能先完成这一步吗?” 模型集中精力攻克这个子问题后,再引导它利用这个相似关系去推导比例,最终达成目标。
注意事项:转换策略不是银弹。它成功的前提是,模型在另一种表示形式或更小任务上的能力是存在的。如果模型根本看不懂图,或者连简单的三角形全等判定都掌握不了,那么再怎么转换也是徒劳。因此,转换策略更像是一个“放大器”,它放大了模型已有的、但未被有效调用的能力。
5. 实操过程:构建自动化评估流水线
为了系统性地进行上述评估,我搭建了一个半自动化的测试流水线。这不仅是一次性的实验,也方便未来持续追踪模型进展。
5.1 工具链与环境搭建
核心工具如下:
- 模型服务:使用
vLLM或Ollama本地部署开源LLM。对于API模型,编写统一的调用客户端。多模态模型则使用其提供的SDK或API。 - 题目管理与表示形式生成:我用Python字典结构存储每道题的“核心语义”,然后编写渲染函数,分别生成纯文本、带标记文本和图形(使用
matplotlib或drawsvg生成标准SVG图)。 - 提示工程模板:为每种表示形式和转换策略设计系统提示词(System Prompt)和用户提示词模板。确保每次测试的指令格式一致,减少变量。例如,系统提示词会固定为:“你是一个几何专家,请严谨地解答以下几何问题。分步骤推理,并给出最终答案。”
- 结果解析与评分:对于计算题,用正则表达式或符号计算库(如
sympy)提取模型输出中的数值答案进行比对。对于证明题,则主要依靠人工评分,但我会编写脚本辅助,比如检查推理中是否出现了关键定理关键词,或者逻辑连接词(“因为”、“所以”、“如果...那么...”)的密度和结构,作为逻辑连贯性的初步参考指标。
5.2 一次完整的测试循环
以测试Qwen 2.5 72B模型在“纯文本描述”形式下的一道中等难度证明题为例:
- 问题准备:从题库中选取题目:“已知在△ABC中,AB=AC,∠BAC=80°。点D在边AC上,且∠DBC=20°。求∠ADB的度数。”
- 提示词组装:将纯文本描述填入用户提示词模板,连同系统提示词,发送给模型。
- 生成与记录:模型返回推理过程和答案。完整记录输入和输出。
- 初步分析:我首先看最终答案。模型输出了“∠ADB = 60°”。(这是正确答案)。
- 步骤复核:检查其推理过程:“因为AB=AC,所以△ABC是等腰三角形,∠ABC=∠ACB=(180°-80°)/2=50°。在△DBC中,已知∠DBC=20°,∠ACB=50°,所以∠BDC=180°-20°-50°=110°。因为∠BDC是△ABD的外角,所以∠BDC = ∠BAD + ∠ADB。又因为∠BAD = ∠BAC - ∠DAC = 80° - ∠DAC。我们需要知道∠DAC...(这里模型可能走弯路了)...实际上,观察△ABD和△BCD...(模型切换了思路)...利用正弦定理或角度追迹...最终计算得∠ADB=60°。”
- 评分:
- 最终答案正确:得分。
- 推理步骤:前几步(等腰三角形性质、三角形内角和)正确。中间部分思路有轻微混乱但自我纠正。整体逻辑基本连贯。
- 给予较高步骤分和连贯性分。
- 转换策略触发(模拟场景):假设模型给出了错误答案30°。我会启动转换策略。例如,提示它:“你的答案可能是错的。请先不要直接求∠ADB。尝试列出图中所有你能确定的角的大小,以及所有三角形的内角和关系,以方程组的形式呈现。”
- 二次评估:模型根据新指令,列出方程,并可能重新求解得到正确结果。记录此次转换是否成功。
5.3 关键参数与配置
在批量测试中,一些生成参数对结果影响巨大:
- 温度(Temperature):几何推理需要确定性,因此我通常设置为0.1或0.2,以降低随机性,使模型输出更集中、可复现。
- 最大生成长度:必须设置足够长(如2048 tokens),以确保模型能完成完整的推理链条。
- 重复惩罚:适当调高(如
presence_penalty=1.1),防止模型在推理中陷入重复循环。
踩坑记录:最初我使用了默认温度(0.7),结果发现同一问题多次询问,模型会给出多种不同甚至矛盾的推理路径和答案,导致评估结果波动极大,无法进行稳定分析。将温度调低后,模型的输出稳定性大大增强,评估结果才具有了可比性。
6. 典型问题、误区与排查技巧
在实际测试中,模型会反复出现一些特定类型的错误。理解这些错误模式,对于设计更好的提示词或评估模型能力边界至关重要。
6.1 模型常见错误模式速查表
| 错误类型 | 具体表现 | 可能原因 | 排查与应对技巧 |
|---|---|---|---|
| 视觉感知幻觉 | 在多模态任务中,指认图片中不存在的线段平行或相等;错误判断角度大小(将锐角说成钝角)。 | 1. 视觉编码器分辨率或能力不足。 2. 模型将视觉特征与文本描述强行关联,产生“脑补”。 | 1.提供图形描述:在提供图片的同时,附加最关键关系的文字说明(如“注意,图中AB与CD并不平行”)。 2.指令强调:在提示词中明确要求“仅根据图像中明确画出的内容进行判断”。 |
| 逻辑链条断裂 | 推理过程中跳过关键步骤,直接使用未证明的结论;或滥用定理(如在非直角三角形中使用勾股定理)。 | 1. 训练数据中存在不严谨的推理示例。 2. 模型缺乏真正的逻辑验证能力,本质上是概率生成。 | 1.分步追问:当模型做出跳跃时,立即打断并追问:“请详细说明,你是如何从步骤A得到步骤B的?” 2.定理检查:提示模型:“请确认,你在这里应用XX定理的前提条件是否全部满足?” |
| 符号与语义混淆 | 将几何符号(如“△ABC ∽ △DEF”)当作纯文本处理,不理解其代表的变换(相似)关系。 | 对形式化语言的理解能力有限,尤其是训练数据中混合了自然语言和多种专业符号时。 | 1.统一表述:在测试中,尽量使用一种清晰、一致的符号体系。 2.要求解释:提示模型:“请用自然语言解释‘△ABC ∽ △DEF’在这个问题中意味着什么?” |
| 数值计算失误 | 在简单的角度加减、比例计算上出错。例如,算出三角形内角和为190°。 | 纯语言模型在数值计算上天生较弱,尽管进行了数学训练,但计算仍是其短板。 | 1.外包计算:在提示词中鼓励模型“将计算步骤清晰写出,最后可以只给出结果”。对于复杂计算,可建议它用Python代码辅助(如果模型支持代码解释)。 2.结果合理性检查:在评估时,自动检查基础计算(如内角和是否为180°)作为第一道过滤器。 |
| 目标迷失 | 在长推理中,逐渐偏离最初要证明的目标,开始证明另一个无关或弱相关的结论。 | 注意力机制在长文本生成中可能漂移,缺乏全局目标规划能力。 | 1.阶段性重申目标:在提示词中要求“在每一步推理后,简要说明这一步如何帮助我们接近最终目标∠ADB”。 2.使用结构化输出:要求模型以“目标:...;步骤1:...(子目标:...);步骤2:...”的格式输出,强制其进行结构化管理。 |
6.2 针对“表示形式敏感性”的调试技巧
如果发现模型对某种形式表现极差,可以尝试以下调试:
- 简化输入:移除所有不必要的修饰词和复杂从句,将问题表述为“已知:A, B, C。 求证:D。”的标准格式。
- 信息增广:对于文本形式,可以主动添加一些在人类看来“显然”的隐含条件。例如,在描述三角形时,加上“三点不共线”。
- 格式对比测试:用完全相同的几何问题,准备“纯文本”、“文本+列表条件”、“文本+简单ASCII图”三种格式,快速测试模型对哪种格式响应最好。这有助于为特定模型定制输入格式。
6.3 评估中的主观性控制
几何证明的评估不可避免带有主观性。为了减少偏差,我采取了以下措施:
- 制定详细的评分细则:在测试前,为每类题型制定好步骤分解和得分点。例如,“正确识别并应用等腰三角形性质”计2分,“正确设置方程”计2分等。
- 交叉验证:对于有争议的推理过程,我会用另一个强模型(如GPT-4)去评估该推理的逻辑合理性,作为参考。
- 关注错误模式而非单题对错:不过分纠结某一道题的对错,而是统计某一类错误(如“视觉幻觉”、“逻辑跳跃”)在不同模型、不同表示形式下的出现频率。频率分布比单一数据点更有说服力。
7. 结论与未来探索方向
这一轮评估下来,我最深的体会是:当前的大语言模型在几何推理上,更像是一个拥有海量几何知识记忆、并具备一定模式匹配和链式思考能力的“高级学生”,但它还不是一个能进行创造性思维和严格逻辑验证的“数学家”。它对表示形式的敏感性,暴露了其理解本质上是基于表层模式关联,而非深层的空间和逻辑建模。
表示形式就是模型的“感官”。纯文本是“听觉”,需要它自己构建心理图像;图像是“视觉”,但它的“视力”还不那么好;几何标记语言则是给它的“辅助工具”。没有一种形式是完美的,最佳策略往往是混合形式:用文本明确核心条件和目标,用图形提供直观参考,并用清晰的逻辑提示词引导推理过程。
转换求解策略,本质上是为模型提供了“元认知”支架。当它在一个方向上碰壁时,我们引导它换一个角度审视问题,或者把大问题拆解成它能消化的小问题。这提示我们,未来构建基于LLM的自动解题系统或教育助手时,一个强大的“策略控制器”可能比一个单纯的“解题模型”更重要。这个控制器负责诊断模型的状态,决定何时以及如何进行问题重构、分解或表示形式转换。
从更实际的角度,如果你正在开发涉及几何或空间推理的应用,我的建议是:
- 不要依赖模型的“视觉”:除非使用最顶尖的多模态模型,否则优先考虑将图形信息转化为结构化的文本描述。
- 设计“分步式”的交互:不要期望模型一次给出完整答案。设计交互流程,让它先复述条件、再列出已知事实、然后提出可能的思路,最后再执行计算或证明。这更符合模型当前的能力特点。
- 善用“检查点”:在关键推理步骤后,设置自动或人工检查点,验证中间结论的正确性,及时纠正方向,避免错误累积。
这次评估只是一个开始。几何推理的边界远不止于此,未来可以探索更复杂的动态几何、立体几何,或者将代数与几何结合的综合题。同时,如何将评估过程本身自动化、标准化,也是一个值得深入的技术课题。毕竟,只有清晰地测量,才能有效地改进。