Exa AI 发布 BM25 索引优化方案:内存降低 50% 且性能无损
在组织互联网信息以应对复杂查询的使命中,Exa AI 深知传统关键词检索技术的重要性。尽管公司已在语义理解领域取得了显著进展,但其核心搜索架构依然采用混合模式,将关键词与嵌入(Embedding)方法完美结合。为了支撑这一架构在百亿级文档规模下的高效运行,Exa AI 近日宣布了一项重大突破:通过一种新颖的编码方案,成功将 BM25 索引的内存占用降低了 50%,且未牺牲任何检索性能。
优化背景:内存成为扩展瓶颈
随着索引规模的扩大,BM25 索引对内存的需求呈指数级增长。在分布式工作节点上,每处理 10 亿份文档,内存开销便超过 1.8TB,这对云基础设施成本构成了巨大压力。传统的倒排索引结构虽然保证了随机访问的速度,但在存储效率上存在显著浪费:
- 碎片化分配:每个 postings list 都需要独立的内存分配,产生额外开销。
- 冗余存储:文档 ID 使用固定的 32 位整数,即便实际数值较小也占用相同空间。
- 结构填充:Rust 语言下的内存对齐机制导致数据排列效率低下。
- 重复频率:Token 频率(通常在 1-15 之间)被重复存储于每份文档中。
面对这一挑战,Exa AI 团队确立了“每一比特都至关重要”的优化信条,从算法逻辑与数据结构两个维度进行了深度重构。
核心突破:双重优化策略
1. 智能候选选择与动态剪枝
在查询处理阶段,Exa AI 引入了启发式算法以提前筛选高价值文档:
- 基于 IDF 的候选集构建:优先识别查询词中稀有度最高的术语(高 IDF 分数),利用其 postings list 构建初始候选集,实现“影响力排序索引”。
- 阈值动态剪枝:在评分计算过程中,动态剔除那些数学上不可能进入前 N 结果的文档。这一机制灵感源自 WAND 算法,大幅减少了无效计算。
这种策略确保了系统仅在最有可能产生结果的文档上投入计算资源,将检索数千个 Top 结果的延迟控制在 500ms 以内。
2. 内存结构深度压缩
针对存储层面的浪费,团队实施了两项关键技术:
- 基于频率的分组存储:不再为每个
(doc_id, freq)对单独存储,而是将具有相同频率的文档聚合。由于 Token 频率分布范围极窄(1-15),仅需存储一次频率值即可覆盖多个文档,显著消除了冗余。 - 变长 + Delta 编码:利用 postings list 中文档 ID 始终有序的特性,放弃固定 4 字节存储,转而存储相邻 ID 之间的差值(Delta)。结合变长编码技术,文档 ID 的存储空间被大幅压缩。
实际价值与应用场景
此次优化不仅降低了 AWS 等云服务的月度账单,更直接提升了用户体验。
- 成本效益:在同等价格点下,系统可承载更多文档,或同等文档量下大幅降低硬件成本。
- 性能保障:50% 的内存释放并未影响查询速度,反而因减少内存争抢提升了并发处理能力。
- 生态赋能:为开发者提供了更高效的 Exa Search API 与 Agent 接口,使得构建基于混合搜索的智能应用变得更加经济可行。
Exa AI 表示,这一优化标志着其在处理超大规模数据检索方面迈出了关键一步,证明了通过精细化的数据结构设计,可以在不妥协性能的前提下实现巨大的资源节约。
"我们的目标是在不降低性能的前提下,从硬件中榨取每一滴性能。" —— Exa AI Technical Staff