인공지능 - FAISS (Facebook AI Similarity Search), 대규모 벡터 검색의 핵심
대규모 벡터 검색의 핵심 - FAISS (Facebook AI Similarity Search)
🔍 FAISS란? LLM 실습에서 벡터 검색이 중요한 이유
대형 언어 모델(LLM)을 활용한 질문 응답 시스템이나 RAG(Retrieval-Augmented Generation)를 구현할 때, 우리는 “문서 중 어떤 게 이 질문에 관련 있을까?”를 먼저 알아야 합니다.
이때 쓰는 도구가 바로 FAISS (Facebook AI Similarity Search)입니다.
FAISS는 고차원 벡터 데이터에서 가장 유사한 항목을 빠르고 효율적으로 검색할 수 있게 도와주는 오픈소스 라이브러리입니다.
특히 LLM과 함께 외부 지식 검색 → 생성 모델로 답변 생성 흐름에서 필수 도구로 자리잡고 있습니다.
🧠 실습의 목적: LLM은 ‘기억력’이 짧다
LLM은 똑똑하지만, 질문 하나로 모든 걸 알 수는 없습니다.
그래서 LLM에게 도움을 주기 위해 우리는 외부 문서에서 관련 내용을 검색(Retrieval)하고,
그 정보를 바탕으로 답변을 생성(Generation)하는 구조인 RAG를 사용합니다.
✅ 실습에서 우리가 하고 싶은 일
- PDF 같은 문서를 파싱하고,
- 각 문서를 작은 조각으로 나누고,
- 각 조각을 벡터로 변환(임베딩)하고,
- 질문도 벡터로 만들어서,
- 가장 가까운 문서 조각을 검색해 GPT에게 주는 것.
👉 여기서 문서 벡터들 중, 질문 벡터와 가장 가까운 것을 빠르게 찾는 것이 핵심입니다.
그 역할을 하는 게 바로 FAISS입니다.
🧩 FAISS의 기본 메커니즘
1. 벡터화 (Embedding)
먼저 문서를 GPT에게 이해 가능한 벡터로 바꿉니다.
예: “창업자금 예산은 100억 원입니다.” → [0.1, 0.7, -0.3, ..., 0.25]
(1536차원 벡터)
문서가 많아지면 벡터도 수천, 수만 개가 됩니다.
이걸 효율적으로 저장하고, 질문과 가장 가까운 걸 빠르게 찾기 위해 FAISS가 필요합니다.
2. 인덱싱 (Indexing)
import faiss
index = faiss.IndexFlatL2(1536) # 1536차원 벡터를 위한 L2 거리 인덱스
index.add(vectors) # 문서 임베딩들을 저장
- FAISS는 이 벡터들을 인덱스 구조로 저장합니다.
- 추후 질문 벡터와 거리 계산을 할 때 빠르게 검색할 수 있도록 준비해둡니다.
3. 유사도 기반 검색
D, I = index.search(query_vector, k=3) # 가장 가까운 3개 문서 검색
query_vector
: 사용자가 입력한 질문을 임베딩한 벡터- FAISS는 수만 개의 문서 중에서 가장 가까운 3개를 빠르게 찾아냅니다.
⚙️ FAISS가 제공하는 인덱스 종류
FAISS는 데이터 양과 정확도/속도 요구사항에 따라 다양한 인덱스를 제공합니다:
인덱스 유형 | 설명 | 특징 |
---|---|---|
IndexFlatL2 |
모든 벡터를 직접 비교 | 가장 정확하지만 느림 |
IVF (Inverted File) |
벡터를 군집화하고 일부만 비교 | 속도 빠름, 정확도 약간 손해 |
HNSW |
그래프 기반 탐색 | 빠르고 정확도 높음, 메모리 사용 높음 |
실습에서는
IndexFlatL2
로 시작하고, 데이터가 많아지면IVF
나HNSW
로 전환해도 좋습니다.
🧪 실습 예시 코드
import faiss
import numpy as np
# 문서 벡터 (예: 100개 문서, 1536차원 임베딩)
vectors = np.random.rand(100, 1536).astype('float32')
# 쿼리 벡터 (사용자 질문)
query = np.random.rand(1, 1536).astype('float32')
# 인덱스 생성 및 저장
index = faiss.IndexFlatL2(1536)
index.add(vectors)
# 가장 유사한 문서 5개 검색
distances, indices = index.search(query, k=5)
🤝 FAISS와 LLM은 어떻게 연결될까?
📌 RAG 구조
사용자 질문 → [임베딩] → 벡터로 변환
↓
FAISS 검색 → 관련 문서 조각 검색
↓
LLM(GPT 등) → 답변 생성
- GPT는 문서를 직접 검색하지 않습니다.
- FAISS가 먼저 문맥에 맞는 자료를 찾아주고, GPT는 그걸 읽고 답변만 잘 쓰면 됩니다.
🧾 결론
FAISS는 LLM 기반 질문 응답 시스템에서 문맥 이해력을 극대화하는 핵심 도구입니다.
텍스트 데이터를 벡터로 변환한 뒤, FAISS를 통해 빠르고 정확하게 검색하면,
LLM은 그 문서를 기반으로 풍부하고 관련성 높은 답변을 생성할 수 있습니다.
📌 LLM이 잘 대답하기 위해선, 좋은 문서를 검색해주는 시스템이 먼저 필요합니다.
FAISS는 그 검색의 핵심 기술입니다.
댓글남기기