벡터 데이터베이스 입문
벡터 데이터베이스가 필요한 이유, 로컬 유사도 검색을 위한 FAISS, 인공지능 검색을 위한 임베딩 저장을 알아보십시오.
벡터 데이터베이스 입문은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
정확히 일치하는 항목을 넘어
기존 데이터베이스는 정확한 값(WHERE name = "x")으로 행을 찾습니다. 하지만 인공지능은 의미를 포착하는 벡터인 임베딩을 사용하므로, 정확히 일치하는 항목이 아니라 쿼리와 가장 유사한 항목을 찾는 경우가 많습니다.
벡터 데이터베이스는 이러한 유사도 검색을 빠르게 수행하기 위해 존재합니다.
임베딩이란 무엇인가
임베딩은 텍스트, 이미지 또는 오디오를 나타내는 숫자 목록(벡터)입니다. 이를 사용하면 유사한 항목들이 벡터 공간에서 서로 가까이 위치합니다.
의미 기반 검색, 추천, 검색 증강 생성(RAG)은 모두 임베딩을 기반으로 합니다.
import numpy as np
# A toy 4-dim embedding for a sentence
vec = np.array([0.12, -0.43, 0.88, 0.05], dtype="float32")
print(vec.shape) # (4,)일반 데이터베이스를 사용하지 않는 이유
수백만 개의 벡터와 쿼리를 무차별 대입 방식으로 반복 비교하면 느립니다. 벡터 데이터베이스는 특수한 인덱스와 거리 계산을 사용하여 밀리초 단위로 최근접 이웃을 반환합니다.
또한 벡터와 함께 메타데이터를 처리하고, 확장 및 영속화할 수 있습니다.
유사도 측정
가까운 정도는 거리 척도로 측정합니다.
- L2 (유클리드) — 직선 거리이며, 값이 작을수록 더 가까움
- 코사인 — 벡터 사이의 각도이며, 텍스트에 적합함
FAISS는 여러 척도를 지원하며, 여기서는 L2를 사용하겠습니다.
FAISS 소개
FAISS(페이스북 인공지능 유사도 검색)는 벡터 검색을 위한 빠르고 무료인 라이브러리입니다. 서버 없이 로컬에서 실행되므로 학습과 프로토타이핑에 적합합니다.
import faiss
import numpy as np
# pip install faiss-cpuIndexFlatL2로 인덱스 만들기
IndexFlatL2(dim)은 L2 거리를 사용하여 평면 방식(무차별 대입 방식의 정확한) 인덱스를 만듭니다. 벡터의 차원을 알려 주어야 합니다.
"플랫"은 정확한 결과를 의미하므로, 소규모에서 중간 규모의 컬렉션에 적합합니다.
import faiss
dim = 4
index = faiss.IndexFlatL2(dim)
print(index.is_trained) # True (flat index needs no training)index.add로 벡터 추가하기
임베딩을 (n, dim) 형태의 2차원 float32 NumPy 배열로 전달합니다. index.add가 이를 저장하고, index.ntotal이 개수를 알려 줍니다.
import numpy as np
embeddings = np.random.random((100, dim)).astype("float32")
index.add(embeddings)
print(index.ntotal) # 100index.search로 검색하기
index.search(query, k)는 가장 가까운 k개의 벡터를 반환합니다. 거리 배열 D와 인덱스 배열 I이라는 두 배열을 반환하며, 인덱스는 벡터를 추가한 순서상의 위치입니다.
query = np.random.random((1, dim)).astype("float32")
D, I = index.search(query, k=5)
print("nearest ids:", I[0])
print("distances:", D[0])인덱스에서 항목으로 돌아가기
FAISS는 원래 데이터가 아니라 위치를 반환합니다. 인덱스 위치와 실제 항목을 연결하는 별도의 목록(또는 데이터베이스)을 유지해야 결과를 조회할 수 있습니다.
docs = ["doc about cats", "doc about dogs", "doc about cars"]
# after search:
for pos in I[0]:
print(docs[pos]) # map id -> original document작은 의미 기반 검색 처리 과정
전체 패턴은 다음과 같습니다. 문서를 임베딩하고, 인덱스에 추가하고, 쿼리를 임베딩한 다음, 검색하여 일치하는 문서를 반환합니다. (문장 트랜스포머와 같은 임베딩 모델이 벡터를 생성합니다.)
import faiss, numpy as np
# doc_vectors: (n, dim) from an embedding model
index = faiss.IndexFlatL2(doc_vectors.shape[1])
index.add(doc_vectors)
# query_vec: (1, dim) embedding of the user query
D, I = index.search(query_vec, k=3)
results = [docs[i] for i in I[0]]
print(results)벡터 데이터베이스는 언제 사용할까요
다음이 필요할 때 벡터 데이터베이스를 사용합니다.
- 텍스트나 이미지에 대한 의미 기반 검색
- 유사도 기반 추천
- RAG: LLM에 필요한 관련 컨텍스트 검색
FAISS는 로컬 환경에서 사용하기 좋고, 관리형 옵션(파인콘, 위비에이트, 피지벡터)은 영속성과 확장성을 더해 줍니다.
빠른 확인: FAISS 검색
FAISS 인덱스에서 index.search(query, k=5)를 호출합니다.
복습: 벡터 데이터베이스
유사도 검색의 기초를 배웠습니다.
- 임베딩은 유사한 항목들을 벡터 공간에서 서로 가깝게 배치합니다.
- 벡터 데이터베이스는 대규모 환경에서 최근접 이웃 검색을 빠르게 수행합니다.
- FAISS의
IndexFlatL2(dim)은 정확한 L2 인덱스를 만듭니다. index.add(embeddings)는 벡터를 저장하고,index.search(query, k)는 거리와 인덱스를 반환합니다.- 반환된 인덱스를 원래 항목에 다시 연결합니다.
이것으로 데이터베이스 단원을 마칩니다. 다음 주제: 깃으로 인공지능 프로젝트 구조화하기입니다.
자주 묻는 질문
“벡터 데이터베이스 입문” 강의는 무료인가요?
네 — “벡터 데이터베이스 입문” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
“벡터 데이터베이스 입문”에서 뭘 배우나요?
벡터 데이터베이스가 필요한 이유, 로컬 유사도 검색을 위한 FAISS, 인공지능 검색을 위한 임베딩 저장을 알아보십시오. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“벡터 데이터베이스 입문” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.