논문
Search parameters
- ef
- 검색 중 nearest neighbors를 저장하는 dynamic list의 크기. ef가 클수록 검색이 정확해지지만 느려진다.
- k보다 작을 수 없다.
- ef 값의 범위는 k~dataset size
- k
- 쿼리 결과로 반환되는 nearest neighbors의 수
- knn_query 함수는 nearest neighbor의 label과 각각에 대한 거리를 두 개의 numpy array로 반환한다.
- k개만큼의 neighbor를 찾을 수 없는 경우 exception 발생
Construction parameters
- M
- index를 만드는동안 생성되는 새로운 element에 대한 bi-directional link의 수
- reasonable range는 2~100
- M이 클수록 차원이 높거나 recall이 높은 데이터셋에 유리
- 또한 M은 memory consumption을 결정한다. 대충 M * 8-10 bytes per stored element 라고 생각하면 됨
- M을 설정해주지 않으니 무작위 vertex에서 아래와 같은 오류 발생
Cannot return the results in a contigious 2D array. Probably ef or M is to small
-
M = 64로 설정하고 해결됨
-
ef_construction
- ef와 같은 의미지만, ef_construction은 index_time/index_accuracy를 조정한다.
- ef_construction이 클수록 construction에 오래 걸리고, index의 성능이 좋아진다.
- 하지만 무조건 비례하는 것은 아니고, ef_construction을 증가시키는 것이 성능에 더이상 영향을 주지 못하는 지점이 있다.
- ef_construction이 적정한지 알기 위해서는 ef = ef_construction일때 M nearest neighbor에 대한 recall을 확인하면 된다. recall이 0.9보다 낮은 경우, 개선의 여지가 있다는 의미.
-
num_elements
- index에 들어갈 element의 maximum number