嵌入(embedding)
/ em-BED-ing /
嵌入,是把一样计算机没法做算术的东西——一个词、一件商品、一位用户、一张图像——变成一串它能做算术的数字。关键在于,这绝不是一串随机编码:这些数字被排布得让意义相近的东西在空间里彼此靠近,让毫不相干的东西彼此远离。想象一张巨大的地图,每个词都是一枚图钉:「国王」和「王后」挨得很近,「香蕉」在屋子另一头,而从「男人」指向「女人」的那个方向,竟与从「国王」指向「王后」的方向相吻合。意义,化成了几何。
具体地说,嵌入就是一个向量——一串不长的数字,也许几百个——分派给每一样东西。这些数字不是手写的;网络在某个真实任务上训练的同时把它们学出来,因为相似的东西在数据里行为相似,便被一点点推到一起。在相似语境里用到的词,会漂得相近;被同一群人买走的商品,会聚成簇;调子相同的歌,会凑作一堆。同一个词的三种语言,若一起训练,甚至可能落到相邻的位置。对于离散的东西,嵌入正是「学来的、按层级的表示」所采取的实用形态。
它为什么重要:一旦意义住进了几何,许多任务就变得轻而易举。「帮我找相似的东西」不过就是「找附近的点」。推荐系统推荐的是邻居;搜索引擎靠「相近」而非「字面相同」来匹配。嵌入,是搜索、推荐,以及每一个语言模型输入层之下那台安静的引擎。该有的告诫是:嵌入的公正与准确,全看塑造它的数据——它会欣然把数据里的偏见一并吸收进来——而且向量里那一个个数字,几乎从不携带某种整洁的人类含义。结构活在向量与向量「之间」的关系里,而不在任何单独一个坐标上。
在一套训练良好的词嵌入里,做算术「国王 − 男人 + 女人」,落点最接近「王后」的向量。空间里的方向,悄悄抓住了一种关系——保持「王室」不变,只把「性别」对调。
当意义化成几何,类比就变成了算术。
嵌入的力量住在向量之间的关系里(谁挨着谁),而不在任何单独一个数字上。又因为它是从数据里学来的,嵌入会一丝不苟地继承那份数据的偏见——这是真实系统里不公平行为的一个已知来源。