趋近智
我们已经确定,我们的文本文档,或者更准确地说,它们的片段,可以使用嵌入 (embedding)模型转换为数值向量 (vector)。每个向量都存在于一个高维空间 (high-dimensional space)中,它们的位置和方向编码了原始文本的语义信息。那么,我们如何使用这些向量来查找与用户查询相关的信息呢?答案是相似性搜索。
主要的想法很简单:如果两个向量在嵌入空间中“接近”,它们代表的文本片段在语义上很可能相似。当用户提交一个查询(例如,“RAG 有什么好处?”)时,我们首先使用处理我们文档的相同嵌入模型将此查询转换为向量。然后,任务是找出我们集合中与此查询向量最接近或最相似的文档片段向量。
我们如何衡量高维向量 (vector)之间的“接近度”或“相似性”?虽然你可能首先想到欧几里得距离(两点之间的直线距离),但它通常不是衡量文本嵌入 (embedding)中语义相似度的最佳方法。为什么?因为嵌入向量的大小(长度)并不总是与相关性强相关。两个文本片段可能含义相似但长度不同,这可能导致向量的大小不同。
相反,RAG 系统中用于比较文本嵌入的最常用指标是余弦相似度。此指标不测量向量端点之间的距离;它测量两个向量之间夹角的余弦值。
想象两个从原点(0,0,...)开始的向量。如果它们指向完全相同的方向,它们之间的角度是 0°,余弦相似度是 1。如果它们垂直(正交),意味着它们指向不相关的方向,角度是 90°,余弦相似度是 0。如果它们指向相反的方向,角度是 180°,余弦相似度是 -1(尽管在实践中,许多常见的嵌入技术的值通常是非负的,范围从 0 到 1)。
向量 A 和 B 之间的余弦相似度公式是:
这里, 是向量的点积,而 和 是它们的大小(或欧几里得范数)。通过将点积除以大小的乘积,我们对该度量进行归一化 (normalization),使其对向量的长度不敏感,并且完全侧重于它们的指向。这种与指向的一致性通常比距离度量更能有效体现语义关联 (semantic relationship)。
想象一个简化的二维空间,其中我们有一个查询向量 (vector)和几个文档片段向量。
一个二维图显示了一个查询向量(红色)和三个文档向量。向量 1 和 2(蓝色)与查询向量的夹角更小,表明更高的余弦相似度和语义关联 (semantic relationship)度,与向量 3(灰色)相比。
在这个可视化中,与查询向量形成最小夹角的文档向量(文档 1 和文档 2)将具有最高的余弦相似度分数,并被认为是最相关的,即使它们的大小不同。文档 3 指向一个非常不同的方向,因此相似度分数会很低。
因此,使用相似性搜索的检索过程通常包含以下步骤:
k 个文档片段(例如,前 3 个或前 5 个最相似的片段)。k 的值是一个可以调整的参数 (parameter)。尽管将查询向量与可能数百万甚至数十亿个文档向量逐一比较(一种“暴力”或“精确最近邻”搜索)会根据所选指标产生最准确的结果,但对于大型数据集而言,这会变得计算成本高昂且速度缓慢。这种性能挑战正是为什么经常使用称为向量数据库的专门系统。它们使用复杂的索引和搜索算法(如近似最近邻 - ANN)更快地找到高度相似的向量,有时会牺牲少量准确性以换取速度的大幅提高。我们接下来将了解这些数据库。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•