pythonのannoyの使い方
概要
- RPF(Random Projection Forest)を利用して高次元データの近似最近傍検索を効率的に行う
- RPFは/faiss/にはない機能
- annoyはbuildしたインデックスに後から要素を追加することができない
インストール
ダウンロード
$ pythno3 -m pip install annoy
具体例
インデックスの構築
from annoy import AnnoyIndex
import random
# ベクトルの次元を指定
dimension = 40
# Annoyインデックスの初期化
index = AnnoyIndex(dimension, 'angular')
# サンプルデータの追加
n_items = 1000
for i in range(n_items):
v = [random.gauss(0, 1) for z in range(dimension)]
index.add_item(i, v)
# インデックスの構築
n_trees = 10
index.build(n_trees)
検索
# クエリベクトルの作成
query_vector = [random.gauss(0, 1) for z in range(dimension)]
# 最も近いアイテムの検索
n_nearest_neighbors = 10
nearest_neighbors = index.get_nns_by_vector(query_vector, n_nearest_neighbors)
print(nearest_neighbors) # indexで得られる