13.5 第二代:语义搜索(稠密检索)
后来有了更好的办法:把文本变成一串数字(叫”向量”),语义相近的文本,数字也相近。
“苹果手机”和”iPhone”在向量空间里离得很近——因为它们意思一样。即使用词完全不同,系统也能找到。
13.5.1 稠密检索的原理
这种方法叫语义检索(也叫稠密检索——“稠密”的意思是每个词的含义都被密集地编码成了数字,向量中的每个维度都有值,不像稀疏检索那样大部分维度是 0)。比关键词检索准很多。
稠密检索的核心是 Embedding 模型。它像一个”翻译官”,把人类语言翻译成机器能理解的数字语言。Embedding 模型通常基于 Transformer 架构(BERT 的衍生模型),通过大量文本训练学会了”理解语义”——不是真的理解,而是学会了把语义相似的文本映射到向量空间中相近的位置。
具体来说,Embedding 模型把一段文本(最长 512-8192 token)映射到一个固定维度的向量(通常 768、1024 或 1536 维)。向量的每个维度没有明确的人类可理解的含义,但向量之间的余弦相似度(两个向量夹角的余弦值,越接近 1 表示越相似)能精确反映语义相似度。
13.5.2 向量数据库的演变
但需要提前把所有文档都”向量化”——存到向量数据库里。最早的向量相似度搜索工具是 Facebook 2017 年开源的 Faiss(Facebook AI Similarity Search,一个高性能向量相似度匹配库,擅长在百万级向量中做最近邻搜索)。后来出现了专门为 AI 场景定制的向量数据库:Milvus(开源分布式向量数据库,适合大规模生产环境,支持十亿级向量检索)和 Pinecone(商业云服务,开箱即用免运维,按用量付费)1。
向量数据库的演变从更早开始:Elasticsearch(一个基于 Lucene 的分布式全文搜索引擎,2010 年发布,最早被企业广泛用于日志搜索和文档检索,后来也加入了向量搜索功能)是最早被用来做检索的,后来 Faiss 把向量相似度搜索做到极致,再后来 Milvus、Pinecone 等专门为 AI 场景优化了向量存储 2; 3。
向量数据库的核心技术是 ANN(近似最近邻)搜索。精确最近邻搜索在百万级向量中太慢,ANN 牺牲了一点精度(99% 的精度就够了),换来了数量级的速度提升。主流 ANN 算法包括 HNSW(分层可导航小世界图,基于图的最流行算法)和 IVF(倒排文件索引,先聚类再搜索,适合超大规模数据集)。
13.5.3 稠密检索的优缺点
优点:语义理解能力强。“如何提升团队士气”能匹配到”员工激励的五个方法”——即使用词完全不同。支持跨语言搜索——中文问题能匹配到英文文档(如果 Embedding 模型支持多语言)。对拼写错误和同义词有天然的鲁棒性。
缺点:对专有名词和精确匹配不敏感。“AK-47”和”AK47”在向量空间里可能不够近(取决于 Embedding 模型的训练数据)。对数字不敏感——“2024 年”和”2025 年”在向量空间里可能很近(因为上下文相似),但这两个年份的答案完全不同。而且 Embedding 模型是”黑盒”——你不知道它为什么认为两段文本相似,调试困难。
2026 年的定位:稠密检索是 RAG 系统的主力检索方式,但单独使用已不足以应对所有场景。
← 上一节:13.4 第一代:关键词搜索(稀疏检索) | 下一节:13.6 第三代:混合检索 →
注释
-
Meta, “Faiss: A library for efficient similarity search”, 2017 ↩
-
Elastic, “Vector Search”, https://www.elastic.co/search-labs/cn/blog/introduction-to-vector-search ↩
-
火山引擎, “AI 跑车引擎——向量数据库”, https://developer.volcengine.com/articles/7382278528115343369 ↩
关联5
知识图谱局部图谱 · 点节点跳转