语义搜索是现代搜索与关键词搜索相比如此强大的原因。它支撑着 RAG 系统、文档搜索、电商产品发现和工单路由。如果你正在构建任何需要查找相关信息的应用程序,语义搜索可能是正确的方法。
流程如下:(1) 使用 BGE、E5 或 Voyage 等模型将文档编码为嵌入向量,(2) 将这些嵌入向量存储在向量数据库中(Pinecone、Qdrant、Weaviate、pgvector),(3) 当查询到来时,用同一模型对其进行编码,(4) 使用余弦相似度或点积等相似性度量找到最近的嵌入向量。查询"如何修复内存泄漏"会匹配到标题为"调试 Node.js 中 RAM 消耗"的文档,因为它们的嵌入向量在向量空间中非常接近。
纯语义搜索有一个弱点:它可能会遗漏关键词搜索能轻松捕获的精确匹配。如果有人搜索错误代码"ERR_SSL_PROTOCOL_ERROR",语义搜索可能返回一般的 SSL 故障排除指南,而非精确的错误信息。混合搜索结合了两者:关键词匹配(BM25)提供精确度,语义搜索提供召回率,然后合并结果。大多数生产环境中的搜索系统都使用混合方式。
语义搜索的质量完全取决于嵌入模型。通用模型(OpenAI 的 text-embedding-3、Cohere Embed)适用于大多数文本。领域特定模型(在医学、法律或代码数据上训练)在其领域内优于通用模型。多语言模型支持跨语言搜索。MTEB 排行榜在多项任务上对嵌入模型进行基准测试——它是选择嵌入模型的最佳资源。