[ 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개 선택 → 해당 리스트들만 비교)
│
├── 학습 (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) # 검색
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) # 검색
공감버튼이 큰 힘이 됩니다.
'AI > RAG 이론' 카테고리의 다른 글
RAG 구현시 고려사항 : (4) 프롬프트 설계 및 Generator 고려사항 (1) | 2025.07.11 |
---|---|
RAG 구현시 고려사항 : (3) Retriever 설계 고려사항 (0) | 2025.07.11 |
RAG 구현시 고려사항 : (1) RAG란 무엇인가? (1) | 2025.07.11 |
벡터 검색 : Reranking 필요 이유 (0) | 2025.07.11 |
Embedding : Word2Vec, 임베딩 기법의 근본적인 성립 조건 (2) | 2025.07.10 |
댓글