最近邻搜索乘积量化的纯python实现
nanopq的Python项目详细描述
纳米pq
nano产品量化(nano pq):纯python编写的产品量化(pq)和优化产品量化(opq)的普通实现,没有任何第三方依赖关系。
安装
您可以通过pip安装包。这个库在Linux上与Python3.5+一起工作。
pip install nanopq
Documentation
示例
importnanopqimportnumpyasnpN,Nt,D=10000,2000,128X=np.random.random((N,D)).astype(np.float32)# 10,000 128-dim vectors to be indexedXt=np.random.random((Nt,D)).astype(np.float32)# 2,000 128-dim vectors for trainingquery=np.random.random((D,)).astype(np.float32)# a 128-dim query vector# Instantiate with M=8 sub-spacespq=nanopq.PQ(M=8)# Train codewordspq.fit(Xt)# Encode to PQ-codesX_code=pq.encode(X)# (10000, 8) with dtype=np.uint8# Results: create a distance table online, and compute Asymmetric Distance to each PQ-code dists=pq.dtable(query).adist(X_code)# (10000, )
作者
参考
- H. Jegou, M. Douze, and C. Schmid, "Product Quantization for Nearest Neighbor Search", IEEE TPAMI 2011(pq原稿)
- T. Ge, K. He, Q. Ke, and J. Sun, "Optimized Product Quantization", IEEE TPAMI 2014(opq的原稿)
- Y. Matsui, Y. Uchida, H. Jegou, and S. Satoh, "A Survey of Product Quantization", ITE MTA 2018(pq调查报告)
- PQ in faiss(faiss包含pq的优化实现。See the difference to ours here)
- Rayuela.jl(几种编码算法的julia实现,包括pq和opq)
- PQk-means(基于pq代码的集群。nanopq的实现与that of PQk-means)兼容
- Rii(使用nanopq的基于ivfpq的ann算法)