距离向量算法_向量近似最近邻(ANN)算法HNSW详解「傻瓜版」

在深度学习蓬勃发展的今天,一切物体皆可变成向量。图片可以变成一个向量,一个人的兴趣也可以表示成一个向量,一段语音也可以编码成一个向量。既然一切皆可成为向量,那么,通过一个东西找到相似的东西这个问题,都可以转化为通过一个向量找到相似的向量的问题了。

563a75f08091a00baead3361f235e1db.png

书的二维向量化表示(因为是二维,所以可以展示到一张图上)

所以,向量近似最近邻(ANN)算法需要解决如下的问题:

  • 给定N个维度是f的向量(vector)组成集合S
  • 给定一个距离函数d,其中 d(a, b) 是向量a和b的距离,距离越小表示a,b越相似
  • 输入一个维度是f的向量q,如何找到S中和q距离最近的K个向量

对于这个问题,最傻瓜的算法当然是,对集合S中的N个向量,每个计算一下和q的距离,并将结果放入一个堆中(堆里维护着距离最小的K个向量)。这样,整个算法的复杂度是 O(Nlog(K))。当N很大时(比如1亿),显然查询是非常慢的。

因此,为了解决快速查找的问题,如何对集合S建立合适的索引,就是一个重要的问题了。而HNSW就是这方面的一个重要算法。关于HNSW的开源实现可以参考Github上的hnswlib。不过,因为这个库做了很多性能优化,导致它的代码可读性不是很好,不太容易看懂。因

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
向量数据库,也称为矢量数据存储系统,用于处理和查询基于向量表示的数据,如图像、文本或音频的嵌入特征。它们的核心目标是高效地搜索和匹配相似的向量。常用的搜索算法有以下几种: 1. **余弦相似度(Cosine Similarity)**:这是一种衡量两个向量相似度的标准方法,通过计算它们的夹角余弦值。在无量纲化的情况下,向量长度被忽略,只关注方向。 2. **欧几里得距离(Euclidean Distance)**:这是最直接的距离度量,计算两个向量之间的线性距离,但对大规模数据可能效率较低。 3. **曼哈顿距离(Manhattan Distance)**:也叫城市街区距离,对于稀疏向量特别有效,计算每个维度上的差值之和。 4. **Jaccard相似度(Jaccard Index)**:用于文本或集合数据的相似度计算,通过比较两个集合的交集和并集。 5. **BM25(Best Match 25)**:一种用于信息检索的统计方法,适用于文本搜索,考虑了文档长度和词频等因素。 6. **Annoy(Approximate Nearest Neighbors Oh Yeah)**:一种近似最近邻搜索算法,通过构建数据结构提前预排序,快速找到近似最接近的向量。 7. **HNSW(Hierarchical Navigable Small World)**:另一种高效的近似搜索算法,利用图结构进行索引,适合大数据场景。 8. **Faiss(Facebook AI Similarity Search Library)**:开源库,提供了多种高效的向量搜索算法,包括IVFFlat、IVFPQ等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值