万象阁的布星人
一、鲸鱼到底算鱼还是算兽?
京师的万象阁,藏尽天下书。光经史子集四大部的书目,就摞了一人多高。
阁主姓陆,做了二十年书目分类。他的书架排法叫"四百六十八部"——所有书按一个树状分类,从根到叶,每本书坐一个坑。
说白了,就是一个巨大的树形目录。经部→易类→某个朝代→某位注者。每本书有且只有一个位置。
二十年前这规矩还行得通。书少。
近十年不行了。印书坊越出越多,新书一年比一年多。更要命的是,很多新书根本不知道该往哪放。
上个月出了一件事。两位翰林在书阁里吵了起来。
起因是一本《鲸谱》。甲翰林在"海兽部"找到了它——因为鲸是海里的兽。乙翰林在"渔获部"找不到,大发雷霆——"你让我翻完兽部再翻渔部?它到底是兽是鱼,你得给个说法!"
陆阁主被叫来评理,半天没说出话。
另一本《鼯鼠志》,更头大。鼯鼠会飞——放禽部?是鼠——放兽部?吃虫子——放虫部?三个编目员给出了三个答案。
陆阁主那天晚上喝了三壶茶,抽了一整包烟,在天井里坐到四更。四百六十八部,好大一棵树。可知识他妈的根本不长成树。
"树装不下了,"他自言自语,"得换个东西装。"
但他不知道换什么。
二、把所有的词,放进同一片天
阁里有个老测绘,姓纪,人称纪师傅。
纪师傅一辈子没升过职。他在阁里干了四十年,干的事说出去都没人懂——他画星图,画了四十年。
但没人知道,他不是在画天上的星星。他画的是"词的星星"。
"你过来看。"
纪师傅拉陆阁主进了屋。一面墙,贴满了密密麻麻的星图。不是天文图——图的四边标着字:上边是"话本",下边是"奏疏",左边是"古语",右边是"白话"。正中间是"今日"。
而图上,散布着黑压压的小点。每个点旁边,是一粒芝麻大的小字:"王"、"帝"、"走"、"跑"、"红"、"朱"、"热"、"暖"……
"这张,是你的三千常用词,"纪师傅敲了敲图纸,"我不是星官——我是布星人。我把词当星星,往天上排。"
陆阁主瞪大眼睛:"排的规矩是什么?"
"排的规矩只有一条:意思离得近的词,在天上就得离得近。"
纪师傅翻出一本厚账本,里面密密麻麻记着"词挨词"的记录——四十年,从四万卷书里,一行一行数出来的。
"你数这个干什么?"
"你看——凡是'王'出现的地方,附近大概率会撞见'帝'、'君'、'殿'、'陛下'。'王'一辈子没跟'萝卜'挨着出现过。"
"所以呢?"
"所以——不管'王'和'萝卜'字典上怎么定义的,它们在四万卷书里头,从来不走一条路。走的路越像,离得越近;路越不像,离得越远。"
纪师傅指着图:"这张图就是这么画出来的。每一颗星的位置,不是我想出来的——是四万卷书,一卷一卷,帮它推到那个位置上来的。"
陆阁主怔怔看着那密密麻麻的星图。"帝"挨着"王","陛下"挨着"帝"。
"可这有什么用?不过是个词图——"
"你试试。"纪师傅递来一张纸,"你给一个词,我告诉你它是什么意思。"
陆阁主写了两个字:"麒麟"。
三、方向,比位置更妙
纪师傅接过纸,没翻书,没查典。
他把"麒麟"周围十颗最近的星找了出来——"瑞兽"、"凤凰"、"祥瑞"、"龙"、"角"、"蹄"、"鹿"、"马"、"独角"、"仁兽"。
"麒麟是一种瑞兽,跟凤凰、龙同列。长的样子——有角、有蹄、像鹿又像马、独角。性子——仁。这就是你在四万卷书里提到'麒麟'时,最常跟它一起出现的那些词。"
"四万卷书没告诉你麒麟长什么样,但它们告诉你麒麟身边站着谁。"
"它身边的那些家伙,加在一起,就是它自己。"
陆阁主听得手微微发抖。他当了二十年分类官,第一次觉得自己那棵树,不香了。
"可这图只能查词义。我要分的是书——一本书几十个词,怎么排?"
纪师傅从抽屉里翻出另一张图。
"你要分一本书?把书里最重要的那些词全部取出来,在天上找到它们的位置,然后——取一个中心。一本书,就是天上的一小撮星——它们围成的那个形状的重心。"
"这本《鲸谱》,你看看——它的重心挨着'海兽'还是挨着'渔获'?"
陆阁主看了半晌:"海兽。但它边上就是'渔获'和'水产'。你没法把它放进海兽的抽屉,而不让它碰到渔获和水产。"
"对,"纪师傅放下笔,"你的树做不到。但天做得到。在天上,一颗星可以离三颗星一样近。不需要非此即彼——可以既是海兽,又沾水产,又带一点远古异兽。"
"你原来那棵四百六十八部的树——一棵树上每片叶子只能长在一根枝上。可我这张星图,一颗星旁边可以有一万颗星。"
"树是一对一的。天是一对无穷的。"
四、从公到公,从走到走
陆阁主被震住了,但他还没彻底服。
他出了一个刁钻的题。
"你既然说这些星的位置有'意思',那我问你——方向,有意味吗?"
纪师傅没答。他取了一支笔,在图上点了一个点:"王"。然后从"王"往外拉了一条线,指到"男"。这条线的意思——从"王"到"男"——是什么?
纪师傅又点了一个点:"后"。然后从"后"出发,沿着和刚才一模一样的"方向",走一样长的"距离"——停在一个上。
陆阁主靠近一看:"女"。
他愣了足有半盏茶的工夫。
"从'王'到'男'的方向,意思是——'去掉帝王身份,只留性别'。把这个方向,从'后'出发走一遍——就成了'女'。"
"方向本身,有含义。"
纪师傅又画了几条。
从"走"到"走了"——方向是"过去"。
从"跑"出发,沿着"过去"的方向——落在"跑了"。
从"长安"到"唐"——方向是"属于哪个朝代"。
从"东京"出发,沿着同一方向——落在"宋"。
从"热"到"烫"——方向是"程度加深"。
从"凉"出发,沿着同一方向——落在"冷"。
纪师傅放下笔:"你看到了。天上每颗星的位置,不是随便放的。它们之间的关系——距离和方向——本身就装着意思。近的是近义;往某个方向走一截,就是加一层含义、去一层含义、变一种说法。"
"而且我这个系统的妙处是——你只需要知道我从A到B的那个'方向',你就可以把它用在C上。C你不一定见过,但你顺着方向走,结果就对了。"
阿图在旁边恍然大悟:"这不就是……用已知的词的关系,推算未知的词?"
"对。天上一旦排好了,你就不需要见过所有组合——你只需要沿着方向挪。"
五、一句话,在天上画一条路
那年秋天,阁里来了个新难题。
新科进士们上了一份折子,要把一百二十卷《文献通考》重新编目,按"经世致用"的标准——不是按经史子集,而是按"民生"、"吏治"、"河工"、"边备"这样的新分类。每卷书配三个新标签,标签不能瞎贴,得前后一致。
按老规矩——让编目员把每一卷通读一遍,然后凭经验分类。一百二十卷,少说得编三个月,而且三个编目员出来一定是三套不同的标签。
陆阁主去找纪师傅。
"一句话,在天上也可以排。"纪师傅说,"把这句话里最要紧的五个词找出来,天上找到它们的位置。这五个位置连起来——就是这条句话在星图上的'路'。"
"一句话是一条路。一卷书是几百条路的交会。"
阿图花了一个月,带着三个学徒,把一百二十卷《文献通考》每卷的关键句摘出来,每句话在天上画一条路。每卷书的所有路围成一个区域——那卷书就落在这个区域的中心。
然后他们看这个中心离哪个标签最近。
"吏治"标签附近,自然聚集了那些讲官员考核、品级俸禄、任免铨选的卷子。
"河工"标签附近,自然聚集了那些讲黄河改道、漕运修缮、堤防岁修的卷子。
不用任何编目员去"判断"某一卷该归哪里。书自己就去到了它该去的地方——因为它的每一句话,都是向导。
一百二十卷,十五天编完。三个编目员独立分头做,出来的标签重合率九成七。以前——三成五。
陆阁主交差回来,坐在纪师傅那间满墙星图的屋里,喝着茶不说话。憋了半天。
"老纪,你四十年画的这些图,你是不是一直在等这一天?"
纪师傅弹了弹茶盏边沿。
"树把万物劈开。天让万物站在一起。站在一起的,自己就知道——谁是近的,谁是远的,谁挨着谁,谁能变成谁。方向在,路就有了。"
阿图最后问了一个问题:"师父,那张星图上,现在有多少颗星?"
"四万七千余。"
"词倒不算很多。"
纪师傅站起身,指着墙上:"阿图你想想——四万七千颗星,每一颗,跟任何一颗,都能连出一条线。天上连成了多少条线?"
阿图愣了愣:"这得是亿的量级……"
"二十个亿。"
纪师傅回过头:"这才是天。树装不下的,天装得下。"
技术解读
词嵌入(Word Embeddings)和表示学习(Representation Learning)是深度自然语言处理的基石。2013 年,Mikolov 等人在谷歌发表 Word2Vec(《Efficient Estimation of Word Representations in Vector Space》),用一个极其简单的思想和极其高效的训练方法,把离散的词汇映射为连续的稠密向量——自此,"语义空间"这个概念从语言学家的论文落进了工程师的代码里。
Word2Vec 的威力不仅在于速度快。它揭示了一个惊人的现象:精心训练的詞向量空间中,向量运算竟自然地对应了语义和语法上的"类比"。king − man + woman ≈ queen——这不是一个精心构造的特例,而是在大规模语料上训练后普遍涌现的规律。此后的 GloVe、FastText,乃至 BERT 级别的上下文化表示(ELMo、BERT、GPT 系列),都以某种方式站在这条思路上——语言的意义,可以嵌入一个连续的几何空间。
核心概念回顾
| 概念 | 通俗解释 |
|---|---|
| one-hot 编码 | 传统方法:每个词是一个十万维的独热向量,只有一维是 1,其余是 0。稀疏、无结构、"王"和"帝"跟"萝卜"一样远 |
| 词嵌入(Word Embedding) | 把每个词映射为一个低维(如 300 维)的稠密实数向量,向量本身"就是"这个词的含义 |
| 分布假说(Distributional Hypothesis) | "一个词的含义,可以从它经常与哪些词共同出现来推断。"——Firth(1957)。词嵌入的理论基础 |
| Skip-gram / CBOW | Word2Vec 的两种训练模式:前者用中心词预测上下文,后者用上下文预测中心词 |
| 负采样(Negative Sampling) | 训练效率技巧:不计算全词表,只采样少量"反例"一起更新,大大加快训练 |
| 词类比(Word Analogy) | king − man + woman = queen。说明词向量空间中的方向和距离"编码了"语义关系和语法关系 |
| 余弦相似度(Cosine Similarity) | 用两个向量之间夹角的大小衡量"意思有多接近",比绝对距离更鲁棒 |
| GloVe | Pennington 等人提出的替代方法(2014),基于全局词-词共现矩阵的分解,与 Word2Vec 互为补充 |
| 上下文化表示(Contextualized Embedding) | 后来的 ELMo、BERT打破了一个词只有一个固定向量的限制,同一个词在不同语境下的向量不同。但静态词向量的思想是这一切的前提 |
| 嵌入维度(Embedding Dimensionality) | 向量空间的维度数(通常 100-300)。维度太低装不下语义,太高则浪费算力且可能过拟合 |
| 流形假说(Manifold Hypothesis) | 高维数据其实集中分布在一个低维流形上。词嵌入之所以能以低维向量捕获语义,正因为它假设词语的意义活在这样一个"低维曲面"上 |
故事中的隐喻对照
| 故事元素 | 映射的技术概念 | 解释 |
|---|---|---|
| 万象阁与四百六十八部树形分类 | one-hot 编码与离散分类 | 每个词/文档只能属于一个固定的、互斥的类别,无法表达"既是A又沾B"的连续性 |
| 纪师傅的星图("天") | 词嵌入空间(Embedding Space) | 连续的、稠密的向量空间,相近的意思在空间中相近,允许任意两个词之间有连续的远近关系 |
| "四万卷书推进位置" | 训练过程(共现统计 + SGD/梯度下降) | 大规模语料上的共现模式,通过梯度下降或矩阵分解,逐步"推到"最优的向量位置 |
| "离得近=意思近" | 余弦相似度 / 欧氏距离 | 嵌入空间中,语义相近的词在向量位置上天然靠近 |
| "你身边的家伙加在一起,就是你自己" | 分布假说 | 一个词的嵌入完全由它在大规模语料中的上下文"邻居"决定——"you shall know a word by the company it keeps" |
| "一本书是天上的一小撮星的重心" | 文档嵌入 / 文本表示(如平均词向量) | 一句话或一篇文档的语义可以用其组成词向量的某种"中心"来近似表示 |
| 从"王→后"到"男→女"的方向 | 词类比 / 向量运算 | king − man + woman = queen。方向从夫妻关系变为性别维度的减法;方向本身编码了某种语义变换 |
| "过去"方向、"程度加深"方向 | 嵌入空间中的线性语义轴 | 语法人称/时态变化、情感极性等可以在向量空间中近似地沿某个方向走一步 |
| 一句话在天上画一条路 | 句子级别的表示:将词向量沿某种方式组合 | 用组成词向量表示整句语义,再与标签向量比较(如文本分类中的嵌入层+池化+分类) |
| 一百二十卷自动归到正确标签 | 基于嵌入表示的文本分类 | 文档经过嵌入表示后,与各标签向量的相似度自然给出分类结果,无需人工规则 |
| "树一对万物劈开,天让万物站在一起" | 离散表示 vs 连续表示 | one-hot(稀疏、离散、独立)vs embedding(稠密、连续、可度量关系);表示学习用连续几何取代了离散分类的世界观 |
| 四万七千星,二十亿条线 | 嵌入空间中词对关系的总规模 | n 个词在 k 维空间中两两之间有方向有距离,关系的组合爆炸远超任何离散体系可以表达 |
为什么这个故事对应词嵌入 / 表示学习?
用连续空间替代了离散分类。 四百六十八部树形分类对应了 one-hot 离散表示——每个词/文档必须"二选一",无法表达模糊性和多义性。纪师傅的星图对应的是稠密连续向量空间——任意两个词之间有方向和距离,相似度是光谱而非开关。表示学习的革命性正在于此:从"你是A还是B"变成"你在A和B之间的什么位置"。
"四万卷书把它推到那个位置"精确映射了分布假说与训练过程。 词嵌入不靠人工定义,而是从大规模语料的共现统计中"学"出来。Mikolov 的 Word2Vec 用 Skip-gram 或 CBOW 目标函数,将每个词的向量反复更新——正如"每一卷书都在帮它挪一点点"。
词类比现象是整个故事最核心的"惊喜瞬间"。 king − man + woman ≈ queen 是 Word2Vec 最著名的招牌能力。纪师傅展示"方向就是意思"——从"A到B"的方向可以被提取出来,应用到C上得到正确结果——这正是嵌入空间线性结构的涌现性质。
文档嵌入展示了下游任务的能力。 不止是词——句子、段落、整本书都可以在嵌入空间中找到位置。故事中《文献通考》一百二十卷的自动分类,对应了文本分类任务中基于词向量平均或更复杂组合来获得文档表示的标准做法。
"方向有含义"点出了嵌入空间的线性可解释性。 除了词类比,情感方向(好→坏时沿着某个轴移动)、时态方向、性别方向——许多语义维度在嵌入空间中表现出近似的线性结构。这不是训练时手动注入的,而是在大量语料中自然涌现的。
表示学习是整个深度 NLP 的逻辑地基。 从静态词向量(Word2Vec, GloVe)到上下文化表示(ELMo, BERT),再到今天的大语言模型——把离散符号嵌入连续几何空间的这个思想,从未过时。BERT只是让同一个词在不同语境下有不同的位置;GPT 则让整个序列一起决定位置——但"意义是一个位置"这个核心洞见,从 Word2Vec 时代就已经确立了。
后记:传统的分类学家把世界看成一棵树——每片叶子一根枝,非此即彼。但真实的语义世界从来不长成树——它是无数个维度的交织,是四万七千颗星每两颗之间都有一条线,是方向本身就有含义。纪师傅用四十年做的事,Mikolov 用一台 GPU 几小时就算完了。可他们看到的,是同一件事:意义不是标签,是位置。 万象阁的星图还挂在墙上,每有一颗新星被放上去,它就自动知道了自己该挨着谁——就像每一个新学的词,早已在语料的天空里,给它留好了一个位置。

