【推荐系统】faiss技术(2)

Faiss是Facebook的AI团队开源的一套用于做聚类或者相似性搜索的软件库。由于推荐业务的召回模块需要在50ms以内拿到结果,而Faiss几乎可以在10ms内完成百万*百万以上的向量距离计算。

  • 余弦值:范围在[-1,1]之间,值越趋近于1,代表两个向量的方向越接近;越趋近于-1,他们的方向越相反;
  • 欧式距离:即L2距离,x与y每维分量之差的平方和,距离越小代表越相近
  • 内积:x与y每维分量的点积之和,值越大代表越相近(越大夹角越小,方向越一致)

首先介绍一下里面涉及的概念:

检索算法介绍

  1. 暴力搜索:顾名思义,query 和 base 一一比对,选择最近的;
  2. IVF:首先在具有代表性的数据上训练聚类中心,然后将 base 加入到最近的聚类中心的桶里,在 search 的时候,query 先和聚类中心比对,再在一定数目的桶里做暴力搜索;
  3. IVFPQ:在 IVF 的基础上,将 base 做 PQ 量化,加速比对

Faiss中最常用的是索引Index,而后是PCA降维、PQ乘积量化,这里针对Index和PQ进行说明,PCA降维从流程上都可以理解。

IVF 【推荐系统】倒排索引

倒排PQ乘积量化(IVFPQ)是PQ乘积量化的更进一步加速版

PQ编码

Product quantization(乘积量化PQ),PQ是一种建立索引的方式。这里参考这篇文章为大家说明:http://www.fabwrite.com/productquantization

假设有50,000张图片组成的图片集,使用 CNN 提取特征后,每张图片可以由1024维的特征表示。那么整个图片集由50000*1024的向量来表示。然后我们把1024维的向量平均分成m=8个子向量,每组子向量128维。如下图。


对于这8组子向量的每组子向量,使用 kmeans 方法聚成k=256类。也就是说,每个子向量有256个中心点(centroids)。如下图。

在product quantization方法中,这256个中心点构成一个码本。这些码本的笛卡尔积就是原始D维向量对应的码本。用qj表示第j组子向量,用Cj表示其对应学习到的码本,那么原始D维向量对应的码本就是 C = C_1 \times C_2 \times ... \times C_m,码本大小为 k^m

注意到每组子向量有其256个中心点,我们可以中心点的 ID 来表示每组子向量中的每个向量。中心点的 ID只需要 8位(=log_2(256))来保存即可。这样,初始一个由32位浮点数组成的1,024维向量,可以转化为8个8位整数组成。如下图。


再回到Faiss

ntotal——

参考:

---- PQ

图像检索:再叙ANN Search(很好)

实例理解product quantization算法

Faiss 源码解析 - 仕杰的文章 - 知乎

Faiss基于PQ的倒排索引实现 - 彭伟的文章 - 知乎

---- Faiss

faiss(1):简介 安装 与 原理

Faiss 介绍

---- index

faiss入门+使用的索引原理

问题?faiss中的id mapping如何理解?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值