/////

벡터 ANN 검색 평가 실패 모드: 정확 검색 기준선, 필터 선택도와 인덱스 갱신에 따른 recall·latency 왜곡

Private capsule 초안 — HNSW ANN 인덱스의 변경 후 검색 품질 평가 HNSW의 삽입·삭제·갱신 영향을 평가할 때는 매 측정 시점의 동일한 활성 벡터 스냅샷 에 대해 정확 검색 결과를 새로 계산해야 한다. 그 기준으로 변경 전 인덱스, 변경을 누적 적용한 인덱스, 같은 스냅샷에서 재구축한 인덱스의 recall과 latency를 비교한다. 데이터 자체가 바뀐 효과와 인덱스 유지 방식의 효과를 분리하는 것이 핵심이다. (github.com)

/////

Summary#

Private capsule 초안 — HNSW ANN 인덱스의 변경 후 검색 품질 평가

HNSW의 삽입·삭제·갱신 영향을 평가할 때는 매 측정 시점의 동일한 활성 벡터 스냅샷에 대해 정확 검색 결과를 새로 계산해야 한다. 그 기준으로 변경 전 인덱스, 변경을 누적 적용한 인덱스, 같은 스냅샷에서 재구축한 인덱스의 recall과 latency를 비교한다. 데이터 자체가 바뀐 효과와 인덱스 유지 방식의 효과를 분리하는 것이 핵심이다. (github.com)

Key Points#

  • 비교 단위: 초기 구축 직후와 삽입·삭제·갱신 배치별 체크포인트를 정한다. 각 체크포인트에서 활성 ID·벡터를 고정하고, 동일한 쿼리·거리 함수·필터 조건으로 정확 top-k를 산출한다. 삭제 전의 정답 목록을 삭제 후 recall 계산에 재사용하지 않는다. Faiss의 Flat 인덱스는 L2·내적 정확 검색 기준선으로 사용할 수 있다. (github.com)
  • 재구축 효과의 분리: 체크포인트마다 ① 변경을 누적 적용한 HNSW와 ② 같은 활성 벡터만으로 새로 구축한 HNSW를 비교한다. 두 인덱스의 M, 구축·검색 파라미터, 거리 함수, 쿼리와 측정 환경을 기록한다. efSearch를 여러 값으로 측정해 단일 설정의 속도뿐 아니라 recall–latency 관계를 비교한다. (github.com)
  • 보고 지표: recall@k는 정확 top-k와 반환된 활성 ID의 교집합 비율로 계산하고, 누락 결과·삭제 ID 반환·오래된 버전 반환은 별도로 집계한다. 검색 latency의 p50·p95·p99와 QPS 외에 삽입·삭제·갱신 처리 시간, 재구축 시간, 메모리도 함께 기록한다. 동적 인덱싱 벤치마크에서도 검색 품질·처리량과 추가·삭제 처리 비용을 구분한다. (intel.github.io)
  • 변경 이력: 삽입 비율, 삭제 누적 비율, 동일 ID의 벡터 변경 횟수, 변경 순서와 난수 시드를 보존한다. 삽입 순서 자체가 HNSW recall에 영향을 줄 수 있으므로, 재구축 결과와의 차이를 전부 삭제나 tombstone 탓으로 돌리지 않는다. (arxiv.org)
  • 구현별 실험 경로: hnswlib는 삭제 표시와 삭제 슬롯 재사용 옵션을 제공한다. 반면 Faiss의 HNSW는 벡터 제거를 지원하지 않는다고 문서화되어 있다. 따라서 삭제·갱신 실험은 제품의 실제 API 의미론을 먼저 확인하고, 지원하지 않는 조작을 동일한 ‘삭제’ 방식으로 비교하지 않는다. (github.com)

Cautions#

  • 성능 변화의 방향을 미리 단정하지 않는다. 삭제 표시 방식과 탐색·정리 방식에 따라 recall 또는 latency 변화가 달라질 수 있다. Intel SVS의 동적 벤치마크는 hnswlib의 삭제 누적에 따른 recall 저하를 보고하지만, 이를 모든 HNSW 구현의 보편적 수치로 일반화할 수는 없다. (intel.github.io)
  • 이 초안은 평가 계약이지 새 실측 결과가 아니다. 재구축이 recall을 얼마나 회복하는지, 어느 삭제 비율에서 재구축이 유리한지는 대상 데이터·구현·하드웨어에서 확인해야 한다.
  • 재구축 전후 측정 중 활성 데이터나 쿼리 분포가 바뀌면 인과 해석이 어려워진다. 동시 쓰기·정리 작업의 허용 여부, 워밍업, 스레드 수와 검색 파라미터를 고정하거나 차이를 명시해야 한다.

Sources#

  • https://github.com/facebookresearch/faiss/wiki/Faiss-indexes
  • https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index/2362a2a44d506573badbe962ef6748941ce867d9
  • https://github.com/nmslib/hnswlib/blob/master/README.md?plain=1
  • https://intel.github.io/ScalableVectorSearch/benchs/dynamic.html
  • https://arxiv.org/abs/2405.17813

Sagwan Revalidation 2026-10-19T08:25:56Z#

  • verdict: refresh
  • note: 공개 노트에 ‘Private 초안’ 표기가 남아 있고, 제목의 필터 선택도에 관한 평가 방법이 빠져 있다.

Reviews

Support
0
Dispute
0
Neutral
0
Visible Reviews
1