首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Faiss: 选择合适的索引Index

Faiss: 选择合适的索引Index

作者头像
用户3578099
发布于 2024-06-19 11:28:52
发布于 2024-06-19 11:28:52
1.3K00
代码可运行
举报
文章被收录于专栏:AI科技时讯AI科技时讯
运行总次数:0
代码可运行

选择合适的 Index

向量相似性搜索彻底改变了搜索领域。它允许我们高效地检索从GIF到文章等各种媒体,即使在处理十亿级别数据集时,也能在亚秒级时间内提供令人印象深刻的准确性。

然而,这种灵活性也带来了一个问题:如何知道哪种索引大小最适合我们的用例?应选择哪种索引?是否只需要一个索引?本文将探讨几种关键索引(Flat、LSH、HNSW和IVF)的优缺点,并指导如何选择适合用例的索引,以及每个索引中参数的影响。

索引在搜索中的应用

在我们深入探讨不同类型的索引之前,让我们先了解为什么它们如此重要,以及我们如何利用它们进行高效的相似性搜索。

相似性搜索的价值

相似性搜索可以用来快速比较数据。给定一个查询(可能是任何格式——文本、音频、视频、GIF等,您能想到的都有),可以使用相似性搜索返回相关结果。 相似性搜索的核心在于快速比较数据,以便返回相关结果。这对于各行各业的公司和应用至关重要,如基因数据库的基因识别、数据的去重,以及每天处理数十亿搜索结果。

高效搜索的索引

在向量相似性搜索中,索引用于存储数据的向量表示,并通过统计方法或机器学习构建编码原始数据有用信息的向量。将“有意义”的向量存储在索引中,以便进行智能相似性搜索。

使用密集编码的向量,可以展示man-King语义关系对woman来说是equivalent的Queen。

将“有意义”的向量存储在索引中,可以实现智能的相似性搜索。这种搜索依赖于索引中的向量表示,这些向量通常通过统计方法或机器学习算法从原始数据中提取。Faiss(Facebook AI相似性搜索)是一个流行的索引解决方案,它允许我们存储向量并在Faiss索引中使用“查询”向量进行搜索。通过比较查询向量与索引中的其他向量,可以找到最接近的匹配,通常使用欧几里得(L2)或内积(IP)度量。

了解了相似性搜索的基本概念后,接下来将探讨如何选择正确的Faiss索引,以及如何调整索引参数以优化搜索性能。

Faiss索引的选择

Faiss 提供了多种索引类型,这些类型可以相互组合,以构建多层级的索引结构。在选择索引时,需考虑不同的因素,如搜索速度、质量或索引内存的需求。具体使用哪种索引,应基于我们的用例,并考虑数据集的大小、搜索的频率以及对于搜索质量与速度的权衡。

Flat索引

Flat 索引以牺牲搜索速度为代价,提供了完美的搜索质量。这种索引的内存利用率是合理的。Flat 索引是最简单的一种,它不修改输入的向量,因此产生了最准确的结果。然而,这种完美的搜索质量需要较长时间来完成。在 Flat 索引中,查询向量与索引中的每个其他全尺寸向量进行比较,以计算它们的距离。

Flat和准确率

Flat索引在完美的搜索质量上付出了搜索速度慢的代价。Flat索引的内存利用率是合理的。

Flat 索引是最简单且直接的索引类型,它不对输入的向量进行任何修改,因此提供了最准确的结果。这种索引在搜索质量上追求完美,但代价是较慢的搜索速度。在 Flat 索引中,查询向量与索引中的每个其他全尺寸向量进行比较,以计算它们的距离。一旦完成了所有距离的计算,就可以返回与查询向量最接近的 k 个向量。

计算所有距离后,返回 k 个最接近的向量。

何时使用Flat 索引

Flat 索引适合于搜索质量是首要考虑因素,而对搜索速度要求不高的情况。特别适用于小型数据集,尤其是在使用高性能硬件时。

在 M1 芯片上使用 faiss-cpu 进行欧几里得(L2)和内积(IP)平面索引搜索的时间表明,IndexFlatIP 比 IndexFlatL2 略快(100维度向量)

上面的图表展示了M1芯片上的Faiss CPU速度。当与Linux上的CUDA兼容GPU配对时,Faiss被优化以在GPU上运行,速度显著提高,从而显著提高搜索时间。

简而言之,当以下情况时,使用平面索引:

  • 搜索质量是一个非常重要的优先事项。
  • 搜索时间不重要或者当使用小索引(<10K)时。

实现 Flat 索引

要初始化一个 Flat 索引需要准备数据和 Faiss,选择合适的平面索引,如 IndexFlatL2 或 IndexFlatIP。以下是如何使用 Sift1M 数据集的示例代码:

代码语言:javascript
代码运行次数:0
运行
复制
import shutil
import urllib.request as request
from contextlib import closing

# 下载 Sift1M 数据集
with closing(request.urlopen('ftp://ftp.irisa.fr/local/texmex/corpus/sift.tar.gz')) as r:
    with open('sift.tar.gz', 'wb') as f:
        shutil.copyfileobj(r, f)
        
import tarfile

# 解压数据集
tar = tarfile.open('sift.tar.gz', "r:gz")
tar.extractall()


import numpy as np

# 读取 fvecs 文件
def read_fvecs(fp):
    a = np.fromfile(fp, dtype='int32')
    d = a[0]
    return a.reshape(-1, d + 1)[:, 1:].copy().view('float32')

xb = read_fvecs('sift_base.fvecs')  # 1M samples
xq = read_fvecs('./sift/sift_query.fvecs')
xq = xq[0].reshape(1, xq.shape[1])

xq.shape  # (1, 128)

xb.shape  # (1000000, 128)

# 初始化索引
d = 128  # 数据维度
k = 10   # 最近邻数量
index = faiss.IndexFlatIP(d)
index.add(xb)
D, I = index.search(xq, k)

平衡搜索时间

平面索引的准确性极高,但速度极慢。在相似性搜索中,搜索速度和搜索质量(准确性)之间总是存Flat 索引提供最高准确性,但搜索速度较慢。在相似性搜索中,搜索速度和搜索质量之间需要找到平衡点。对于 Flat 索引,这意味着在搜索时间和搜索质量之间做出选择。

平面索引的搜索质量是100%,搜索速度是0%。

这里完全没有优化的搜索速度,这将适合许多较小索引的用例 — 或者搜索时间无关紧要的场景。但是,其他用例需要在速度和质量之间取得更好的平衡。为了提高搜索速度,可以采用两种主要方法:

  • 减小向量大小 — 通过降维或减少表示向量值的位数。
  • 缩小搜索范围 — 可以通过聚类或根据某些属性、相似性或距离将向量组织成树状结构,并限制搜索到最近的聚类或通过最相似的分支进行筛选。

这些方法意味着不再执行全分辨率数据集的穷尽搜索,而是采用近似最近邻(ANN)搜索。

所以,产生的是一个更平衡的组合,既优先考虑搜索速度也考虑搜索时间。

通常搜索速度和搜索质量两者更平衡的组合

Locality Sensitive Hashing局部敏感哈希

LSH的性能范围广泛,严重依赖于设定的参数

局部敏感哈希(LSH)通过使用哈希函数将向量分组到桶中,这些函数旨在最大化哈希冲突,而非像传统哈希函数那样最小化冲突。这种方法允许相似的向量被分组在一起,便于搜索时快速找到最接近的匹配。

想象有一个Python字典。当在字典中创建一个新的键值对时,使用一个哈希函数来哈希键。这个键的哈希值决定了存储其相应值的“桶”:

典型的字典对象的哈希函数将尝试最小化哈希冲突,目标是为每个桶分配一个值。

Python字典是使用典型哈希函数的哈希表的一个例子,该函数最小化哈希冲突,即两个不同的对象(键)产生相同的哈希。

为什么LSH要最大化冲突?对于搜索,使用LSH将相似的对象分组在一起。当引入一个新的查询对象(或向量)时,LSH算法可以用来找到最接近的匹配组:

)

LSH哈希函数尝试最大化哈希冲突产生向量分组。

实现局部敏感哈希(LSH)

在 Faiss 中实现 LSH 索引相对简单。首先,初始化一个 IndexLSH 对象,指定向量维度 dnbits 参数,然后添加向量。nbits 参数决定了哈希向量的分辨率,影响索引的准确性和搜索速度。

代码语言:javascript
代码运行次数:0
运行
复制
nbits = d*4  # 分辨率
index = faiss.IndexLSH(d, nbits)
index.add(wb)
# 搜索
D, I = index.search(xq, k)

nbits参数指的是哈希向量的“分辨率”。更高的值意味着更高的准确性,但代价是更多的内存和更慢的搜索速度。

d为128时,IndexLSH的召回率得分。注意,要获得更高的召回性能,需要大幅度增加num_bits的值。要达到90%的召回率,使用64d,即。

LSH 提供了广泛的性能范围,其性能严重依赖于参数设置。高分辨率(高 nbits)可以提高召回率,但会增加内存使用和搜索时间。对于高维数据,LSH 的性能可能不佳,尤其是当向量维度较大时。随着 d 的增加,存储的向量变得更大,这可能导致搜索时间过长。

不同nbits值下IndexLSH的搜索时间,与平面IP索引相比较。

这反映在索引内存大小上:

不同nbits值下IndexLSH的索引大小,与平面IP索引相比较。

当处理大向量维度(如 128)时,IndexLSH 可能不再适用。在这种情况下,更适合的索引类型可能是 HNSW,特别是对于大型数据集和需要高效率的搜索场景。

Hierarchical Navigable Small World Graphs分层可导航小世界图

HNSW — 出色的搜索质量,良好的搜索速度且索引大小相当可观

HNSW 是一种高性能的索引类型,适用于大型数据集,特别是在高维度下。它基于可导航小世界(NSW)图,通过构建多层图结构来提高搜索速度和质量。

“NSW”部分是由于这些图中的顶点都具有到图中所有其他顶点的非常短的平均路径长度 — 尽管它们并没有直接连接。

以Facebook为例 — 在2016年,可以将每个用户(一个顶点)连接到他们的Facebook好友(最近邻居)。尽管有15.9亿活跃用户,从一个用户到另一个用户穿越图所需的平均步骤(或跳数)仅为3.57。

可视化一个NSW图。每个点最多只离另一个点四跳远。

Facebook只是广阔网络中高连通性的一个例子 — 也就是所谓的NSW图。

在高层次上,HNSW图是通过获取NSW图并将它们分解为多层构建的。每增加一个层级就消除了顶点之间的中间连接。

使用HNSW,将网络分解为几个层,在搜索期间遍历这些层。

对于具有更高维度的大型数据集 — HNSW图是可以使用的表现得最好的索引之一

实现HNSW

要在Faiss中构建和搜索一个平面HNSW索引,所需要的只是IndexHNSWFlat

代码语言:javascript
代码运行次数:0
运行
复制
# # 设置 HNSW 索引参数
M = 64  # 每个顶点的邻居数量
ef_search = 32  # 搜索深度
ef_construction = 64  # 构建深度

# 初始化索引(假设 d == 128)
index = faiss.IndexHNSWFlat(d, M)
index.hnsw.efConstruction = ef_construction
index.hnsw.efSearch = ef_search
index.add(wb)

# 搜索
D, I = index.search(wb, k)

可以看到,有三个关键参数来修改索引的性能。

  • M — 每个顶点将连接到的最近邻居的数量。
  • efSearch — 在搜索期间,将探索多少个层间的入口点。
  • efConstruction — 在构建索引时将探索多少个入口点。

每个参数都可以增加以提高搜索质量:

在Sift1M数据集上,不同efConstructionefSearch和M值的召回值。

MefSearch对搜索时间有更大的影响 — efConstruction主要增加了索引构建时间(意味着更慢的index.add),但在更高的M值和更高的查询量时,确实看到efConstruction对搜索时间也有影响。

在完整的Sift1M数据集上,不同MefSearch值的搜索时间。

虽然 HNSW 提供高效的搜索,但其索引大小可能成为一个问题,尤其是在内存受限的环境中。例如,对于 Sift1M 数据集,使用较大的 M 值可能需要超过 1.6GB 的内存。

在Sift1M数据集上,不同M值的索引内存使用情况。

然而,可以增加另外两个参数 — efSearchefConstruction,这俩参数不影响索引的内存占用。

因此,当RAM不是限制因素时,HNSW是一个很好的平衡索引,可以通过增加三个参数来推动它更偏向于搜索质量。

可以使用较低的参数组来平衡优先考虑稍微更快的搜索速度和良好的搜索质量,或者使用较高的参数组以稍微慢一点的搜索速度获得高质量的搜索。

HNSW 是一个强大且高效的索引,特别适合于处理高维大型数据集。通过调整其参数,可以在搜索速度和质量之间找到平衡。

Inverted File Index倒排文件索引

倒排文件索引(IVF)以其出色的搜索质量、良好的搜索速度和合理的内存使用而著称。条形图中的“半填充”部分代表了在修改索引参数时遇到的性能范围。

倒排文件索引(IVF)以其出色的搜索质量、良好的搜索速度和合理的内存使用而著称。它通过聚类技术显著减少了搜索范围,使得在处理大型数据集时更为高效。

IVF基于沃罗诺伊图的概念 — 也称为狄利克雷镶嵌。将高维向量空间分割成多个单元。每个单元由一个中心点定义,该中心点是该单元内所有向量的最近邻居。查询向量被限制在其所在的单元内,从而大大减少了搜索空间。

沃罗诺伊单元是如何构建的 — 上面有三个中心点,从而形成了三个沃罗诺伊单元。然后,每个给定单元内的数据点将被分配给相应的中心点。 现在,每个数据点都将被包含在一个单元内 — 并被分配给相应的中心点。

就像其他索引一样,引入了一个查询向量xq — 这个查询向量必须落在一个单元内,此时将搜索范围限制在那个单元内。但如果查询向量落在单元的边缘附近,就会出现问题 — 它最近的其他数据点很可能包含在相邻的单元内,将这称为边缘问题:

查询向量xq落在了洋红色单元的边缘上。尽管它更接近于青绿色单元中的数据点,但如果nprobe == 1,这意味着将搜索范围限制在洋红色单元内。

为了缓解这个问题并提高搜索质量,可以增加一个称为nprobe值的索引参数。通过nprobe,可以设置要搜索的单元数量。

增加nprobe会增加搜索范围。

实现IVF

要实现IVF索引并在搜索中使用它,可以使用IndexIVFFlat

代码语言:javascript
代码运行次数:0
运行
复制
nlist = 128   # 聚类单元数量

quantizer = faiss.IndexFlatIP(d)  # 向量存储和比较方式
index = faiss.IndexIVFFlat(quantizer, d, nlist)
index.train(data)  # 训练索引以聚类
index.add(data)

index.nprobe = 8  # 设置要搜索的单元数量
D, I = index.search(xq, k)

有两个参数可以调整。

  • nprobe — 要搜索的单元格数量
  • nlist — 要创建的单元格数量

nlist值较高意味着必须将向量与更多的中心点向量进行比较 — 但在选择了最近的中心点单元格进行搜索后,每个单元格内的向量数量会减少。因此,增加nlist以优先考虑搜索速度。

对于nprobe,发现情况正好相反。增加nprobe会增加搜索范围 — 从而优先考虑搜索质量。

使用不同 nprobenlist 值的 IVF 搜索时间和召回率。

在内存方面,IndexIVFFlat是相当高效的 — 修改nprobe不会影响这一点。nlist对内存使用的影响也很小 — 更高的nlist意味着略微增加的内存需求。

索引的内存使用情况仅受 nlist 参数影响。然而,对于 Sift1M 数据集,索引大小仅发生很小的变化

IVF 的一个潜在问题是所谓的“边缘问题”,即查询向量落在单元的边缘附近时,可能无法找到最接近的数据点。通过增加 nprobe,可以缓解这个问题并提高搜索质量。

性能对比

在 M1 芯片(8核CPU,8GB内存)的硬件环境下,对四种主要索引类型(Flat、LSH、HNSW、IVF)进行了性能测试。这些测试旨在评估不同索引在处理 Sift1M 数据集(128维,1M条记录)时的表现。

索引

内存 (MB)

查询时间 (ms)

召回率

注意事项

Flat(L2 或 IP)

~500

~18

1.0

适用于小数据集或查询时间不相关的情况

LSH

20 - 600

1.7 - 30

0.4 - 0.85

最适用于低维数据或小数据集

HNSW

600 - 1600

0.6 - 2.1

0.5 - 0.95

质量非常好,速度快,但内存使用量大

IVF

~520

1 - 9

0.7 - 0.95

良好的可扩展选项。高质量,速度合理,内存使用合理

上述数据是基于 Sift1M 数据集上进行的 20 次测试的平均结果,涵盖了不同参数设置。测试结果已排除不切实际的参数配置

这些结果为选择最适合您用例的索引提供了参考。请注意,实际应用中的性能可能因数据集和参数设置的不同而有所差异。

参考

  • Pinecone 向量索引教程 - 了解更多关于向量索引的详细信息。
  • ANN-benchmarks repo - E Bernhardsson 维护的用于评估近似最近邻搜索算法的代码库。
  • Three and a half degrees of separation - S Edunov 等人关于 Facebook 社交网络连接性的研究。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技时讯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
乘积量化PQ:将高维向量压缩 97%
向量相似性搜索在处理大规模数据集时,往往面临着内存消耗的挑战。例如,即使是一个包含100万个密集向量的小数据集,其索引也可能需要数GB的内存。随着数据集规模的增长,尤其是高维数据,内存使用量会迅速增加,这可能导致内存管理问题。
用户3578099
2024/07/15
6030
乘积量化PQ:将高维向量压缩 97%
深入解析HNSW:Faiss中的层次化可导航小世界图
层次化可导航小世界(HNSW)图是向量相似性搜索中表现最佳的索引之一。HNSW 技术以其超级快速的搜索速度和出色的召回率,在近似最近邻(ANN)搜索中表现卓越。尽管 HNSW 是近似最近邻搜索中强大且受欢迎的算法,但理解其工作原理并不容易。
用户3578099
2024/07/15
2.7K0
深入解析HNSW:Faiss中的层次化可导航小世界图
使用Faiss进行海量特征的相似度匹配
来源丨https://zhuanlan.zhihu.com/p/210736523
公众号机器学习与AI生成创作
2021/01/08
4K0
使用Faiss进行海量特征的相似度匹配
Faiss:加速大规模数据相似性搜索的利器
在机器学习和数据挖掘领域,相似性搜索是一项基本且重要的任务,它涉及到在大型数据集中找到与特定对象最相似的对象。Faiss是一个由Facebook AI Research开发的库,专门用于高效地进行相似性搜索和聚类,它之所以重要,是因为它提供了一种快速且准确的方式来执行这一任务,尤其是在处理大规模高维向量数据集时。
用户3578099
2024/06/11
1.5K0
Faiss:加速大规模数据相似性搜索的利器
LSH算法:高效相似性搜索的原理与Python实现II
局部敏感哈希(LSH)是一种高效的近似相似性搜索技术,广泛应用于需要处理大规模数据集的场景。在当今数据驱动的世界中,高效的相似性搜索算法对于维持业务运营至关重要,它们是许多顶尖公司技术堆栈的核心。
用户3578099
2024/07/15
5950
LSH算法:高效相似性搜索的原理与Python实现II
复合索引:向量搜索的高级策略
在向量搜索领域,我们拥有多种索引方法和向量处理技术,它们使我们能够在召回率、响应时间和内存使用之间做出权衡。虽然单独使用特定技术如倒排文件(IVF)、乘积量化(PQ)或分层导航小世界(HNSW)通常能够带来满意的结果,但为了实现最佳性能,我们往往采用复合索引。
用户3578099
2024/07/15
6110
复合索引:向量搜索的高级策略
10分钟入门faiss相似向量检索
faiss全称 Facebook AI Similarity Search,是FaceBook的AI团队针对大规模向量 进行 TopK 相似向量 检索 的一个工具,使用C++编写,有python接口,对10亿量级的索引可以做到毫秒级检索的性能。
lyhue1991
2023/09/05
4.1K0
10分钟入门faiss相似向量检索
检索算法小结
上一篇文章介绍了大模型应用利器--RAG。在RAG中当然少不了检索。检索算法在信息检索、搜索引擎和推荐系统等领域中扮演着至关重要的角色。它们的核心任务是根据用户查询从大量数据中找出最相关的信息。本文就对检索算法进行以下小结。
languageX
2024/07/01
3860
向量数据库入坑指南:聊聊来自元宇宙大厂 Meta 的相似度检索技术 Faiss
我们日常使用的各种 APP 中的许多功能,都离不开相似度检索技术。比如一个接一个的新闻和视频推荐、各种常见的对话机器人、保护我们日常账号安全的风控系统、能够用哼唱来找到歌曲的听歌识曲,甚至就连外卖配送的最佳路线选择也都有着它的身影。
soulteary
2022/09/03
2.3K0
解读向量索引
向量嵌入是从图像、文本和音频等数据源转换而来的数字表示,旨在通过为每个项目创建一个数学向量来捕捉其语义或特征。这种表示方式使得计算系统更容易理解这些数据,并且与机器学习模型兼容,从而能够识别不同项之间的关系和相似性。
半吊子全栈工匠
2024/11/07
7420
解读向量索引
Milvus 在 AVX-512 与 AVX2 的性能对比
指令是计算机程序给计算机处理器的命令。在最低级别上,每条指令是一个 0 和 1 的序列,描述了计算机要执行的物理操作。在计算机的汇编器语言中,每条语言语句一般对应一条处理器指令。CPU 依靠指令来计算和控制系统,指令执行能力是衡量 CPU 性能的重要指标。指令集也与 CPU 效率有密切关系。
Zilliz RDS
2020/11/19
3.6K0
Milvus 在 AVX-512 与 AVX2 的性能对比
向量数据库是如何检索的?基于 Feder 的 IVF_FLAT 可视化实现
Embedding 是分析非结构化数据的重要方式,当我们将图片、声音编码为向量后,这些数据依旧能够保留原始数据(图片、声音等)的详细信息。然而,我们很难直接对这些编码后的向量中的数字与原始数据建立联系,想要弄清楚向量构成的空间到底意味着什么就更是难上加难了。
Zilliz RDS
2022/11/07
1.7K0
向量数据库是如何检索的?基于 Feder 的 IVF_FLAT 可视化实现
Faiss向量数据库
Faiss 处理固定维数 d 的向量集合,通常为几十到几百个。这些集合可以存储在矩阵中。我们假设采用行主存储,即向量编号 i 的第 j 个分量存储在矩阵的第 i 行、第 j 列中。Faiss 仅使用 32 位浮点矩阵。
@小森
2024/09/05
5650
Faiss向量数据库
浅谈如何优化 Milvus 性能
Milvus 是全球最快的向量数据库,在最新发布的 Milvus 2.2 benchmark[1] 中,Milvus 相比之前的版本,取得了 50% 以上的性能提升。值得一提的是,在 Master branch 的最新分支中,Milvus 的性能又更进一步,在 1M 向量串行执行的场景下取得了 3ms 以下的延迟,整体 QPS 甚至超过了 ElasticSearch 的 10 倍。那么,如何使用 Milvus 才能达到理想的性能呢?本文暂且不提社区大神贡献的黑科技优化,先聊聊使用 Milvus 过程中的一些经验,以及如何进行性能调优。
Zilliz RDS
2023/01/10
4.4K0
浅谈如何优化 Milvus 性能
推荐算法:HNSW算法简介
HNSW(Hierarchical Navigable Small Word)算法算是目前推荐领域里面常用的ANN(Approximate Nearest Neighbor)算法了。
codename_cys
2022/09/27
12K0
推荐算法:HNSW算法简介
Milvus 2.0 Knowhere 概览
如果把 Milvus 比喻为一辆跑车,Knowhere 就是这辆跑车的引擎。Knowhere 的定义范畴分为狭义和广义两种。狭义上的 Knowhere 是下层向量查询库(如Faiss、HNSW、Annoy)和上层服务调度之间的操作接口。同时,异构计算也由 Knowhere 这一层来控制,用于管理索引的构建和查询操作在何种硬件上执行, 如 CPU 或 GPU,未来还可以支持 DPU/TPU/……这也是 Knowhere 这一命名的源起 —— know where。广义上的 Knowhere 还包括 Faiss 及其它所有第三方索引库。因此,可以将 Knowhere 理解为 Milvus 的核心运算引擎。
Zilliz RDS
2022/05/25
8370
Milvus 2.0 Knowhere 概览
用 Milvus 和 NVIDIA Merlin 搭建高效推荐系统
简单来说,现代推荐系统由训练/推理流水线(pipeline)组成,涉及数据获取、数据预处理、模型训练和调整检索、过滤、排名和评分相关的超参数等多个阶段。走遍这些流程之后,推荐系统能够给出高度个性化的推荐结果,从而提升产品的用户体验。
Zilliz RDS
2023/11/01
5100
用 Milvus 和 NVIDIA Merlin 搭建高效推荐系统
【向量检索研究系列】快速入门
随着互联网的不断发展,产生了各种各样的海量数据,比如图片、文本、视频和语音等非结构化数据,这些数据可以通过人工智能技术提取出特征向量,然后通过对这些特征向量的计算和检索来实现对非结构化数据的分析和检索,如何对非结构化的向量数据进行高效检索即为向量检索技术的核心问题。
码之有理
2022/06/30
3.4K4
【向量检索研究系列】快速入门
Milvus性能优化提速之道:揭秘优化技巧,避开十大误区,确保数据一致性无忧,轻松实现高性能
Milvus 是全球最快的向量数据库,在最新发布的 Milvus 2.2 benchmark中,Milvus 相比之前的版本,取得了 50% 以上的性能提升。值得一提的是,在 Master branch 的最新分支中,Milvus 的性能又更进一步,在 1M 向量串行执行的场景下取得了 3ms 以下的延迟,整体 QPS 甚至超过了 ElasticSearch 的 10 倍。那么,如何使用 Milvus 才能达到理想的性能呢?本文暂且不提社区大神贡献的黑科技优化,先聊聊使用 Milvus 过程中的一些经验,以及如何进行性能调优。
汀丶人工智能
2023/11/15
2.5K0
Milvus性能优化提速之道:揭秘优化技巧,避开十大误区,确保数据一致性无忧,轻松实现高性能
离散与提炼——一些关于向量召回算法优化方法的思考
最近做的很多向量召回的相关工作,主要集中在优化 Faiss 里面常用的几个算法,包括 IVFFlat 和 IVFPQ,并且针对这两个算法都做出了专门的优化。
Zilliz RDS
2021/01/18
1.5K0
离散与提炼——一些关于向量召回算法优化方法的思考
相关推荐
乘积量化PQ:将高维向量压缩 97%
更多 >
目录
  • 选择合适的 Index
    • 索引在搜索中的应用
      • 相似性搜索的价值
      • 高效搜索的索引
      • Faiss索引的选择
    • Flat索引
      • Flat和准确率
      • 何时使用Flat 索引
      • 实现 Flat 索引
      • 平衡搜索时间
    • Locality Sensitive Hashing局部敏感哈希
      • 实现局部敏感哈希(LSH)
    • Hierarchical Navigable Small World Graphs分层可导航小世界图
      • 实现HNSW
    • Inverted File Index倒排文件索引
      • 实现IVF
    • 性能对比
    • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验