语音摘要 — 点击播放以跟读:正在朗读的行会保持在顶部附近。
多维"邻近性"如何运作
字符串的局限性
搜索"car"只会找到包含"car"的文档。你不会找到"automobile"、"vehicle"或"我的思域需要新刹车"。
几十年来,搜索都基于字符串相似度而非语义。谷歌通过工程手段不断改进:同义词词典将"car"映射到"automobile",词干提取规则连接"running"和"run",点击模式挖掘发现搜索"NYC apartments"和"Manhattan rentals"的用户需要相同结果。这些非匹配字符串间的关联基本需要人工建立。
嵌入技术颠覆了这一切,提出语义可以是一个_位置_。通过将文本转化为坐标,相似概念会彼此靠近。这种语义空间的映射不是人工的,而是从训练数据中涌现的。
编码
从一个简化示例开始。
假设为知识库中的每个文档按两个维度评分:与恐龙的相关度,以及与过山车的相关度。相似主题的文档会彼此靠近。
先看三个来源。将它们放在你认为合适的位置。
与过山车的相关度?→
毫不相关 非常相关 点击放置选中项
与恐龙的相关度?→
来源
🦕
恐龙儿童读物点击选择
🎢
Velocicoaster网页点击选择
📚
完整百科全书点击选择
你刚刚在2D空间中完成了语义映射,根据内容主题放置了这些条目。
检索
现在搜索这个空间。
用相同坐标轴在图上标出问题。用映射来源的相同逻辑映射问题,可以确保最近的条目就是最相关的。额外功能:用滑块控制检索数量。
检索来源数(k): 2
与过山车的相关度?→
毫不相关 非常相关 点击放置问题
与恐龙的相关度?→
问题
❓ "最好的恐龙主题过山车是什么?"
点击图表放置
这就是相似性搜索的核心。我们标出问题并找到最近的k个条目。不再依赖关键词匹配或同义词表,而是使用多维邻近性。
两个维度是起点。但二维只能捕捉两个概念。现实世界有更多主题,所以需要更多维度。
更多维度
增加第三个轴会怎样?用生物学维度。
儿童读物得分高(物种、栖息地、饮食)。百科全书涵盖部分。Velocicoaster页面几乎不涉及。
拖动旋转。
三维空间,每个文档三个坐标。Velocicoaster页面现在是(0. 50, 0. 90, 0. 05)而非(0. 50, 0. 90)。
现在想象第四个轴。
由于我只存在于三维空间,我本人无法想象😔但这其实不重要!每个新维度只是为每个点增加一个坐标,为距离公式增加一个平方项。空间表示在4D失效,但数学依然有效。
我们需要远超4维,因为真实嵌入模型使用约一千个维度。每个文档和查询都成为这个千维空间中的点。"找到最近文档"的含义与2D图中完全一致,只是距离计算更长。
未标记的轴
我们选择了轴:恐龙、过山车、生物学。但谁决定真实嵌入模型中的1024个主题?
事实上,无人决定。每个轴的含义是涌现的(即在训练中自然出现),更像黑箱。你不能查看第847维说"这是恐龙轴"。这些维度不对应任何人类可命名的概念。
这使得空间更难推理。我们无法通过询问第847维来理解为何两个文本彼此靠近,或为何预期相近的内容实际远离。
文本即坐标
那么谁分配坐标?嵌入模型。输入任意字符串,输出固定长度的数字列表。
文本
"居家办公"
→
嵌入向量
[0. 23, -0. 87, 0. 41, ... ]
1024个值
文本
"员工经经理批准每周可远程工作两天"
→
嵌入向量
[0. 71, 0. 09, -0. 33, ... ]
1024个值
输出长度固定(本例使用VoyageAI嵌入模型,故为1024值),无论输入是三个词还是三段话。一个文本块对应空间中的一个点。嵌入模型读取文本并输出单个向量。
数学敏锐者会指出"向量"和"坐标集"并非完全等同,但对我们而言,将向量视为文本相对于其他内容的地址是合适的。
相似性
2D图中的"最近"指直线距离。实践中,相似性搜索使用余弦相似度。余弦相似度是另一种衡量文本相似度的方法,基于向量指向方向而非距离。
亲自试试!选择两个来源查看它们的余弦相似度。
来源A
❓ 🦕 🎢 📚
❓ 最佳恐龙过山车?
来源B
❓ 🦕 🎢 📚
🦕 恐龙儿童读物
余弦相似度 0. 2894
-1 相反 0 无关 1 相同
尝试比较Velocicoaster页面和恐龙读物——它们的向量指向截然不同的方向。百科全书位于所有内容之间,这很合理,因为它是万事通但无一精。