YYYEJI

[MAC] 벡터 저장소 FAISS(Facebook AI Similarity Search) 사용한 코드 살펴보기 본문

인공지능 챗봇

[MAC] 벡터 저장소 FAISS(Facebook AI Similarity Search) 사용한 코드 살펴보기

YEJI ⍢ 2025. 8. 5. 13:52
728x90

https://yyyeji.tistory.com/441

 

벡터 저장소(Vector Store)이란?

벡터 저장소란!!비정형 데이터를 벡터(숫자 배열)형태로 저장하고,빠르게 검색할 수 있게 해주는 특수한 데이터베이스에요!단순한 키워드 검색이 아니라 의미 기반 검색이 가능해서유사도가 높

yyyeji.tistory.com

↑↑↑  벡터 저장소가 궁금할 땐  ↑↑↑

 


FAISS(Facebook AI Similarity Search)

효율적인 벡터 유사도 검색 및 클러스터링을 위한 오픈소스 벡터 저장소라고 할 수 있습니다!!

 

 

(긔찮은 건 아니지만 ,, 벡터 저장소 초기화하고 벡터 저장소 로드하는 부분은

같아서 ChromaDB랑 내용이 똑같을 거에요 ㅎㅎ)

 

 

벡터 저장소를 초기화시켜줍니다!

from langchain_community.document_loaders import PyPDFLoader

# PDF 로더 초기화 (근로기준법 문서)
pdf_loader = PyPDFLoader("/content/A.pdf")

# 동기 로딩
pdf_docs = pdf_loader.load()
print("문서의 페이지 수:", len(pdf_docs))

PyPDFLoader()를 통해 로더 객체를 생성해주었습니다.

.load() 함수는 PDF를 읽어서 각 페이지를 하나의 Document 객체로 변환해 리스트에 저장합니다.

 

 

from langchain_text_splitters import RecursiveCharacterTextSplitter

# TikToken 인코더를 사용하여 재귀적 텍스트 분할기 초기화 (토큰 수 기준 분할)
text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
    encoding_name="cl100k_base",
    chunk_size=500,
    chunk_overlap=100,
)

# split_documents() 메서드 사용 : Document 객체를 여러 개의 작은 청크 문서로 분할
chunks = text_splitter.split_documents(pdf_docs)

print(f"생성된 청크 수: {len(chunks)}")
print(f"각 청크의 길이: {list(len(chunk.page_content) for chunk in chunks)}")

# 각 청크의 시작 부분과 끝 부분 확인
for chunk in chunks[:3]:
    print(chunk.page_content[:100] + "---" + chunk.page_content[-100:])
    print("-" * 100)

이 코드는 PDF에서 불러온 문서를 토큰 단위로 적당히 자르(Chunking)는 중입니다.

 

 

RecursiveCharacterTextSplitter.from_tiktoken_encoder()를 통해 토큰 단위로 분할을 했고

chunk_size는 500 토큰,

chunk_overlap 청크 간 100 토큰씩 겹치게 분할하여 맥락을 보존합니다!

 

 

pdf__docs 리스트를 여러 개의 작은 청크로 나눕니다

그러면 이렇게 분할된 데이터들을 확인할 수 있어요 

 

 

이제 FAISS를 사용해서 문서 검색을 해보겠습니다.

query = "탄소 제로 정책에 대해서 알려줘"
results = faiss_db.similarity_search(
    query,
    k=5,
    filter={"source": "/content/[정책브리프 2021-04] 탄소중립 대응을 위한 정부 정책과 동향.pdf"}
)

faiss_db.similarity_search()를 통해 유사도 검색을 할건데 내부 요소는

query → 주어진 쿼리와 가장 유사한 문서 반환

k=5 → 상위 5개의 결과를 반환하도록 지정

filter → 특정 출처의 문서만 검색 가능! 

 

 

chroma랑 마찬가지로 유사도 점수가 포함된 검색이 가능합니다!

query = "탄소 제로 정책에 대해서 알려줘"
results = faiss_db.similarity_search_with_score(
    query,
    k=5,
)

faiss_db.similarity_search_with_score()를 사용하시면 돼요!

 

 

 

↓↓↓  Chroma 코드가 궁금하다면 ??  ↓↓↓

 

[MAC] 벡터 저장소 ChromaDB 사용한 코드 살펴보기

벡터 저장소(Vector Store)이란?벡터 저장소란!!비정형 데이터를 벡터(숫자 배열)형태로 저장하고,빠르게 검색할 수 있게 해주는 특수한 데이터베이스에요!단순한 키워드 검색이 아니라 의미 기반

yyyeji.tistory.com

 

728x90