余弦相似度是一种数学度量,它通过确定两个向量之间的角度的余弦值来计算它们之间的相似度。它的范围从 -1(完全相反的方向)到 1(相同的方向),0 表示正交(没有相似度)。 在实践中,它通常与归一化向量一起使用,其中结果仅取决于向量的方向,而不取决于它们的大小。 例如,如果两个文本嵌入(文本的数值表示)在高维空间中指向相同的方向,它们的余弦相似度将接近 1,表明它们在语义上相似。 如果它们不相关,它们之间的角度会变大,从而降低余弦值。
在语义搜索中,余弦相似度用于比较查询的含义与文档或其他文本片段的含义的匹配程度。 这是因为现代自然语言处理 (NLP) 模型(如 BERT 或句子转换器)会将文本转换为密集向量嵌入,其中语义相似的文本在向量空间中位置更接近。 例如,像“健康的饮食习惯”这样的搜索查询会转换为一个向量,系统会计算该向量与所有存储文档的预先计算的向量之间的余弦相似度。 关于“营养技巧”或“均衡饮食”的文档将具有较高的余弦相似度得分,而关于“汽车维护”的文档得分会较低。 通过关注向量之间的角度,余弦相似度忽略了向量长度的差异,这很有用,因为文本长度(例如,短查询与长文章)本质上不会影响语义相关性。
余弦相似度在语义搜索中的主要优势在于其效率以及对语义意义而非字面术语匹配的关注。 与无法捕捉同义词或相关概念(例如,“汽车”与“车辆”)的精确关键词搜索不同,余弦相似度通过比较向量中编码的整体上下文来处理此问题。 与欧几里得距离等替代方法相比,它的计算量也很轻,尤其是在向量经过预归一化(将计算简化为简单的点积)时。 例如,使用余弦相似度的搜索引擎可以快速按相关性对数百万个文档进行排名,而无需在查询期间重新计算向量大小。 这种准确性和速度的平衡使其成为推荐系统、聊天机器人或文档检索等实际应用的实用选择,在这些应用中,理解意图至关重要。