语义搜索
语义搜索概述
语义搜索是基于文本语义含义而非关键词匹配的搜索技术。通过将文本编码为向量表示,语义搜索能够理解查询的真实意图,找到语义相关但可能不包含查询关键词的结果。
核心技术
文本向量化
使用嵌入模型将文本转换为向量:
- 查询文本 → 查询向量
- 文档文本 → 文档向量
- 向量维度通常为768-4096
相似度计算
基于向量距离衡量语义相似性:
- 余弦相似度(最常用)
- 内积
- 欧氏距离
向量索引
高效检索海量向量的索引结构:
- HNSW:分层可导航小世界图,最常用
- IVF:倒排索引,适合大规模数据
- PQ:乘积量化,压缩向量节省内存
检索流程
- 文档索引:将文档库编码为向量并建立索引
- 查询编码:将用户查询编码为查询向量
- 近邻搜索:在向量索引中搜索最近邻
- 结果排序:根据相似度分数排序返回
优势
- 语义理解:理解同义词和概念相似性
- 跨语言:多语言嵌入支持跨语言检索
- 泛化能力:即使没有精确关键词也能找到相关结果
局限性
- 精确匹配不足:对精确术语匹配不如关键词搜索
- 长文本挑战:长文档的向量表示可能丢失细节
- 领域迁移:通用嵌入模型在特定领域可能效果下降
- 新鲜度:需要重新索引才能反映最新内容
向量数据库
主流选择
- Pinecone:全托管向量数据库
- Weaviate:开源向量搜索引擎
- Milvus:高性能分布式向量数据库
- Qdrant:Rust编写的高性能向量数据库
- Chroma:轻量级嵌入数据库
- pgvector:PostgreSQL扩展
选择考虑
- 数据规模和增长预期
- 延迟和吞吐要求
- 部署环境和运维能力
- 额外功能需求(过滤、混合搜索等)
优化技巧
- 选择适合领域的嵌入模型
- 对长文档进行分段索引
- 使用元数据过滤缩小搜索范围
- 定期更新索引保持数据新鲜
- 监控检索质量持续优化
语义搜索是现代信息检索的核心技术,也是RAG系统的基础设施。