Semantic Search

语义检索

基于向量相似度而非关键词的检索方式。

详解

语义检索(Semantic Search)是指用 embedding 向量的相似度来匹配内容,而不是看文字是否完全重合。传统关键词搜索(如 BM25)依赖词频统计——文档里没有出现查询词就找不到;语义检索把查询和文档都转成向量,即使用词不同,只要含义相近("汽车"和"轿车","心肌梗死"和"心脏病发作")就能匹配上。这是 RAG 能够理解用户意图而非死板关键词匹配的根本原因。语义检索的质量上限由 embedding 模型的好坏决定——专业领域(医疗、法律)往往需要在领域数据上微调的专用 embedding 模型,通用模型效果会打折扣。语义检索的弱点是对精确词汇(身份证号、SKU 编码、API 名称)的匹配不如关键词检索,因此生产场景多用混合检索。

一个类比
关键词搜索像图书馆目录卡,只认书名里的字;语义检索像一个读过所有书的图书管理员——你说"我想找讲宇宙起源的书",他会把《时间简史》、《宇宙的结构》和《大爆炸宇宙论》都取出来,即使你没说出任何一个书名。
举个例子
同一个问题,关键词 vs. 语义检索的结果对比:

查询:"如何让电脑跑得更快"

关键词搜索命中(BM25):
  ✓ "如何让电脑跑得更快的 10 个技巧"  ← 标题完全匹配
  ✗ "清理磁盘碎片提升系统性能"        ← 没有"更快"这个词
  ✗ "内存不足导致系统卡顿的解决方案"  ← 关键词对不上

语义检索命中(向量相似度):
  ✓ "如何让电脑跑得更快的 10 个技巧"  相似度 0.94
  ✓ "清理磁盘碎片提升系统性能"        相似度 0.88
  ✓ "内存不足导致系统卡顿的解决方案"  相似度 0.85
语义检索理解"跑得更快"≈"性能提升"≈"卡顿解决"。
PYTHON 示例
相关概念