Qdrant

Hyperbolic Embeddings in Qdrant

8.5内容质量

TL;DR · AI 摘要

双曲嵌入在处理层次结构数据时比传统欧几里得嵌入更高效,且在WordNet案例中表现优异。

核心要点

  • 双曲嵌入在WordNet案例中,5维精度0.823远超200维欧几里得嵌入的0.168
  • 双曲空间体积随半径指数增长,适合分支结构数据
  • 双曲嵌入减少存储需求,提升检索系统效率

结构提纲

按章节快速跳转。

  1. 嵌入空间选择影响几何特性,传统方法多采用欧几里得空间。

  2. 欧几里得、球面和双曲空间分别适用于不同数据特性。

  3. 双曲空间指数增长特性匹配分支结构数据扩展需求。

  4. 维度效率提升和半径作为特异性度量是核心优势。

  5. ›WordNet案例

    5维双曲嵌入精度达0.823,200维欧几里得仅0.168。

  6. 双曲嵌入在层次结构数据处理中具有显著工程价值。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • 双曲嵌入在Qdrant中的应用
    • 几何空间比较
      • 欧几里得空间
      • 球面空间
      • 双曲空间
    • 层次结构数据处理
      • 指数增长特性匹配
    • 应用案例
      • WordNet精度对比

金句 / Highlights

值得收藏与分享的关键句。

#双曲嵌入#Qdrant#欧几里得空间#层次结构数据
打开原文

Qdrant 中的双曲嵌入

返回嵌入研究

Matin Mahmood 和 John Kupchanko

·

2026 年 9 月 8 日

我们选择嵌入模型、维度和索引。几何通常与这些工具打包在一起。但为什么使用平坦空间?我们还可以选择什么?

什么是流形,我们的向量又生活在何处?

流形是我们的嵌入所处的空间。对于嵌入来说,我们关心赋予该空间的几何特性。它决定了我们如何测量距离、最短路径的形态,以及随着向外扩展时空间的容量。

欧几里得空间、球面空间和双曲空间。双曲空间通过洛伦兹模型展示。

嵌入仍然是一个向量。几何决定了我们如何测量向量之间的距离。

| 空间 | 几何特性 | 自然示例 | |------------|--------------|------------------------| | 欧几里得 | 平坦 | 连续的位置和属性 | | 球面 | 正曲率 | 角度或周期性数据 | | 双曲 | 负曲率 | 分支层次结构 |

许多熟悉的嵌入模型会将向量归一化到球面上,并使用余弦相似度。双曲嵌入采用不同的几何特性,这种特性特别适合处理分支关系。

分层数据与双曲嵌入的结合

想象一个产品目录。鞋类分为靴子、运动鞋和凉鞋。靴子又细分为踝靴、登山靴和工作靴。每种类型包含产品,每个产品可能有多个变体。

每个节点有三个子节点的目录在深度 $\ell$ 时会以 $3^\ell$ 的速度增长。

树状结构呈指数级增长,而平坦圆盘仅呈平方级增长。

在 $d$ 维欧几里得空间中,半径 $r$ 内的体积呈多项式增长:

$$ V_E(r) \propto r^d. $$

在曲率 $-1$ 的二维双曲空间中,面积为:

$$ A_H(r)=2\pi(\cosh r-1), $$

当 $r$ 很大时,面积呈指数级增长。

这种增长模式与分支树的扩展更加吻合。随着层次结构加深,双曲空间持续为后代节点创造空间。而在平坦空间中,分支会越来越拥挤。

相同的分支结构出现在生物分类学、文档层次结构以及部分与整体关系中。双曲嵌入为这些层次结构提供了扩展空间。

双曲嵌入的超能力

将几何特性与数据匹配可以使嵌入更加紧凑,并赋予坐标更明确的含义。两个有用的示例是维度效率和半径作为特异性度量。

维度效率

当几何特性与数据匹配时,通常可以用更少的维度表示相同的结构。

WordNet 提供了一个具体案例。其名词层次结构包含如 poodle → dog → animal 的关系。我们可以比较欧几里得和双曲嵌入在不同维度下重建这些关系的效果。[1]

通过平均精度均值(数值越高越好)衡量 WordNet 重建效果。结果来自表 1。[1]

五维的庞加莱嵌入达到了 0.823,而 200 维的欧几里得嵌入仅为 0.168。在该任务中,双曲嵌入的坐标数量减少了 40 倍,重建效果却更优。

更少的坐标意味着存储和检索系统中需要处理的数值更少。在选择更高维向量之前,值得思考是否不同的几何特性能更好地匹配数据。

半径可编码特异性

层次感知的双曲嵌入最迷人的特性之一是半径可以开始表达具体含义。

更靠近中心的位置可以放置宽泛的概念,而距离中心越远的位置则可以放置更具体的子概念。方向用于区分分支;半径有助于组织深度。

对于商品目录而言,“footwear”(鞋类)涵盖了众多可能的商品。“Boots”(靴子)缩小了这一范围,而“Red leather ankle boots”(红皮踝靴)则进一步缩小范围。一种能够捕捉这种结构的表示方式,可以同时容纳语义相似性和不同层次的细节。

Hyper3-CLIP 是 hyper³labs 开发的双曲图像和文本嵌入模型,将这一理念应用于视觉检索[7]。该模型经过训练,能够捕捉从一般到具体的关联关系以及相似性。这使半径在组织宽泛描述和具体视觉内容方面发挥了作用[2]。它延续了早期关于双曲图像和文本表示的研究[3]。

请看下方的黑色切尔西靴。向原点移动的过程展示了从具体产品到更广泛概念的转变:黑色切尔西靴 → 切尔西靴 → 靴子 → 鞋类。

受亚马逊伯克利物体目录产品启发的概念性遍历。产品图像为AI绘制;描述和位置仅为示意,不代表模型检索结果[6]。

我们也可以观察模型如何组织产品图像。下方是传统 CLIP[8] 和 Hyper3-CLIP 对相同目录子集的嵌入表示。

通过传统 CLIP 和 Hyper3-CLIP 嵌入的 UMAP[9] 投影,展示了 165 张亚马逊伯克利物体产品图像在六个类别中的分布。颜色标识产品类型。这些投影展示了邻域关系;它们并不衡量具体性或建立检索质量。

测试双曲嵌入

WordNet 有助于说明为什么双曲嵌入有效,但我们还想看看在接近实际应用的数据上会发生什么。因此我们在 Google 产品分类上测试了相同的理念:5,595 个类别,7 层结构,17,312 个关系[11]。

两种嵌入使用了相同的数据和优化器。主要区别在于几何形状。

我们使用平均精度均值(MAP)进行评估。它衡量每个类别的真实父类在检索结果中的排名位置。数值越高越好,1.000 MAP 表示所有父类都排在第一位。

维度

欧几里得 MAP

庞加莱 MAP

2

0.140

0.501

5

0.239

0.905

10

0.354

0.925

20

0.551

0.932

50

0.658

0.934

仅在 5 维时,庞加莱嵌入就达到了 0.905 MAP。而欧几里得版本在 50 维时才达到 0.658 MAP,使用的坐标数量是前者的十倍。

这才是关键所在。当数据确实像树状结构那样分支时,双曲几何可以更高效地表示这种结构。

有一个局限性。这些数值衡量的是嵌入在训练期间已经见过的关系。当我们要求它查找每个类别的直接父类时,得分下降至 0.539 MAP。

因此我们不会将其视为通用的胜利。我们会将其视为一个强有力的依据:当数据本身具有层次结构时,应测试双曲嵌入。

使用 Qdrant 提供服务

获得良好的嵌入表示只是问题的一半。接下来的问题是如何进行搜索。

通过添加两个额外维度,双曲距离可以转换为内积。在 Faiss 的暴力搜索中,这种方法效果良好。在 82,115 个 WordNet 名词中,它在前 10 个结果中找到了 0.986 的正确最近邻,我们将其表示为 recall@10。

然后我们将相同的向量输入HNSW。即使设置ef=1024,召回率@10也下降到0.020。

转换过程在数学上是正确的,但生成的向量范数分布在约600倍的范围内。这使得HNSW无法满足我们实际需要的排序需求。

按范数对向量进行分组有所帮助,但召回率@10仅达到0.410。

因此,我们没有强行将转换后的向量塞入HNSW,而是改变了搜索策略。

集合将双曲坐标存储为普通欧几里得向量,并在payload中保存每个点的平方范数:

code
client
.
create_collection
(
"taxonomy_geometry"
,
vectors_config
=
{
"hyperbolic"
:
models
.
VectorParams
(
size
=
5
,
distance
=
models
.
Distance
.
EUCLID
),
},
)
client
.
create_payload_index
(
"taxonomy_geometry"
,
"sq_norm"
,
field_schema
=
models
.
PayloadSchemaType
.
FLOAT
,
)

没有这个payload索引,重排序将退化为全表扫描。

Qdrant首先使用欧几里得HNSW从原始双曲坐标中提取候选集。然后在同一请求中,通过公式查询使用真实的双曲距离对这些候选进行重新排序。[5]

测地线(即曲空间中两点之间的最短路径)是真实的双曲距离。计算它需要使用反双曲余弦函数acosh,而公式查询不支持这个运算符。[4] 但它支持ln和sqrt,由于acosh(x) = ln(x + sqrt(x² - 1)),因此距离可以按现有形式表达。内部计算式为:

code
{
"sum"
:
[
1.0
,
{
"div"
:
{
"left"
:
{
"mult"
:
[
2.0
,
{
"pow"
:
{
"base"
:
"$score"
,
"exponent"
:
2.0
}}]},
"right"
:
{
"mult"
:
[
0.0488
,
{
"sum"
:
[
1.0
,
{
"neg"
:
"sq_norm"
}]}]}
}}]
}

$score是预取阶段已计算的欧几里得距离,sq_norm来自payload。0.0488是查询平方范数的1减值,需在发送请求前计算。此处的向量是"Animals & Pet Supplies"的存储点,其平方范数为0.9512。将该值记为x,查询表达式为:

code
{
"prefetch"
:
[{
"query"
:
[
-0.3189
,
0.9057
,
-0.0140
,
0.1646
,
-0.0439
],
"using"
:
"hyperbolic"
,
"limit"
:
1000
}],
"query"
:
{
"formula"
:
{
"neg"
:
{
"ln"
:
{
"sum"
:
[
x
,
{
"sqrt"
:
{
"sum"
:
[{
"pow"
:
{
"base"
:
x
,
"exponent"
:
2.0
}},
-1.0
]}}
]}}
}},
"limit"
:
10
}

我们在包含所有5,595个分类点的实时Qdrant集合上进行了测试。

| Prefetch | 欧几里得仅 | 重排序后 | |---------|----------|--------| | 100 | 0.266 | 0.257 | 0.472 | | 300 | 0.598 | 0.783 | | 1000 | 0.920 |

单独使用欧几里得HNSW只能找到约四分之一的正确双曲邻居。当预取1000个候选并使用公式查询重排序时,召回率@10达到0.920。整个搜索过程仍可在Qdrant中通过一次服务器端请求完成。

预取大小至关重要。如果正确的邻居从未进入候选集,重排序无法恢复它们。

还有一个权衡因素。随着嵌入质量提升,预取范围通常需要扩大。

离线比较两个嵌入时,MAP值为0.905的更强嵌入从50个预取中恢复了0.498的真实邻居,而MAP值为0.724的较弱嵌入恢复了0.789的真实邻居。这些离线数值略高于实时索引返回的结果,因为HNSW是近似算法。

更好的双曲嵌入会将更多点推向庞加莱球的边缘,此时欧几里得距离作为快捷方式的效果减弱。因此,如果改进了嵌入,也需要重新测试检索设置。

探索结果

Takeaways

如果数据本身具有自然的层次结构,我们建议在直接采用高维欧几里得嵌入之前,先尝试使用小规模的双曲嵌入进行测试。在产品分类数据集中,5维的庞加莱嵌入达到了0.905 MAP值,而50维的欧几里得嵌入仅达到0.658 MAP值。

更困难的部分在于服务端实现。我们不建议将向量转换后直接使用HNSW进行索引。虽然这种方案在暴力搜索中有效,但一旦引入HNSW,召回率@10会骤降至0.020。

更好的方案是使用HNSW进行候选检索,然后让Qdrant使用真实的双曲距离进行重新评分。在这个数据集上,通过预取1000个候选项,该方法将召回率@10从0.266提升至0.920。

随着嵌入质量的提升,可能需要扩大预取范围,因为当接近庞加莱球边缘时,欧几里得距离的可靠性会下降。

核心观点很简单。如果数据具有层次结构,Qdrant提供了一种实用方案:可以存储坐标、使用HNSW进行候选检索,并在重新评分时应用真实的几何计算,而无需额外的搜索系统。

References

  • Nickel, M. 和 Kiela, D. (2017). 用于学习层次表示的庞加莱嵌入。WordNet重建结果:表1。
  • Mahmood, M. 等 (2026). Hyper3-CLIP:基于层次条件的双曲视觉-语言训练。
  • Desai, K. 等 (2023). 双曲图像-文本表示(MERU)。
  • Qdrant. 向公式查询添加acosh表达式。
  • Qdrant. 混合查询和公式查询。
  • 伯克利亚马逊对象。产品图片,项目B06XCPVVPS,图片71KwV3JHT9L。
  • hyper³labs. 现代嵌入模型背后的几何错误。
  • Radford, A. 等 (2021). 从自然语言监督中学习可迁移的视觉模型(CLIP)。
  • McInnes, L., Healy, J. 和 Melville, J. (2018). UMAP:用于降维的统一流形近似和投影。
  • 伯克利亚马逊对象。数据集和文档。
  • Google. Google产品分类。