Qdrant中的双曲嵌入

Qdrant中的双曲嵌入

💡 原文英文,约1900词,阅读约需7分钟。
📝

内容提要

本文介绍双曲嵌入在Qdrant中的应用。双曲空间适合表示层级数据,比欧氏空间更高效:5维Poincaré嵌入在商品分类上达到0.905 MAP,优于50维欧氏嵌入的0.658。但直接使用HNSW索引会导致召回率下降,需先用HNSW预取候选,再通过Formula Query按真实双曲距离重排,召回率从0.266提升至0.920。

🔎

延伸解读

双曲嵌入的适用场景与优势

双曲空间适合表示层级数据,如商品分类、生物分类等。在Google Product Taxonomy上,5维Poincaré嵌入达到0.905 MAP,而50维欧氏嵌入仅0.658 MAP,说明双曲几何能用更少维度高效捕捉树状结构。但需注意,这些结果基于训练中见过的关系,预测直接父类时MAP降至0.539,因此并非通用优势,仅建议在数据本身具有层级时尝试。

直接使用HNSW索引的陷阱

将双曲距离转换为内积后直接使用HNSW索引会导致召回率大幅下降。在WordNet数据集上,暴力搜索recall@10为0.986,但HNSW降至0.020,即使ef=1024。原因是转换后的向量范数分布范围约600倍,使HNSW难以有效排序。按范数分组可提升至0.410,但仍不理想。因此,不应直接将转换后的向量交给HNSW索引。

Qdrant中的两阶段检索策略

Qdrant采用预取加重排的策略:先用欧氏HNSW从原始Poincaré坐标中检索候选集,再用Formula Query按真实双曲距离重排。在5,595个分类点上,预取1,000时recall@10从0.266提升至0.920。需注意,预取大小至关重要,若正确邻居未进入候选集,重排无法恢复。此外,嵌入质量提升时,预取通常需要加宽,因为更好的嵌入会将点推向Poincaré球边缘,使欧氏距离作为捷径更不可靠。

❓

Q&A

双曲嵌入为什么适合表示层级数据?

双曲空间具有负曲率,其体积随半径指数增长,与树状层级结构的节点增长方式匹配。而欧氏空间体积多项式增长,深层分支会拥挤。因此双曲嵌入能更自然地表示层级关系。

双曲嵌入在维度效率上有什么优势?

在WordNet名词层级重建任务中,5维Poincaré嵌入达到0.823 MAP,而200维欧氏嵌入仅0.168 MAP,说明双曲嵌入能用少得多的维度达到更好效果。

在Qdrant中如何正确使用双曲嵌入进行搜索?

不应直接将转换后的向量用HNSW索引,因为会导致召回率骤降。正确做法是:将Poincaré坐标存储为普通欧氏向量,并用HNSW预取候选,然后通过Formula Query按真实双曲距离重排。

为什么直接用HNSW索引双曲嵌入会导致召回率下降?

将双曲距离转换为内积后,向量范数分布范围极大(约600倍),使得HNSW的近似搜索效果变差,召回率@10从暴力搜索的0.986降至0.020。

使用Formula Query重排后召回率提升多少?

在Google Product Taxonomy数据集上,仅用欧氏HNSW召回率@10为0.266,使用预取1000个候选并通过Formula Query重排后,召回率@10提升至0.920。

双曲嵌入的半径有什么特殊含义?

在双曲嵌入中,半径可以编码概念的 specificity(具体程度)。靠近中心表示宽泛概念,远离中心表示更具体的后代,方向则区分不同分支。

双曲嵌入在商品分类任务上的表现如何?

在Google Product Taxonomy上,5维Poincaré嵌入达到0.905 MAP,而50维欧氏嵌入仅0.658 MAP,表明双曲嵌入在层级分类任务上更高效。

使用双曲嵌入时需要注意哪些限制?

双曲嵌入在训练时见过的关系上表现好,但预测未见过的直接父节点时性能下降(如从0.905降至0.539 MAP)。此外,嵌入质量提升后,可能需要扩大预取范围,因为欧氏距离在Poincaré球边缘变得不可靠。

🏷️

标签

➡️

继续阅读