数学(五)ANN检索中的HNSW算法

向量相似度

cosine相似度:衡量两个向量之间的夹角。
c o s ( x ⃗ , y ⃗ ) = x ⃗ ⋅ y ⃗ ∣ x ⃗ ∣ ∣ y ⃗ ∣ cos(\vec{x}, \vec{y})=\frac{\vec{x}\cdot \vec{y}}{\left | \vec{x} \right |\left | \vec{y} \right |} cos(x ,y )=x y x y

jaccard相似度:衡量两个集合之间的相似性。

j a c c a r d ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ jaccard(A, B)=\frac{\left | A \cap B \right |}{\left | A\cup B \right |} jaccard(A,B)=ABAB

皮尔逊相似系数:衡量两个变量集合之间的相似性。

ρ ( X , Y ) = ∑ ( X − X ˉ ) ( Y − Y ˉ ) ∑ ( X − X ˉ ) 2 ∑ ( Y − Y ˉ ) 2 \rho_{ (X, Y)}=\frac{\sum (X-\bar{X})(Y-\bar{Y})}{\sqrt{\sum(X-\bar{X})^2 \sum(Y-\bar{Y})^2}} ρ(X,Y)=(XXˉ)2(YYˉ)2 (XXˉ)(YYˉ)

NSW

基本思想

通过把所有item放入图中,并在图中进行检索的方法提升海量数据近邻检索的速度。根据这一基本思想,NSW主要有两个步骤,下文会简要阐述这两个步骤。

  1. 构建图
  2. 图上进行检索

构建图

NSW构建图的过程简单描述为边查找边插入,首先NSW规定每个节点最多链接m个友点(有边连接),进而采用边查找边插入的思想构建图,即先随机找一个点 i t e m 0 item_0 item0放入图中,之后每次当向图中插入一个点 i t e m i item_i itemi时,首先查找图中与待插入点 i t e m i item_i itemi最相近的m个点,将这m个点与 i t e m i item_i itemi进行连接,这个点插入完毕,因而下文的重点在于如何查找待插入点 i t e m i item_i itemi最相近的m个点。

  1. 构建如下数据结构:废弃列表junk_list、动态列表dynamic_list、影子动态列表shadow_dynamic_list。
  2. 随机选择一个点 i t e m 0 item_0 item0放入dynamic_list中,置空junk_list和shadow_dynamic_list。
  3. 并行寻找dynamic_list所有点的"友点",如果查找的友点在junk_list中,则不做记录;如果不在junk_list中,把这些点放入junk_list中,且并行计算这些点与待插入点 i t e m i item_i itemi之间的距离,并将这些点以及距离存入dynamic_list中。
  4. 对dynamic_list中的点按照距离进行升序排序,保留前m个点。
  5. 查看shadow_dynamic_list与dynamic_list中的点,如果相同则结束查找;如果不同,则将dynamic_list复制到shadow_dynamic_list,继续完成第3步。

图检索

图检索的过程和<构建图>的查找过程相同。

HNSW

构建图

与NSW不同的是,HNSW构建的图是分层级的,具体来说,先随机选择一部分点进行第一层的构建,之后再从剩余节点中选择一部分点添加至图中与第一层的节点构成第二层…,以此类推,直到构建完最后一层,使得这一层涵盖所有节点。

图检索

先在一层中进行查找,查找的方式和NSW相同,如果shadow_dynamic_list与dynamic_list相同,则结束查找;如果不同,则将dynamic_list复制到shadow_dynamic_list,接着在下一层进行查找。

参考链接

  1. HNSW详解
  2. ANN总体概述
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值