Vector Search 이해: FAISS와 HNSW는 왜 필요한가
임베딩 모델이 질문과 문서를 벡터로 바꿔도, 그다음에 빠르게 가장 가까운 벡터를 찾아야 실제 시스템이 된다. 이때 exact search만 쓰면 느릴 수 있어서 ANN 기법이 필요하다.
즉 embedding 모델이 의미 공간을 만들고, vector search가 그 공간에서 실제로 검색을 수행한다. 둘 중 하나만 좋아서는 RAG가 잘 동작하지 않는다. 임베딩이 좋아도 검색이 느리면 시스템이 못 쓰고, 검색이 빨라도 임베딩이 나쁘면 관련 문서를 못 찾는다.
그래서 FAISS를 따로 외우기보다, contrastive learning 기반 임베딩과 함께 보는 편이 좋습니다. 실제 시스템에서는 두 단계가 붙어서 하나의 retrieval 파이프라인을 이룹니다.
시각 자료로 먼저 보기
1. 핵심 유사도
코사인 유사도는 두 벡터 방향이 얼마나 비슷한지 본다. 질문과 문서 임베딩이 비슷할수록 관련 문서일 가능성이 높다.
이때 중요한 것은 "같은 단어가 있느냐"보다 "같은 의미 방향을 가리키느냐"다. 그래서 vector search는 키워드 검색보다 더 의미 기반의 retrieval을 가능하게 한다.
2. Exact search vs ANN
- Exact search: 정확하지만 대규모 데이터에서 느릴 수 있다.
- ANN: 약간의 정확도 손실을 감수하고 훨씬 빠르게 찾는다.
이때 중요한 점은 FAISS나 HNSW가 "의미를 더 잘 이해하는 모델"은 아니라는 것입니다. 의미 품질은 주로 embedding model에서 결정되고, FAISS/HNSW는 그 의미 공간 안에서 얼마나 빠르고 효율적으로 찾을지를 담당합니다.
3. FAISS와 HNSW
- FAISS: 다양한 인덱스 구조(Flat, IVF, PQ 등)를 제공하는 라이브러리
- HNSW: 그래프 기반 탐색으로 빠른 최근접 이웃 검색을 수행
즉 FAISS는 라이브러리 이름이고, 그 안에 Flat 같은 exact 인덱스부터 IVF, PQ 같은 가속/압축 구조까지 여러 선택지가 들어 있습니다. HNSW는 그래프 탐색 아이디어에 더 가깝고, FAISS 밖에서도 널리 구현됩니다.
3.5 Contrastive Learning과 연결
query/document pair
-> contrastive training
-> embedding model
-> document vectors 생성
-> FAISS index 구축
-> query vector 생성
-> nearest neighbor search
이 흐름에서 retrieval 품질 문제를 볼 때는 두 가지를 분리해서 봐야 합니다.
- 임베딩 문제: 관련 문서가 애초에 가까운 벡터로 배치되지 않음
- 인덱스 문제: 가까운 벡터는 있는데 속도나 ANN 근사 때문에 못 찾음
이 구분이 잡혀야 "contrastive objective를 바꿔야 하는가"와 "FAISS 설정을 바꿔야 하는가"를 실험적으로 나눠 판단할 수 있습니다.
4. 왜 중요한가
RAG 품질은 생성 모델만의 문제가 아니다. retrieval recall이 낮으면 뒤의 LLM이 아무리 좋아도 정답 근거를 못 찾는다.
실무에서는 특히 데이터 규모가 커질수록 index 선택이 latency, memory, recall을 함께 바꿉니다. 그래서 작은 데이터에서는 Flat도 괜찮지만, 더 큰 스케일에서는 IVF, PQ, HNSW 같은 구조를 같이 검토하게 됩니다.
5. 체크리스트
- 왜 vector search가 RAG의 핵심 병목 중 하나인가?
- Exact search와 ANN tradeoff를 설명할 수 있는가?
- FAISS와 HNSW의 큰 차이를 말할 수 있는가?