Annoy README — 설치, 사용, API, 튜닝

Annoy README — 설치, 사용, API, 튜닝

Annoy 는 근사 최근접 이웃 검색을 위한 C++ 라이브러리 + 파이썬 바인딩이에요. 쿼리 점과 가까운 점을 빠르게 찾고, 큰 읽기 전용 파일 기반 인덱스를 메모리 매핑해 여러 프로세스가 공유할 수 있어요.

설치

pip install --user annoy

기본 사용

from annoy import AnnoyIndex
import random

f = 40
t = AnnoyIndex(f, 'angular')      # 'euclidean','manhattan','hamming','dot' 도 가능
for i in range(1000):
    t.add_item(i, [random.gauss(0,1) for _ in range(f)])
t.build(10)                        # 10개 트리
t.save('test.ann')

u = AnnoyIndex(f, 'angular')
u.load('test.ann')                 # mmap 으로 빠르게 로드
print(u.get_nns_by_item(0, 1000))  # item 0 과 가까운 1000개

주요 API

  • AnnoyIndex(f, metric): f 차원 인덱스를 만들어요.
  • add_item(i, v): 항목 i 를 벡터 v 로 추가(정수 id 만).
  • build(n_trees): n_trees 개 트리로 포레스트를 만들어요. 이후 항목 추가 불가.
  • save(fn) / load(fn): 인덱스를 저장/로드해요.
  • get_nns_by_item(i, n, search_k): item 기준 근접 검색.
  • get_nns_by_vector(v, n, search_k): 벡터 기준 근접 검색.

튜닝 파라미터

  • n_trees: 빌드 시 정하는 트리 수. 클수록 정확도↑, 인덱스 크기↑.
  • search_k: 검색 시 탐색 노드 수. 클수록 정확도↑, 속도↓.
  • 둘 다 크게 할수록 정확하지만 느려지고 커져요. 시간/정확도 트레이드오프를 잡아요.

더 알아보기 (Learn more)

출처: Annoy README