大模型为何左右不分?用缪刺奇偶轴校验给空间推理补上锚点

发布时间:2026/10/25 16:02:50
大模型为何左右不分?用缪刺奇偶轴校验给空间推理补上锚点

前阵子给一套智能装备评测做空间常识摸底,第一道题就把大模型的“左右魔咒”暴露得干干净净。题目是:“水杯在手机的左边,请改写成以手机为参照物的右边表述。”基座模型先答“手机在杯子的右边”,被追问“那如果左右手互换一下呢”,它当场改口成“杯子在手机的右边”。同一个结论,前一句还自洽,后一句就自相矛盾,而且模型完全意识不到。后来我把图片整体左右镜像,再问“图片里的水杯在哪一侧”,它对着镜像图又给出了和原图一模一样的方位回答。

大模型能写代码、能考逻辑题,为什么永远分不清“左右”?我在后面很长一段时间里,同时用评测、提示词、微调三个角度反复测这个问题,最后梳理出一套方案:把左右看成对称轴上的奇偶位,再用交叉映射做校验。这套思路听起来有点玄,但结构上恰好和一个两千年前的概念高度重合,就是中医里的“缪刺”。这篇文章就写写这套思路怎么来的、怎么落地、以及我踩过的那些坑。

1. 大模型为什么总是栽在“左右”这类问题上

1.1 模型没有手,也没有坐标系

大模型处理语言时,本质上是在预测一串条件概率:给定前几个字,输出下一个最可能的字。它没有眼球、没有肢体、没有前庭系统,更没有一个能在物理世界中指向某个方向的身体。人类说“左手”的时候,身体里有一条明确的解剖轴做参照;模型说“左手”的时候,只是把训练语料里出现过的文本概率又复述了一遍。

这就带来一个很微妙的问题:左右在人类经验里是“先有身体,再有方位”,模型则是“先有词语,再有关系”。关系没有锚点,就成了语言游戏。你可以让它背诵“心脏在左边”“右手拿筷子”,但一旦涉及具体位置、镜像画面、相对方位,它只能根据上下文猜。猜,自然会有翻车的时候。

我做过一个实验,把一句话里的“左”和“右”全部互换,重新生成上下文,让模型去判断哪句是更自然的描述。结果显示,它对“左手写字”和“右手写字”的置信度接近一致,因为语料里两种表述出现的频率本来就是趋同的。这说明模型并不是真的“分得清”,只是记住了两种表述都常见。

1.2 “左”和“右”在统计上是近义词

注意“近义词”这三个字。在语料里,“左”和“右”出现在相近语境中的概率很高。我们说“左边有人”“右边有人”,“向左转”“向右转”,“左耳朵”“右耳朵”,这些句子结构完全平行,只有方位词不同。

对模型来说,这意味着什么?它在训练中学到的“左”和“右”的向量表征,会高度相似,甚至在某些维度上几乎是等价的。嵌入空间里,它们的位置相邻,唯一的区别可能只是某几个方向维度的符号相反。如果上下文里没有强约束,模型就很容易把两者混用。

打个生活类比:有个盲人从没见过左右手,他只听说“左手是用来戴手表的”“右手是用来写字的”,于是当他听到“请你举起戴手表的那只手”,他能判断是哪只;但你说“举起左手”,他就不知道了。因为“左”这个词没有和他身体建立任何确定性连接。大模型类似,它知道左手和右手的“语言统计相关性”,但没有那个能一锤定音的“身体坐标”。

所以,大模型的左右不分,本质上不是智商问题,是关于“参照系”的缺失。它不知道从哪一条轴出发定义左和右,就只能从上下文里找线索。线索一少,立刻翻车。

1.3 镜像结果完全不守恒

空间问题有一个特殊性质:镜像不改变物理事实,但会改变方位表述。一个人举起左手,镜子里的人举起的是右手。物体在甲左边,镜像以后就在甲右边。这个“镜像反转”操作,是判断模型有没有真正理解左右的好工具。

我在一轮评测里连续构造了三个问题,问法完全一样,区别只是图片是否做水平翻转。原图里的水杯明明在手机左边,镜像以后水杯应该在手机右边。可是模型三个都回答“左边”。它没有说谎,它只是真的不认识“镜像”这两个字。

这个问题还有个更隐蔽的变体:第三人称镜像。题目是“A站在B的左边,请判断B站在A的左边还是右边”。正常人都能秒答“B站在A的右边”,但部分模型会给出“B站在A的左边”。因为它们抓住了“B”“A”“左”“右”之间的统计关联,却忽略了等价的倒置关系。这种不守恒,是后续奇偶轴校验要解决的核心问题。

2. 奇偶轴校验:给左右问题设一条可反转的哨兵线

2.1 奇偶轴到到底是什么

首先说明,奇偶轴校验不是业界标准术语,这是我的个人叫法,用来描述一套评测思路。它借鉴的是数论里“奇偶性”的核心精神:某些性质在一次变换之后,应该发生确定性的翻转。比如整数乘以 -1,正负翻转;坐标沿原点对称,正负号全变。左右也是一样,在一条对称轴上,左侧和右侧是互为镜像的两个端点。

如果把左右看成二值状态,那“左”可以记作 0,“右”可以记作 1,对称操作就是异或 1。这个操作有一个重要特性:做两次就回到原值。左边镜像一次到右边,右边再镜像一次,又回到左边。正因为有这种“自逆”属性,它才适合用来做校验:如果一个模型真的理解左右,那么经过一次镜像操作,它的回答应该也跟着取反;经过两次镜像,回答应该回到原值。

我管这种对左右问题进行镜像反转、再验证输出是否守恒的方法,叫奇偶轴校验。它检验的不是模型能否背出“左=0、右=1”,而是模型内部有没有一条能稳定反转的“左右轴向”。没有这条轴向,模型在奇偶校验面前就会漏洞百出。

2.2 三种可以落地的校验场景

我实际测试中常用三类场景,每类都包含原题和镜像题,组成配对。

第一类,关系反演。原题:“A在B的左边,B在A的哪边?”镜像题:“A在B的右边,B在A的哪边?”两者应该互为反义答案。模型如果两个都答“B在A右边”,奇偶校验就失败了。这类题测的是最基础的关系倒置换。

第二类,图片镜像。给定一张原始图片,问“红色物体在蓝色物体的哪一侧?”然后把图片水平翻转,用完全相同的问法再问一次。如果模型对翻转图仍给出和原图相同的方位,它就没有形成位置关系表征。多模态大模型在这一类里翻车最频繁。

第三类,数字坐标。直接把位置抽象成坐标轴:“点X的横坐标为 3,点Y的横坐标为 5,问X在Y的左边还是右边?”镜像版本把两个坐标调换,重新问Y在X的左边还是右边。这个场景最干净,因为不涉及视觉,纯粹看语义推理能力。

三种场景分别从语言、视觉、数值三个角度探测模型的左右表征。组合使用,基本能定位它是完全不懂,还是只会在某一种输入形态下不懂。

2.3 校验指向的真正病根

奇偶轴校验做下来,我发现最典型的结果是:模型在原题上可能答对,但镜像题上立刻失败。这很有意思,说明它的“正确”不是规律推导出来的,而是记住了训练样本。训练数据里有“A在B左边,所以B在A右边”这种句式,模型见过就能模仿;但“A在B右边,所以B在A左边”,如果没见过类似表述,它就无从下手。

从模型内部看,左右相关概念被编码成了一种“上下文的共现关系”,而不是一条可以被反复反转的几何轴。想象一下,一个人被问到“左”时,脑子里浮现的是一堆例句,而不是自己身体左侧那条线。模型也一样,它没有在内部构建一个统一的方向向量,自然也无法保证镜像操作下的结果守恒。

所以奇偶轴校验的最终结论,不是简单地给模型打个分,而是暴露一个事实:大模型缺少显式的空间对称轴锚点。这个锚点不补上,左右问题就永远无解。

3. 两千年前的“缪刺”算法,到底在做什么

3.1 缪刺的规则:左病刺右,右病刺左

先说清楚,本段只讨论知识映射思路,不构成任何医疗建议。“缪刺”出自《黄帝内经·素问·缪刺论》,是一种古代针刺疗法。它的核心规则很简洁:当身体一侧出现病痛,医生选择对侧对应位置进行刺激。左侧有异常,刺右侧;右侧有异常,刺左侧。所以也叫“左病刺右,右病刺左”。

为什么古人会想用交叉对侧的穴位?从传统理论的解释来看,人体经络有左右对称分布,相互之间通过络脉沟通。病邪侵害了一侧,气血在对应关系上会出现交错反应,因此可以通过对侧来调节。现代研究里关于这件机制的理解还在持续讨论,我不展开。关键的是它提供了一种非常清晰的空间映射范式:已知患侧坐标,通过对侧对应坐标进行干预,最终实现整体平衡。

在编程视角里,这套规则充满“函数”的气质。它不纠结于病侧本身能不能直接处理,而是直接计算对侧位置。明代之后的针灸文献里甚至能看到用坐标描述穴位对应关系的做法,可以说,它天然就是带对称轴操作的。

3.2 把缪刺翻译成现代算法语言

如果忽略医学术语,只保留映射结构,缪刺可以写成这样:

输入:患侧位置 x;根据解剖对称关系,定义交叉映射函数 f(x),使得 f(x) 表示 x 在对称轴另一侧的对应位置;输出:对 f(x) 进行操作。

核心性质是 f(f(x)) = x,也就是对合映射。左右对称轴上的镜像正是一个对合:先跨轴一次,再跨一次,就会回到原地。恰好,奇偶轴校验里的“左右翻转”也是一个对合操作。两者在数学结构上是同一件事。

我把这个映射思路写成伪代码:

输入: 位置 x 输出: 处理位置 plasma = cross_map(x) cross_map(x): 确定对称轴 axis another_x = mirror(x, axis) return another_x

这套描述里,最关键的不是“处理”那一步,而是“镜像”那一步。没有正确的对称轴,整个交叉映射就是错的。这也是大模型处理左右问题时最薄弱的部分:它没有一条显式可用的对称轴,自然无法稳定地执行交叉映射。

3.3 和神经网络内部表征的两点共鸣

第一点,权重共享。卷积神经网络处理图像时,会用到各种翻转增强,让同一组特征在不同方向上被共享和复用。本质上是假设“物体在左右翻转后类别不变,只是位置描述改变”。类似地,Transformer模型如果不用镜像数据增强,它会很难自己学会这种对称性,因为Attention结构天然不保证左右位置的对称性。

第二点,位置编码。现代Transformer通常会加位置编码来区分序列位置,但加了一定量的Rotary、ALiBi等编码后,左右语义关系不一定还是反对称的。位置编码可以保证模型知道“第3个位置”和“第5个位置”不同,但不保证“3在5左侧”等价于“5在3右侧”。对称轴在这里处于隐式状态,很难被审计。

缪刺的价值,在于它逼我们注意到一个事实:交叉映射可以作为弱模型的退路。当模型无法从自身直接判断左右时,它至少可以学习“从这一侧绕到另一侧”的确定性规则,再用另一侧的输出来校准。这在提示词工程和微调里,是可以直接用的。

4. 给大模型做一次“针灸”:缪刺思路的落地实践

4.1 提示词里的镜像回读

我先说最见效的实践:让模型在回答前做一次“镜像回读”。具体做法是,在提示词里要求模型先输出一个方向判断,接着强制它把判断里的左右互换、主体互换,形成第二个表述,然后检查两个表述是否逻辑一致。

有个实际例子。问题是:“小红站在小明的左边,请问小明站在小红的哪一边?”如果模型直接答“小明站在小红的左边”,明显错了。加入镜像回读后,它需要先写出“小红在小明左边”,然后镜像表述为“小明在小红右边”,再比较,此时它很容易发现矛盾并自我纠正。

这种做法的思路就来自缪刺:不从病侧直接给结论,而是绕到对侧验证一下。很多模型单通道输出时会自信过头,但强制它做对偶校验时,反而能触发更谨慎的推理。

4.2 思维链里显式插入“对称轴校验”

对空间问题,思维链比普通提示效果好太多,但默认的CoT并不会主动做对称推理。需要在CoT里显式插入一个校验步骤:“判断左右关系时,先建立A与B的对称轴;确认A在B左边,那么B必然在A右边;如果接下来描述中出现相反关系,说明推导有误。”

这是我的提示词模板:

请按步骤思考: 1. 找到描述中的实体A和实体B,以及他们的方位关系。 2. 建立对称轴:如果A在B的左边,则在同一个对称轴上,B必然在A的右边。 3. 把步骤2的结论作为校验条件,重新阅读一遍原描述。 4. 如果原描述与校验条件冲突,以原描述和逻辑推理共同修正。 5. 最后输出结论。

这套方法实测可以把简单关系题的准确率提升不少,尤其是带有“反物主语”的句式,比如“书在笔左边”这类。

4.3 给数据做左右翻转增强

微调阶段也有文章可做。如果你在整理多模态微调数据,把所有包含“左”“右”的图片统一做一个水平翻转增强,同时把标注文本里的“左”“右”互换,这会让模型学到一条重要的规则:图片翻转不代表内容翻转,但方位描述要翻转。

有一类很常见的错误是,操作数据时只翻了图,没翻标注。结果模型学出来“翻转前后我都答左边”,反而强化了原来的左右偏差。我自己在微调实验里遇到过这类数据,清理之后,左右类任务的正确率才有明显提升。

对纯文本数据也有类似做法。可以把所有涉及两个实体相对位置的句子,自动生成镜像改写版:“A在B左”对应“B在A右”。这样喂进训练集的每一个关系样本,天然带对偶样本,等于替模型预装了一根对称轴。

4.4 可复用的三套提示模板

下面三套模板我留作常用工具,按场景选用。

第一套,关系反演模板,用于检验两个实体之间的位置关系:

你是一名逻辑校验员。对用户给出的位置描述: 1. 先提取实体A、B和关系词。 2. 输出一个镜像等价句:把关系词左右互换,并把实体顺序对调。 3. 检查两个句子是否在逻辑上等价。如果不等价,输出“校验失败”并说明问题所在。 用户描述:{描述}

第二套,图片镜像模板,多模态场景中使用:

这张图片可能被水平翻转了。请先确定图片中主体人物的左右手,这里“左右”一律以图片中人物自身为参照,不是观看者的参照。 然后回答:该人物举起的是左手还是右手?请用“人物自身的左侧/右侧”来表述。 如果无法从图片直接判断,请回答“无法判断”,不要猜测。

第三套,坐标推理模板,处理数字空间题:

给定一条数轴,越往右数值越大。已知实体A在实体B的左边,请判断实体B在实体A的左边还是右边。 在回答前,请先构造对称轴检验:A左B必右,B左A必左;然后以对称轴结论为准。

这些都是基于缪刺“交叉对应”思想设计的。它们不解决模型内部表征问题,但能在推理时强制加入一个空间对称轴,减小输出偏差。

5. 实测里的坑,以及怎么排

5.1 左右基准必须先对齐

我踩过最大的坑,是没有先对齐左右基准。同一张图,问模型“图中人物举起的是哪只手”,模型可能会按观看者视角去理解“左右”,而标注却按图中人物自身视角。这时哪怕模型答对,标准答案也判错;答错,反而可能被判对。

解决办法是每次见面前就在提示词里声明基准:“左侧、右侧以图片中人物自身为参照”或“以画面显示方向为参照”。多模态评测中,这个说明必须前置,否则数据集里的左右标注没有共同语言,后面评估全部无效。

5.2 上下文越长越容易漂移

另一个有趣的现象是,长上下文任务里,模型会把较早出现的方位信息“冲淡”。比如一篇长文档里,十页前有“设备A在设备B左边”,十页后问“设备B相对设备A在哪边”,模型很容易给出不相关或者矛盾的回答。

这不是左右独有的问题,但左右词更脆弱,因为它们的判断依赖上下文关系。我建议在长文档里及时把关键方位关系写成摘要:“记住:A在网络上游,B在A右侧”。如果任务里确实需要在多轮对话中保持空间关系,可以让模型在每轮输出开头都复述一遍“当前空间关系”锚点,类似缓冲区刷新。

5.3 多模态模型更容易栽在第一视角

纯文本模型左右不分,是缺坐标;多模态模型左右不分,是坐标错位。图片里有拍摄机位、画面主体、观看者三个视角。一个简单的“左边”可能同时对应拍摄者左、主体左、观看者左。模型如果不建立视角分层,就会把这些视角混在一起。

我在测试中发现,某些多模态模型在未指定视角时会默认选择“观看者视角”,这跟大部分传统数据集的标注习惯相冲突。因此,多模态数据准备阶段,最好在JSON标注里增加一栏“viewpoint”,例如“camera”“subject”“viewer”,然后评测时明确告诉模型要使用哪种视角。

5.4 常见问题速查表

症状可能原因处理建议
镜像前后答案完全一致模型未学习到镜像反转规则用配对数据增强,强制翻转标注
标题里说左,正文里说右缺少对称轴检验,推理链条不稳定在CoT里插入镜像回读校验
多模态图片中判断左右不准视角基准未对齐在提示词中显式指定“人物自身视角/观看者视角”
长文档中方位关系丢失上下文相对位置被冲淡增加摘要锚点或每轮复述空间关系
数据增强后左右错误率升高翻转图但未翻转文本标注检查成对样本,保证标注随图翻转

这张表基本覆盖了我日常评测中的大部分问题。多数情况不是模型“笨”,而是输入和标注没有站在同一个坐标系里。

6. 一点个人体会:先给“左右”做个锚点,再谈“理解”左右

6.1 奇偶轴评测不要用单点提问

经历过这些测试后,我的第一建议是:所有左右类评测,不要采用“单点提问”。单点提问即便是正确答案,也可能是模型从常见句式中套出来的。正确做法是必须有配对样本,原图和镜像图、原句和反转句,成对验证。

我在内部工具里已经把这些配对固化成了标准化测试集。每次做模型对比或者微调回归测试,都会跑一遍奇偶轴套件。没有通过奇偶校验的模型,即便其他指标再好看,我也会保留“空间常识待提升”的标记。因为左右问题的背后,往往是模型对结构化关系建模能力的短板,这种短板不会只在一道题上露面。

6.2 缪刺给我带来的真正提醒

缪刺两千年前的思想,本质上是在说:当一侧信息不可靠时,用对侧的确定性来补偿。听上去很朴素,但放在今天的大模型工程里依然好使。大模型在面对左右问题时,能靠显式对偶关系补足内部表征缺失,这让我意识到交叉映射不是“外部补丁”,而是一种很有价值的推理策略。

后续如果你也要解决这类问题,不妨先问一个关键问题:我的模型有没有能力在对称轴上把左右对调一次,还保证输出不崩?只要它做不到,左右问题就没有真正解决。先建这个锚点,再谈理解左右,顺序不能反。这也是我这两年测试下来最想分享的一句话。