向量检索技术浅析
什么是向量检索
向量检索是将非结构化数据(视频、语音、图像等)通过深度学习技术转化为高维向量,通过最近邻(或k近邻)查询查找相似内容。给定查询向量,在特征数据库中寻找距离查询向量最近(即相似度最高)的k个向量。
近似最近邻查询
高维空间的向量很难进行快速而准确的近邻查询,主要原因包括高维度导致的计算复杂性、维度灾难。近似最近邻查询(ANNS)通过返回近似查询结果,显著提升查询效率(通常为数百倍以上)。目前ANNS使用的最常见距离度量是欧式距离和余弦距离,通常使用召回率(Recall)来衡量ANNS的查询精度。
近邻索引技术
用于ANNS的哈希方法主要是局部敏感哈希,树索引的基本思路是对空间进行划分,并采用树型结构维护空间划分的层次关系。主流的近邻索引技术包括:
- 乘积量化(PQ)与倒排(IVF)
- 近邻图(HNSW)
业务背景
典型检索场景中,检索链路复杂,写入链路复杂,端到端延迟高,数据一致性保障是关键。业务诉求包括:
- 能力支撑:文本检索+向量检索+多维分析
- 成本:尽可能少的使用和接入成本
- 业务开发维护成本:高可靠、高可用、用户友好
- 性能:亚秒/秒级查询延迟,召回率95%+
StarRocks实现向量检索的原理及优化
整体架构
StarRocks实现了基本功能的向量数据库雏形,形成了内部索引库TenANN,集成了业界主流的向量索引HNSW和IVFPQ。
语法设计
向量检索语义与SQL有gap,通过统一表达式构筑SQL,优化时构建成对应的执行计划。
向量索引支持
支持纯向量检索、标量混合向量检索、范围搜索、标量混合范围搜索。
查询过程
查询过程包括查询解析与优化、执行计划优化(将检索语义执行计划树下推到向量索引中)、TopN下推优化、隐式生成列优化、参数优化、检索谓词优化、检索模式优化(暴力检索、近似检索)、查询执行。
查询实现—具体索引的计算实现
例如:Select id, l2_distance(query_vector, vector_column) as score from table order by score limit 10。
查询优化
- Tablet级预排序:通过在Tablet级别进行topK预排序,再分发到Segment内进行物化,可有效减少读放大、计算放大现象,提升4%-23%的查询性能。
- 支持前过滤、混合过滤、迭代式后过滤:引入新的迭代构造模型,支持迭代器之间可自由组合,并支持了新的阻塞迭代方式。
索引写入原理与实现
- 存储级别选型:TabletVectorIndex vs SegmentVectorIndex
- Segment级别索引:每个Segment与一个VectorIndex一一对应,适用于主键表和明细表模型,但rowset/segment过多时会出现读放大和过多地计算合并问题。
- Tablet级别索引:每个Tablet与一个VectorIndex一一对应,适用于主键表,但召回其它列时需要通过pkid多跳召回。
- 索引写入:索引重建包括IVFPQ索引重建,IVFPQ索引的聚类中心需要定期更新,否则聚类效果会变差。
Tenann实现
自研TenANN的原因是多索引集成需求,单一索引库无法满足所有性能与功能要求。TenANN是一个通用、易用、易扩展、高性能的多功能索引库,支持向量、倒排等多种类型的索引,支持所有索引共享同一套使用接口。
RangeSearch
- HNSW RangeSearch:1NNSearch + r->RangeSearch
- IVF-PQ RangeSearch:1NNSearch + r->RangeSearch
BlockCache
TenANN开发的block级别缓存功能,减小IVF-PQ索引无效数据从磁盘加载,实现在小于索引大小的内存容量下加载索引,并避免page_cache之间相互干扰。cache配置为inverted_lists大小的50%,cache命中率约96%,全recall与纯内存基本持平。
ANN-benchmark
HNSW(Faiss) vs HNSW(Tenann)性能优化测试总结。
StarRocks向量检索在腾讯的实践案例
- 案例一:调用链路过长,维护成本较大,整体检索耗时过长:~15s以上。
- 案例二:大数据量下,topK场景仍面临挑战:数据量巨大,K巨大。
挑战及未来规划
高并发场景挑战
- 挑战一:如何在一个OLAP系统上,实现高并发、低延时?
- 并发与QPS并非线性关系,Pipeline计算模式overhead过大。
- 规划:
- Serving/HSAP
- Scatter-GathervsPipeline
大数据量场景挑战
- 挑战二:大数据量下,topK场景仍面临挑战:数据量巨大,K巨大。
- 规划:
- Tablet级别索引/Tablet级别预排序/增量索引构建
RAG场景挑战
- 挑战三:RAG完整支持
- 规划:
- 支持集成文本预处理
- 支持集成数据特征化服务
- 支持自定义重排
- 支持多路召回
- 检索增强:向量索引、关键词表索引、摘要索引等
- 排序和后处理:基于相似度分数进行过滤和排序、基于关键词进行过滤、让LLM基于返回的相关文档及其相关性得分来重新排序、基于时间进行过滤和排序、基于时间对相似度进行加权,然后进行排序和筛选。