这三个概念是知识库检索和 RAG 系统里最核心的匹配策略。理解它们,关键要抓住一个核心问题:怎么判断两段文字"像不像"?
🎯 一句话理解三者
- 关键词相似度 :看两段文字有没有相同的词。像查字典,按字面匹配。
- 向量相似度 :看两段文字意思像不像。像理解语义,按含义匹配。
- 混合相似度 :把上面两种结合起来,既看字面又看语义,取长补短。
📖 关键词相似度(Keyword Similarity)
是什么 :基于字面词汇的匹配。它把文本看成词的集合,通过统计共同出现的词来判断相似程度。最经典的是 BM25 算法,以及早期的 TF-IDF。
怎么理解 :就像你用 Ctrl+F 在文档里搜关键词。两段文字共有的词越多、这些词越重要(越罕见),相似度就越高。它不理解语义,只认字面。
示例:
| 文本 A | 文本 B | 关键词相似度 | 原因 |
|---|---|---|---|
| "苹果手机电池续航" | "iPhone 电池能用多久" | 低 | 只有"电池"一个词重合,"苹果"和"iPhone"字面不同 |
| "苹果手机电池续航" | "苹果手机电池容量" | 高 | 共有"苹果""手机""电池"三个词 |
| "如何退款" | "怎么退货" | 低 | 字面几乎没有重合词 |
优点 :精确、可解释、对罕见词和专有名词(如型号、代码、人名)非常敏感。
缺点:无法处理同义词、近义词、换一种说法的情况。
🧠 向量相似度(Vector Similarity)
是什么 :基于语义的匹配。它把文本通过 Embedding 模型转换成一串数字(向量),再计算两个向量在空间中的距离或夹角。常用算法是余弦相似度。
怎么理解 :把每段文字想象成高维空间里的一个点,意思相近的文字,它们的点就靠得近。它理解语义,但可能忽略精确的字面细节。
示例:
| 文本 A | 文本 B | 向量相似度 | 原因 |
|---|---|---|---|
| "苹果手机电池续航" | "iPhone 电池能用多久" | 高 | 语义上都在问手机电池使用时长 |
| "如何退款" | "怎么退货" | 高 | 语义上都是想退掉商品 |
| "苹果手机电池续航" | "苹果公司财报" | 低 | 虽然都有"苹果",但语义主题完全不同 |
优点 :能处理同义词、换述、跨语言匹配,理解能力强。
缺点:对精确的专有名词、数字、代码不敏感;可能出现"语义相近但事实错误"的匹配;依赖 Embedding 模型的质量。
🔀 混合相似度(Hybrid Similarity)
是什么 :把关键词相似度和向量相似度结合起来,通常做法是分别计算两种分数,再通过加权或排序融合(如 RRF,Reciprocal Rank Fusion)得到最终结果。
怎么理解:相当于同时派两个检索员去找资料------一个按字面找,一个按语义找,最后把两人的结果合并排序。这样既能抓住精确匹配,又不漏掉语义相关的内容。
示例:
假设知识库里有三段文档,用户问"iPhone 电池续航怎么样":
| 文档 | 关键词分数 | 向量分数 | 混合后 |
|---|---|---|---|
| "iPhone 电池续航实测" | 高 | 高 | 最高 |
| "苹果手机电池能用多久" | 低(字面不同) | 高(语义相近) | 较高 |
| "苹果公司发布新财报" | 低 | 低 | 最低 |
如果只用关键词,第二段会被漏掉;如果只用向量,可能把第三段误判。混合策略能同时避免这两个问题。
优点 :兼顾精确性和语义理解,是目前 RAG 系统的主流方案。
缺点:实现更复杂,需要调权重、做分数归一化,计算成本也更高。
📊 三者对比总结
| 维度 | 关键词相似度 | 向量相似度 | 混合相似度 |
|---|---|---|---|
| 匹配依据 | 字面词汇 | 语义含义 | 两者结合 |
| 典型算法 | BM25、TF-IDF | 余弦相似度、Embedding | RRF、加权融合 |
| 同义词处理 | 差 | 好 | 好 |
| 专有名词/数字 | 好 | 差 | 好 |
| 可解释性 | 强 | 弱 | 中 |
| 计算成本 | 低 | 中高 | 高 |
| 典型场景 | 精确搜索、代码检索 | 语义问答、跨语言 | 生产级 RAG |
💡 实际应用中怎么选
- 只用关键词:适合对精确性要求极高的场景,比如搜代码、搜法律条文、搜产品型号。
- 只用向量:适合开放式的语义问答,比如客服机器人、知识库问答。
- 用混合:生产环境的 RAG 系统通常默认选这个,因为真实用户的提问方式千变万化,单一策略很难覆盖全。
一个常见的落地做法是:先用混合相似度召回一批候选文档,再用 Rerank 模型做精排,这样既能保证召回率,又能提升最终排序的准确性。