美文网首页
faiss学习笔记(二)

faiss学习笔记(二)

作者: jinjin1009 | 来源:发表于2021-04-25 20:37 被阅读0次

    加速搜索

    如果需要存储的向量太多,通过暴力搜索索引IndexFlatL2速度很慢,这里介绍一种加速搜索的方案,索引为IndexIVFFlat,即倒排文件,其实就是使用KMeans建立聚类中心,然后通过查询最近的聚类中心,比较聚类中的所有向量得到相似的向量
    通过IndexIVFFlat索引,可以实现上面的思想,它需要一个训练阶段
    创建IndexIVFFlat时需要指定一个其他的索引作为量化器,来判断向量属于哪个聚类中心
    search方法也相应引入了nlist(聚类中心的数目)和nprobe(执行搜索的聚类数)

    nlist = 100
    k = 4
    quantizer = faiss.IndexFlatL2(d)
    index = faiss.IndexIVFFlat(quantizer, d, nlist, faiss.METRIC_L2)
    print(index.is_trained) ---False
    index.train(xb)
    print(index.is_trained) ---True
    
    index.add(xb)
    D, I = index.search(xq, k)
    print(I[-5:])
    
    index.nprobe = 10
    D, I - index.search(xq, k)
    print(I[-5:])
    

    经过 index.nprobe 的结果并不完全一致,因为落在聚类外的数据也可能离查询数据更近,适当增加 nprobe 可以得到和之前一 中比较相同的结果,nprobe 控制了速度和精度的平衡

    相关文章

      网友评论

          本文标题:faiss学习笔记(二)

          本文链接:https://www.haomeiwen.com/subject/tdrjrltx.html