AI/RAG 이론

벡터 데이터베이스 인덱스: IVF 설명

데이터 쿡북 2025. 7. 11. 12:30
[ chatGPT를 이용해 생성한 답변을 참고합니다. ]

벡터 데이터베이스의 IVF란?

벡터 데이터베이스에서 IVF (Inverted File Index, 역파일 인덱스) 는 고차원 벡터의 근사 최근접 이웃 검색 (ANN, Approximate Nearest Neighbor)을 빠르게 하기 위한 대표적인 인덱싱 기법 중 하나입니다. 특히 FAISS 같은 라이브러리에서 많이 사용됩니다.


✅ IVF (Inverted File Index) 개념

1. 기본 아이디어

고차원 벡터들을 직접 비교하지 않고, 벡터들을 여러 개의 클러스터(버킷)로 먼저 분할해두고, 검색 시 관련된 몇 개의 클러스터에서만 비교를 수행함으로써 속도를 높이는 방식입니다.

 


🔧 구성 방식

1. 학습 단계 (Training)

  • 전체 벡터 중 일부를 샘플링해서 K-means clustering을 적용.
  • 이로 인해 nlist 개의 중심 벡터(centroid)가 생김 → 이게 각각의 버킷을 대표함.

2. 인덱싱 단계

  • 각 벡터를 가장 가까운 중심점(클러스터)에 할당.
  • 즉, 벡터 → 해당 클러스터의 inverted list에 저장됨.

3. 검색 단계 (Query)

  • 쿼리 벡터에 대해 가장 가까운 중심점 nprobe 개를 찾음.
  • 이 중심점들과 연결된 클러스터들 안의 벡터들과만 비교함.

ChatGPT의 말:

IVF (Inverted File Index) 구조 예시
 
 

위 그림은 IVF (Inverted File Index) 구조를 2차원 평면에 시각화한 예시입니다.

  • 각 색깔 구역은 클러스터 (Inverted List) 를 나타냅니다.
  • X 표시는 클러스터 중심점 (centroid) 입니다.
  • * 표시는 쿼리 벡터이며, 검색 시 이 쿼리와 가까운 클러스터들만 조회합니다 (nprobe 개).
  • 전체 벡터 중에서 일부만 비교하므로 검색 속도가 빠릅니다.

🧠 주요 파라미터

파라미터설명
nlist 전체 클러스터 수 (클러스터의 개수)
nprobe 검색 시 확인할 클러스터 개수 (속도 vs 정확도 trade-off)
 

📊 IVF의 장점 vs 단점

항목내용
✅ 장점 고차원 벡터에서도 빠른 검색 가능, 대용량 데이터에 유리
❌ 단점 정확도가 약간 떨어질 수 있음 (근사 검색), 클러스터 수 및 nprobe 설정이 성능에 큰 영향
 

💡 시각적 요약 (구조)

전체 벡터 공간

├── 학습 (KMeans로 nlist개 클러스터 생성)
│     ├─ centroid 1 → inverted list 1 (여러 벡터 저장)
│     ├─ centroid 2 → inverted list 2
│     └─ ...

└── 검색 (쿼리 벡터 → 가까운 centroid nprobe개 선택 → 해당 리스트들만 비교)
 
 
 

✅ 실제 사용 예 (FAISS)

import faiss

d = 128        # 벡터 차원
nlist = 100    # 클러스터 수
quantizer = faiss.IndexFlatL2(d)  # 거리 측정기 (L2 기반)
index = faiss.IndexIVFFlat(quantizer, d, nlist, faiss.METRIC_L2)

index.train(data)       # KMeans 학습
index.add(data)         # 인덱싱
index.nprobe = 10       # 검색 시 확인할 클러스터 수
D, I = index.search(query, k)  # 검색

 

공감버튼이 큰 힘이 됩니다.