Slide 42
Slide 42 text
42
import faiss, timeit
import numpy as np
d = 1024 # ベクトルの次元数
N = 10**6 # データ数
index_pq = faiss.index_factory(d, 'IVF512,PQ64') # 近傍探索 index (IVF + PQ)
index_pq.train(np.random.random((10**5, d)).astype('float32')) # 事前学習
index_pq.add(np.random.random((N, d)).astype('float32')) # N本のd次元ベクトルを作成しindexへ追加
query = np.random.random((1, d)).astype('float32') # クエリの作成
def search(_index, _query): _index.search(_query, 10) # 検索
timeit.timeit("search(index_pq, query)", setup="from __main__ import search, index_pq, query", number=1)
Brute force では 10**6 で xxx 秒、10**7 で OOM したが、、
Demo (IVF+PQ)