内容提要
Constella 提出可替换查询模型的检索方案:文档用 Stella 编码一次,查询可用 Zero、Nano 或 Stella 编码,共用同一向量库,无需重新嵌入。Nano 保留 Stella 约 91% 的平均得分,Zero 更快但精度较低。在 15 个 BEIR 数据集上,Nano 查询速度约为 Stella 的 12 倍,Zero 约 480 倍。适合离线搜索、高并发 API 和边输入边搜等场景。
延伸解读
查询模型热替换的工程意义
Constella 的核心创新在于文档向量与查询向量解耦:文档用 Stella 编码一次后,查询端可自由切换 Zero、Nano 或 Stella,而无需重新嵌入整个集合。这解决了实际部署中因查询模型升级或成本调整而必须重建索引的痛点,尤其适合文档库庞大、重新嵌入代价高的场景。
精度与速度的权衡选择
在 15 个 BEIR 数据集上,Nano 保留了 Stella 约 91% 的平均得分,查询速度却快约 12 倍;Zero 速度极快(约 480 倍),但精度损失更大。值得注意的是,Zero 在 FEVER、HotpotQA 等数据集上甚至超过 Nano,说明模型选择需结合具体任务。建议在实际数据上测试后再决定。
混合搜索与低功耗部署
文章推荐将 Zero 与 BM25 结合用于混合搜索,以弥补纯向量检索的不足,且无需在查询路径中增加 Transformer。此外,Constella 适合离线搜索、高并发 API 和边输入边搜等场景:例如用 Zero 处理每次击键,用户暂停时再切换 Nano,从而平衡响应速度与结果质量。
研究预览阶段的注意事项
Constella 目前是研究预览版,尚未正式发布。评估中存在训练污染警告:Stella 对部分数据集有训练或评估暴露,Zero 和 Nano 又学习自 Stella,因此这些分数应视为家族内比较,而非完全未见数据上的测试。实际部署前需在自己的数据上验证,并关注后续正式版更新。
Q&A
Constella 是什么?它解决了什么问题?
Constella 是一个基于 Stella 的模型家族,允许在不重新嵌入文档的情况下替换查询编码模型。文档用 Stella 编码一次后,查询可以用 Zero、Nano 或 Stella 编码,共用同一个向量库,从而降低查询端的计算成本。
Constella 的 Zero 和 Nano 查询模型有什么区别?
Zero 是学习到的词袋模型,仅做 token 查找、池化和归一化,速度快但丢失词序;Nano 是 34.5M 参数的 transformer,能建模上下文和位置信息,精度更高但比 Zero 慢。
Constella 在 BEIR 数据集上的检索效果如何?
在 15 个 BEIR 数据集上,Nano 平均保留了完整 Stella 约 91% 的得分,Zero 整体得分较低,但在 FEVER、HotpotQA 和 Climate-FEVER 上超过 Nano。
Constella 的查询速度比完整 Stella 快多少?
在 Apple M5 Pro CPU 上,Nano 的查询速度约为完整 Stella 的 12 倍,Zero 约为 480 倍。
Constella 适合哪些应用场景?
适合离线搜索(低功耗设备)、高并发检索 API、边输入边搜(如每次击键用 Zero,暂停时用 Nano)、需要反复检索的智能体,以及无需 transformer 的混合搜索(Zero 搭配 BM25)。
如何使用 Constella?需要重新嵌入文档吗?
不需要重新嵌入文档。使用标准 Qdrant + FastEmbed 设置,先用 Stella 编码文档并存储向量,然后通过更改模型名称即可切换查询编码器(如从 Zero 切换到 Nano),查询代码和向量库保持不变。