使用Sentence Transformers生成的Embeddings做语义搜索,最佳距离度量是什么?是否有共识?
对比Sentence Transformers生成的语义向量,哪种距离度量方法最佳?
对于Sentence Transformers生成的语义相似度向量,余弦相似度(Cosine Similarity)是绝对的首选,行业里已经有普遍共识。
原因很直接:
- Sentence Transformers的训练逻辑就是围绕余弦相似度设计的——训练时会刻意让语义相似的文本向量方向更接近(余弦相似度更高),不相似的则方向偏离(余弦相似度更低),模型输出的向量天生适配这种计算方式。
- 余弦相似度只看向量的方向是否一致,不管向量的绝对值大小,这刚好踩中语义相似度的核心需求:我们要比的是文本语义匹配程度,不是向量数值的规模。
- 不管是官方推荐还是社区实际落地,绝大多数语义匹配、文本检索这类场景,全都是用余弦相似度。
至于其他方法:
- 欧氏距离:如果向量提前做了归一化,结果和余弦相似度是等价的,但没归一化的话,向量模长会干扰结果,不适合直接用来比语义相似度。
- 曼哈顿距离这类:低维数据可能偶尔能用,但在高维的语义向量场景下,效果远不如余弦相似度,基本没人用。
内容的提问来源于stack exchange,提问作者morpheus
相关产品推荐
相关产品推荐

