1. 语义相似度评分机制解析
在构建RAG(检索增强生成)系统时,语义相似度评分是决定检索质量的核心环节。这个看似简单的数值背后,实际上涉及向量空间中的复杂数学运算和语义理解机制。作为从业者,我们需要深入理解不同评分方式的特性和适用场景,才能在实际项目中做出合理选择。
1.1 向量嵌入的本质
文本被转换为向量后,每个维度代表某种潜在的语义特征。以"苹果手机"和"种植苹果"为例:
- 虽然都包含"苹果"这个词
- 但在向量空间中可能位于完全不同的区域
- 因为它们的上下文语境和实际含义截然不同
这种特性使得基于向量的语义检索能够超越简单的关键词匹配,实现真正的语义理解。当我们将查询语句"早上打电话"转换为向量时,它会自然地靠近"iPhone"相关文档而非"水果种植"文档,尽管两者都包含"苹果"这个表面词汇。
关键提示:好的嵌入模型应该能将语义相近但用词不同的内容映射到相邻区域,同时将用词相同但语义不同的内容分开。这就是为什么模型选择(如qwen3-embedding)对结果质量至关重要。
1.2 三种核心评分方式对比
在实际操作中,我们主要使用三种度量方式:
| 度量方式 | 数学本质 | 值域范围 | 最佳场景 | 计算示例 |
|---|---|---|---|---|
| 余弦相似度 | 向量夹角余弦 | [-1,1] | 语义相关性优先 | (A·B)/(|A||B|) |
| 欧氏距离 | 空间直线距离 | [0,∞) | 精确数值匹配 | √Σ(Ai-Bi)² |
| 内积 | 向量投影长度 | (-∞,∞) | 归一化后高效计算 | Σ(Ai×Bi) |
实测中发现一个有趣现象:当使用归一化后的嵌入向量时,内积结果会与余弦相似度完全一致。这是因为:
code复制IP = A·B = |A||B|cosθ
当|A|=|B|=1时,IP = cosθ
这也是为什么在示例代码中,ip和cosine的输出结果完全相同。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 实战配置与代码详解
2.1 环境初始化关键点
建立多评分标准的向量库时,有几个配置细节需要注意:
python复制# 嵌入模型配置示范
embeddings = Ollama[Embedding](https://taotoken.net?utm_source=ai)s(
