Vector Search 이해: FAISS와 HNSW는 왜 필요한가

난이도: 중급

태그: rag,vector_search,faiss,hnsw

RAG에서 중요한 것은 "좋은 답변" 이전에 "맞는 문서를 빨리 찾는 것"이다. vector search는 그 검색 엔진 역할을 한다.

임베딩 모델이 질문과 문서를 벡터로 바꿔도, 그다음에 빠르게 가장 가까운 벡터를 찾아야 실제 시스템이 된다. 이때 exact search만 쓰면 느릴 수 있어서 ANN 기법이 필요하다.

즉 embedding 모델이 의미 공간을 만들고, vector search가 그 공간에서 실제로 검색을 수행한다. 둘 중 하나만 좋아서는 RAG가 잘 동작하지 않는다. 임베딩이 좋아도 검색이 느리면 시스템이 못 쓰고, 검색이 빨라도 임베딩이 나쁘면 관련 문서를 못 찾는다.

그래서 FAISS를 따로 외우기보다, contrastive learning 기반 임베딩과 함께 보는 편이 좋습니다. 실제 시스템에서는 두 단계가 붙어서 하나의 retrieval 파이프라인을 이룹니다.

시각 자료로 먼저 보기

HNSW 다층 탐색 구조
HNSW의 핵심은 위층의 성긴 그래프에서 대략적인 위치를 찾고, 아래층으로 내려오며 점점 정밀하게 탐색하는 다층 구조다.
원본 / 라이선스 · Rose electric · CC BY 4.0
Nearest neighbor graph 예시
벡터 검색을 그래프 관점으로 볼 때 가장 가까운 이웃 연결이 어떻게 생기는지 보여주는 기본 그림이다.
원본 / 라이선스 · David Eppstein · CC0
k-NN 개념도
질의점 주변의 최근접 이웃을 기준으로 답을 정하는 k-NN 개념도. exact search와 ANN의 출발점을 설명할 때 유용하다.
원본 / 라이선스 · Pkuwangyan06 · CC BY-SA 4.0

1. 핵심 유사도

sim(q,d)=q·dqd

코사인 유사도는 두 벡터 방향이 얼마나 비슷한지 본다. 질문과 문서 임베딩이 비슷할수록 관련 문서일 가능성이 높다.

이때 중요한 것은 "같은 단어가 있느냐"보다 "같은 의미 방향을 가리키느냐"다. 그래서 vector search는 키워드 검색보다 더 의미 기반의 retrieval을 가능하게 한다.

2. Exact search vs ANN

이때 중요한 점은 FAISS나 HNSW가 "의미를 더 잘 이해하는 모델"은 아니라는 것입니다. 의미 품질은 주로 embedding model에서 결정되고, FAISS/HNSW는 그 의미 공간 안에서 얼마나 빠르고 효율적으로 찾을지를 담당합니다.

3. FAISS와 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 품질 문제를 볼 때는 두 가지를 분리해서 봐야 합니다.

이 구분이 잡혀야 "contrastive objective를 바꿔야 하는가"와 "FAISS 설정을 바꿔야 하는가"를 실험적으로 나눠 판단할 수 있습니다.

4. 왜 중요한가

RAG 품질은 생성 모델만의 문제가 아니다. retrieval recall이 낮으면 뒤의 LLM이 아무리 좋아도 정답 근거를 못 찾는다.

실무에서는 특히 데이터 규모가 커질수록 index 선택이 latency, memory, recall을 함께 바꿉니다. 그래서 작은 데이터에서는 Flat도 괜찮지만, 더 큰 스케일에서는 IVF, PQ, HNSW 같은 구조를 같이 검토하게 됩니다.

5. 체크리스트