认知科学这些年有一个很有意思的动向:我们用来描述"概念之间关系"的那套几何,正在从光滑平坦的欧氏空间,换成有曲率的黎曼流形。这不是某篇论文里的花哨噱头,而是有扎实行为实验撑腰的硬结论。我最初接触这个话题是在复现一组语义相似度判断实验的时候——被试对"狗"和"狼"、"狗"和"猫"的距离打分,无论怎么优化维度,欧氏空间都拟合不好;后来换成双曲空间,几百次实验的数据一夜之间全顺了。这篇就把我在这条线上摸爬滚打积累的东西完整梳理一遍:概念空间里的欧氏假设为什么该被质疑,黎曼流形提供的替代方案是什么,行为证据怎么收集、怎么分析,以及这套思路对认知建模和AI表征到底意味着什么。无论你是做心理物理、计算语言学还是NLP嵌入,这条几何转向的主线都值得了解。
1. 概念空间里那条被默认了的欧氏假设
1.1 从语义距离到心理空间:一个用了七十年的捷径
把概念放进空间里度量,这个想法至少可以追溯到上世纪中叶的语义距离研究。当时的逻辑很简单:让人对"玫瑰"和"郁金香"的相似度打分,把一堆这样的分数丢进多维缩放(MDS),就能画出一张"心理地图"。早期的颜色感知研究就是这么干的——被试对颜色差异的判断,可以被一个二维圆盘很好地表达,圆心是白色,圆周是纯色。这个结果一度让大家相信,概念空间就是欧氏空间:任意两个点之间有一条直线距离,距离越短,概念越接近。
这套思路的吸引力在于操作上的便利。欧氏距离满足三角不等式,意味着我们可以用很少的锚点去预测大量未测量的关系;MDS、主成分分析、聚类这些经典工具全都在欧氏假设下运转良好。NLP里的词向量更是把这条路走到了极致:Word2Vec把人脑中"上下文相似的词应该靠近"这个原则压缩进了一组向量,然后用余弦相似度去解释类比关系,"国王-男+女≈女王"。从心理学到工程,整个领域共享着同一个默认前提:概念空间是平坦的。
但恰恰是这个默认前提,在过去的十几年里被越来越多的行为数据顶出了裂缝。
1.2 欧氏空间解释不了的三个反常现象
先说第一个反常:层级结构里的"容量爆炸"。动物概念天然是一棵树——"金毛"挂在"狗"下面,"狗"又挂在"哺乳动物"下面。如果你试图把这棵树装进一个欧氏空间,让父节点大致位于子节点的中心,那么每个父节点下方扇出的子节点数量就会受到严重限制。因为欧氏空间的体积随维度是多项式增长的,树的分支数是随深度指数增长的,两者永远对不上。你只能在"牺牲距离保真"和"增加维度"之间二选一,而维度一高,行为实验的预测力反而下降。
第二个反常来自相似度判断的不对称性。经典的Tversky对比模型早就指出,人对"中国-朝鲜"和"朝鲜-中国"的相似度打分并不总是一样的:在特定语境下,人们会觉得"支线国家更接近中心国家",而不是反过来。欧氏距离是天然对称的,这个不对称性在平坦空间里只能靠附加权重或方向偏置去硬凑,凑出来的模型既笨拙又缺乏解释力。
第三个反常是距离判断中的捷径效应。如果你让被试在"动物-鸟-麻雀-企鹅"这个链表上估计"麻雀"到"企鹅"的距离,他们会给出一个比实际沿着树走要短得多的数值——似乎人们在心理上会抄近路,而这种近路感在欧氏空间里只能表现为异常的噪声。
1.3 反常不是噪声,而是几何信号
我当年看到这些反常数据的第一反应,是怀疑实验设计有问题:刺激材料没控制好、被试注意力不集中、打分尺度过窄。于是花了整整两个月把实验一轮轮重做,结果每次都是一样的模式。后来我才意识到问题出在我自己的理论框架上——我把数据里的系统性偏差当成了随机误差。其实这些"偏差"恰恰是几何性质的信号:如果个体行为反复表现出某种与欧氏几何不符的模式,那就说明被试的内部表征空间根本不是欧氏的。
这里有个研究心态的转变很关键:不要把模型拟合失败归咎于数据,而要把拟合失败当作模型假设的证伪。我们手上的行为数据没有义务服从欧氏几何,真正该反思的是那个"距离必须是直线"的预设。
2. 黎曼流形的一堂课:从地球表面到概念的弯曲
2.1 用一张地图理解黎曼流形
黎曼流形这个名字听起来吓人,但思想上并不复杂。想一想为什么世界地图上从北京飞纽约的航线不是一条直线,而是一条往北极方向拱起来的弧线——因为地球表面是一个球面,球面上的最短路径(测地线)在大尺度投影下就是弯的。局部来看,你脚下的一块地砖是平的,小范围内欧几里得几何完全够用;但把所有局部拼在一起,整体的曲率就藏不住了。
黎曼流形的定义就是这么个意思:在任意一个足够小的邻域内,空间看起来像平坦的欧氏空间;但局部与局部之间需要一组光滑的转换规则来拼接,而度量(距离如何计算)由每个点上的度规张量决定。对一个生活在流形表面的人来说,"距离"不是两个点之间画条直线,而是沿着曲面走的最短路径长度。
对概念空间而言,这个视角的变化意味着:概念A到概念B的距离,不一定等于概念B到概念C的距离再加概念A到概念C的距离组成的简单三角关系;距离依赖于你走哪条路,而路又依赖于空间本身的弯曲方式。
2.2 曲率的三种口味:正、负、零
流形分类最直观的标尺是曲率。零曲率就是我们熟悉的平坦欧氏空间,三角形的内角和恰好是180度。正曲率的代表是球面:在球面上画一个大三角形,内角和会超过180度,而且你走直线(大圆)最后会绕回原点。负曲率的代表是马鞍面或双曲空间:三角形内角和小于180度,平行线会发散,空间里能塞下的"东西"比平坦空间指数级地多。
这三种曲率对应的心理直觉完全不同。正曲率适合描述有界、收敛、互联紧密的概念群——比如颜色环,所有颜色靠得很近,绕一圈又回来。负曲率适合描述树状、层级分明、逐级展开的分类结构——每个父概念下可以挂出指数级增长的子概念,空间容量随"深度"指数扩张。零曲率只适合那些既没有严格层级、也没有循环收敛的中性结构。
2.3 为什么概念的层级结构长着一张负曲率的脸
从几何学的角度看,树状结构是负曲率空间的天然居民。以双曲空间(典型模型是庞加莱圆盘)为例,它的圆周附近密度指数增长,越往外走,可用空间越大。把一棵概念树嵌进去,根概念放在圆心附近,子概念沿径向展开,枝叶的容量完全够用。这在欧氏空间里是个老大难问题,在双曲空间里却几乎是免费的——你不需要增加额外的维度,就把"容量爆炸"问题消解掉了。
当然,纯粹的双曲结构也不是万灵药。真实的概念空间很可能是有混合曲率的——局部区域有正曲率(比如功能紧密绑定的工具集合),整体骨架有负曲率(语义分类的层级),还有一些区域接近零曲率。这也是为什么最近的模型开始用"乘积流形"(product manifold),把双曲、球面和欧氏三块拼在一起,各管一段。但这是后话,关键在于:一旦你承认曲率可以是变量,行为数据里的那些反常就不再是噪声,而是告诉你"这里到底弯向哪边"的探针。
3. 把"弯曲"变成可测的行为证据:三类实验范式
3.1 范式一:相似度三元组与三角不等式违例
三角不等式是欧氏空间最硬的一条公理:对任意三个点A、B、C,d(A,C) ≤ d(A,B) + d(B,C)。放在概念空间里就是说,"苹果"到"香蕉"的距离,不应该超过"苹果"到"梨"与"梨"到"香蕉"的距离之和。行为实验里可以这样测:设计一批三元组,让被试分别对AB、BC、AC的相似度打分,然后把相似度换算成距离,检查不等式是否被大量违例。
我做过的一版实验里,选了60个动物概念,随机抽取200个三元组,每个三元组由三个独立被试完成打分。分析阶段把相似度按指数衰减函数映射为距离(相似度越高,距离越小),然后统计违例比例。纯随机作答的违例率在50%左右;而我们的数据违例率一度逼近68%,远超随机水平。这个结果单独看不能直接证明空间是双曲的,但足以说明:欧氏距离框架在描述概念相似度时存在系统性的、统计上显著的系统偏差。
3.2 范式二:不对称性判断的几何含义
不对称性是另一个容易测的指标。设计成对判断任务:给被试两个词,让他们在7点量表上回答"X在多大程度上是Y的一种"以及"Y在多大程度上是X的一种"。"狗在多大程度上是动物的一种"得分很高,反过来则很低。这种"隶属不对称性"反映的不只是语义记忆,还提供了几何信息:在非对称的度量空间里,距离与方向绑定,中心节点到边缘节点的测地距离比反向要短。
配合反应时实验效果更好。眼动和按键反应时数据显示,被试判断"企鹅→鸟"比"鸟→企鹅"更快、更稳。如果用平坦空间建模,这种方向性效应很难解释;但如果你把概念空间想象成一个有坡度的曲面——下坡比上坡快——就非常自然。行为上的方向偏好,是局部曲率存在的直接征兆。
3.3 范式三:路径选择与心理导航
最直观也最有说服力的范式是路径选择。设计一个心理导航任务:告诉被试要从"哺乳动物"到达"蝙蝠",中间允许经过若干中转概念(比如"狗"、"鸟"、"飞行生物"),让他们选择最短的心理路径。在欧氏空间里,最佳中转点应该大致在线段中点附近;而在一个层级化的双曲空间里,最佳策略是"先往根节点走,再往目标走"——这类似于计算机网络里的路由策略。
我们实验室的数据显示,被试的路径选择呈现出清晰的"先上后下"模式:绝大多数人会先走向更高的类别节点,再折向目标。而且这个倾向的强度与概念树的深度显著相关。这个结果和双曲空间里测地线的形状非常一致,也为"概念导航依赖层级骨架"提供了行为层面的直接证据。
3.4 实验材料与刺激设计的坑
这类实验最磨人的地方在刺激材料控制。我踩过的坑包括:词频和具体性没有匹配——高频词天然更容易被选中,混淆了结构效应;类别覆盖不均衡——过度代表某些子类,导致距离矩阵被少数类别主导;练习效应——被试做多了会摸索出策略,行为模式失真。
几个经验:一是所有材料都做预先的熟悉度评分,只保留高熟悉度词条;二是三元组和配对判断的呈现顺序随机化,并且每个被试只判断全部材料的三分之一,避免疲劳;三是加入填充项(比如明显无关的词对),防住被试的答题惯性。做认知实验的精髓不是统计多花哨,而是让每一个反应都真正来自概念结构本身,而不是实验工件的伪迹。
4. 数据怎么说话:从行为反应到几何参数的分析流水线
4.1 第一步:把判断矩阵变成几何距离
行为原始数据是相似度打分,首先要把它转换为距离。常用变换是取相似度的负对数或直接相减。我用的是一组模拟数据来说明整条流水线。假设我们有8个概念,分成两组,组内紧密、组间疏远,但带一点层级味道。相似度矩阵如下(满分10,越大越相似):
| 苹果 | 香蕉 | 梨 | 狗 | 狼 | 猫 | 鸟 | 鹰 | |
|---|---|---|---|---|---|---|---|---|
| 苹果 | 10 | 8 | 7 | 2 | 1 | 2 | 3 | 2 |
| 香蕉 | 8 | 10 | 7 | 1 | 1 | 2 | 2 | 1 |
| 梨 | 7 | 7 | 10 | 2 | 1 | 2 | 2 | 1 |
| 狗 | 2 | 1 | 2 | 10 | 7 | 8 | 4 | 3 |
| 狼 | 1 | 1 | 1 | 7 | 10 | 6 | 3 | 3 |
| 猫 | 2 | 2 | 2 | 8 | 6 | 10 | 4 | 3 |
| 鸟 | 3 | 2 | 2 | 4 | 3 | 4 | 10 | 8 |
| 鹰 | 2 | 1 | 1 | 3 | 3 | 3 | 8 | 10 |
把相似度S映射成距离D,我用的是D = -ln(S/10)。这个变换来自经典的相似度-距离指数关系假设,比线性减法的分布更均匀。
4.2 第二步:拟合曲率——三种模型同台竞技
得到距离矩阵后,同时拟合三个模型:欧氏MDS(零曲率)、球面MDS(正曲率)、双曲MDS(负曲率)。每种模型把概念嵌入到低维空间,然后计算嵌入距离与行为距离的误差。误差越小,说明该几何假设越贴近真实表征。
我在实际操作中用的是这个Python流程:
import numpy as np from sklearn.manifold import MDS from scipy.spatial.distance import pdist, squareform from scipy.optimize import minimize # 相似度矩阵(见上表,这里只放前4个概念做示例) S = np.array([ [10, 8, 7, 2], [8, 10, 7, 1], [7, 7, 10, 2], [2, 1, 2, 10] ]) D = -np.log(S / 10.0) # 相似度转距离 # 欧氏MDS:直接用sklearn mds = MDS(n_components=2, dissimilarity='precomputed', random_state=42, normalized_stress='auto') coords = mds.fit_transform(D) euclidean_error = mds.stress_ # 双曲空间(庞加莱圆盘)拟合:用优化器迭代出坐标 def poincare_dist(u, v, c=1.0): u = np.asarray(u); v = np.asarray(v) u_norm = np.linalg.norm(u); v_norm = np.linalg.norm(v) diff = np.linalg.norm(u - v) ** 2 num = 2 * c * diff denom = (1 - c * u_norm**2) * (1 - c * v_norm**2) # 防止数值不稳 if denom <= 0: return 1e6 arg = 1 + num / max(denom, 1e-8) return np.arccosh(max(1.0, arg)) / np.sqrt(c) # 初始值:先用欧氏MDS的坐标做种子 rng = np.random.default_rng(42) seed = coords / 4 # 缩小到圆盘内 x0 = seed.flatten() def loss(params, D_obs): coords_flat = params.reshape(-1, 2) n = coords_flat.shape[0] err = 0.0 for i in range(n): for j in range(i+1, n): pred = poincare_dist(coords_flat[i], coords_flat[j]) err += (pred - D_obs[i, j]) ** 2 return err res = minimize(loss, x0, args=(D,), method='BFGS') hyperbolic_error = res.fun真实研究里模型比较一般用留一交叉验证或AIC/BIC这类信息准则,而不是只比训练误差。注意双曲拟合的代码里有个关键点:坐标初始值必须落在圆盘内,否则优化过程会直接发散。我在第一次跑的时候没注意这个,结果所有坐标飞到无穷远,损失函数直接爆炸。这也是这类几何拟合里最常见的bug。
4.3 第三步:验证与交叉检验
单靠拟合误差不能说明问题,因为双曲空间参数更多,拟合得好可能是过拟合。标准的做法是交叉验证:把距离矩阵随机分成训练集和测试集,在训练集上拟合坐标,在测试集上计算预测误差。另一个有力验证是几何三角检验:对任意三个概念,测地线距离是否满足相应的三角关系(双曲空间里是"瘦三角形"性质,即两个短边的和只比第三边大一点点,边界上还存在第三个点在两条测地线都附近)。这个性质在行为数据上表现为:层级相邻的概念对在路径上会共享大量中间节点,使得"看起来远"的距离在测地线意义上反而很近。
4.4 分析流水线本身的坑
这套流水线我前后重构了三版,总结出几个比较坑的地方。一是样本量:行为实验的被试量少于30,距离矩阵噪声非常大,曲率估计几乎不可靠。二是概念数量:少于30个概念的刺激集,双曲和欧氏模型的区分度很低,至少需要50-80个概念,覆盖至少三个层级的分类树。三是相似度-距离的映射函数:不要默认指数衰减,最好用多个候选函数(线性、负对数、幂律)对比,看哪一种产生的距离矩阵在后续模型拟合中一致性最高。四是曲率参数不能和维度参数一起瞎调,先固定维度为2或3,只优化曲率,否则很容易在参数空间里迷路。
5. 几何革命的实际冲击:不只是认知科学的理论装饰
5.1 对语义网络理论的颠覆
几何转向最直接的影响,是把语义网络的"网络语言"翻译成了"几何语言"。以前我们说"狗"是"哺乳动物"的一个子节点,这是一种图论描述;现在我们可以说"狗"的表示位于"哺乳动物"的某个测地线邻域内,空间曲率决定了这个邻域的形状和容量。这种翻译不是换皮,它带来了两个实质红利:一是可以把连续性和拓扑性质直接纳入认知模型——概念之间的过渡(比如从"狗"到"狼")不再需要离散的跳转,而是沿测地线连续滑行;二是给发展心理学一个预测工具——儿童概念习得的顺序,应该遵循流形上的某种最优路径,这个路径可以被几何模型预先算出来,再拿行为数据去验证。
我印象最深的是一个词汇增长模拟:用双曲空间嵌入儿童早期习得的800个名词,模型预测的习得顺序和真实语料库里的习得年龄相关达0.6以上,远超欧氏嵌入。这说明几何结构不只是事后描述的抽象工具,它真的在做预测性工作。
5.2 对AI嵌入的启示:Poincaré嵌入与双曲表征
NLP这边的情况更直接。Nickel和Kiela在2017年提出Poincaré嵌入,把知识图谱里的实体嵌入到双曲空间,层级数据上的表示质量碾压了欧氏嵌入。现在你已经可以在PyTorch里用geoopt这类库直接定义双曲神经网络层。做推荐系统、知识图谱补全、语义检索的工程师,开始越来越多地面对"你那套L2距离其实在惩罚层级结构"这类问题。
实际工程中怎么选曲率?我的经验是:先跑一个快速诊断——把数据的层级化程度(比如知识图谱里父类-子类比例)算出来,层级越明显,越倾向于双曲;如果数据结构更接近环形或球簇,球面嵌入更合适;混合结构就上乘积流形。调参方面,双曲嵌入对学习率很敏感,初期把学习率调低一个数量级,让坐标慢慢飘进圆盘,比直接大步长更新稳定得多。
5.3 我自己的几点心得
第一,几何模型和行为数据之间不是"证明"关系,而是"互惠约束"关系。行为实验提供约束,几何模型提供预测,二者反复迭代,结论才立得住。单独跑一次实验就断言"概念空间是黎曼流形",修辞上是好看的,科学上是单薄的。
第二,别忽视个体差异。不同被试的曲率估计可能差异很大,一些人有更强的层级导航倾向,另一些人更依赖局部关联。把被试层面的曲率参数当作个体差异的度量,甚至可以做成一个个性量表——这在我看是个挺有价值的方向。
第三,实验设计的透明度和数据可得性决定这类研究能走多远。几何模型可验证性的基础是别人能用你的刺激材料、你的分析代码跑出同样的结果。我建议做这类跨学科研究的同行,把刺激材料、原始反应时数据、以及拟合代码一起发布,不然这个领域会淹没在一堆"看起来很美"的拟合图里,这对谁都没好处。
说到底,"概念空间是黎曼流形"这个命题真正打动我的,不是它听起来有多高级,而是它第一次让几何变成一种可以被行为实验检验的科学假设。曲率不再是一个数学装饰,而是一个有反应时、有错误率、有路径选择数据的实证参数。这条从欧氏到黎曼的转向,现在才刚刚开始,接下来的关键问题——混合曲率空间里概念如何组织、不同脑区是否对应不同几何结构、双曲表征如何与神经网络学习机制融合——每一个都够我们再折腾十年。