简介
非结构化数据
世界上大约超过百分之八十的数据都是非结构化数据,例如:图像、音视频、自然语言等,这些模型不遵循预定义的模式或组织方式,可以使用各种人工智能 (AI) 和机器学习 (ML) 模型转换为向量。
嵌入向量(Embedding vectors)
嵌入向量是非结构化数据的特征抽象,例如电子邮件、物联网传感器数据、Instagram 照片、蛋白质结构等等。从数学上来说,嵌入向量是浮点数或二进制数的数组。现代嵌入技术用于将非结构化数据转换为嵌入向量。
向量相似度搜索
向量相似性搜索是将向量与数据库进行比较以查找与查询向量最相似的向量的过程。近似最近邻(ANN - Approximate nearest neighbor)搜索算法用于加速搜索过程。如果两个嵌入向量非常相似,则意味着原始数据源也相似。
索引
FLAT
不经过量化(扁平)的索引,没有分层或分组,进行相似度搜索时,系统会计算查询向量与所有存储向量之前的相似度。因为它需要计算查询向量与所有存储向量之间的相似度,这会随着数据量的增加而变得非常昂贵,大规模数据集时需要更复杂的索引结构,如IVF_FLAT。
特点:每个向量都是扁平的,即未经过量化或者降维的处理,简单高效(更新效率高,不涉及倒排文件等结构)。
适用场景:适用于较小规模(百万级)的数据集,特别是当数据集能够完全加载到内存中时。
IVF_FLAT
Inverted File with FLAT (or non-quantized) vectors,即具有 flat(或非量化)向量的倒排文件索引,对应的还有一个 GPU 版本GPU_IVF_FLAT。
特点:使用了倒排文件(Inverted File)的结构,可以高效地处理大规模数据集。同时,每个向量也是扁平的,即未经过额外处理的原始向量。**
适用场景:适用于需要在大规模数据集中进行相似度搜索的情况,在搜索精度上与FLAT没有区别,但是在大规模数据集上可以先用倒排文件更快定位包含可能相似向量的倒排列表,从而减少计算相似度量的开销。
IVF_SQ8
Inverted File with Scalar Quantizer of 8 bits,即具有8位标量量化器的倒排文件索引。模型量化介绍
特点:它在量化向量时使用了较小的位数(8位),可以在保持较低存储开销的同时,实现相对较快的搜索速度。然而,由于使用了量化,可能会牺牲一些精度。
适用场景:用于在有限的磁盘、CPU 和 GPU 内存资源下,追求显著的资源消耗降低。这意味着在资源受限的环境中,它可以带来存储和内存的显著减少。
IVF_PQ
Inverted File with Product Quantization,对应的还有一个 GPU 版本GPU_IVF_PQ
特点:使用了一种叫做 Product Quantization 的技术,这种技术可以在加快查询速度的同时,对准确度进行一定的牺牲。
适用场景:用于追求高查询速度,会牺牲一定准确度。
HNSW
Hierarchical Navigable Small World,是一种基于图的索引结构,适用于对搜索效率要求较高的场景。这种索引结构通过构建一个分层的可导航小世界图,以支持高效的搜索操作。
相似度度量
欧氏距离(Euclidean Distance)
常用输入:计算机图像领域的内嵌Float向量
适用于连续的数值型数据,如图像处理、数值分析等领域。当各个特征的重要性相等时,欧氏距离是一个常见的选择。
余弦相似度(Cosine Similarity)
常用输入:文本领域的内嵌Float向量
余弦相似度计算两组数据之间的夹角(假设它们都是从[0,0,…]开始的线),它的值范围是[-1, 1],值越大相似度越高。
主要用于衡量两个向量之间的夹角,而不受向量大小的影响。适用于高维稀疏数据,比如文本数据
内积(Inner Product)
常用输入:文本/图形像素领域的内嵌Float向量
内积的计算是将两个向量对应位置的元素相乘后再相加。常用于度量两个向量的相似性,特别是在向量表示的语境中,如自然语言处理中的词向量。两个向量的内积越大,表示它们在方向上越相似,而越小则表示它们在方向上差异较大。内积主要用于度量向量之间的相似度,适用于密集向量。
Jaccard相似度(Jaccard Similarity)
常用输入:文本领域的内嵌Binary向量
主要应用于集合数据,如文档相似度计算、推荐系统中用户行为的相似性等。 Jaccard相似度计算的是两个集合交集与并集的比值。