Investment-Assistant

LangChain으로 PDF 기반 검색기 구현하기: OpenAI Embeddings와 FAISS 활용 [9]

HeyTeddy 2024. 11. 22. 04:43
반응형

이 글에서는 LangChainOpenAI Embeddings, 그리고 FAISS를 활용하여 PDF 문서를 기반으로 질문-응답 검색기를 구현하는 방법을 소개합니다.
이전에 진행했던 PDF 문서 파싱 및 청크 단위 분리 작업을 확장하여, 문서를 임베딩으로 변환한 후 검색 기능을 구현합니다.

주요 구현 과정

  1. PDF 문서 파싱
  2. 텍스트를 청크 단위로 분리
  3. 임베딩 변환 및 벡터 저장
  4. 질문을 벡터로 변환하여 유사도 기반 검색 수행

PDF 검색기 구현 코드

아래는 검색기를 구현하기 위한 Python 코드입니다:

from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS  # FAISS는 벡터 DB 겸 검색기로 활용
import config

# OpenAI Embedding 모델 초기화
embedding_model = OpenAIEmbeddings(api_key=config.OPENAI_API_KEY)

# PDF 문서 로드
loader = PyPDFLoader("C:/LLM_project/investment assistant/test.pdf")
document = loader.load()  # 전체 페이지 로드

# 텍스트를 청크 단위로 분리
text_splitter = CharacterTextSplitter(
    separator='. ',  # 문장 단위로 구분
    chunk_size=500,  # 청크 크기
    chunk_overlap=100,  # 청크 간 중복
    length_function=len  # 길이 측정 함수
)
texts = text_splitter.split_documents(document)

# 청크 텍스트를 임베딩으로 변환 후 벡터 DB에 저장
db = FAISS.from_documents(texts, embedding_model)

# 검색기로 활용하기 위한 설정
retriever = db.as_retriever()

# 검색 예제: 질문 입력
docs = retriever.invoke("2021년 출산율은?")  # 유사도 비교를 통해 가장 유사한 벡터 반환
print(docs)

요약

이 글에서는 LangChain, OpenAI Embeddings, 그리고 FAISS를 사용해 PDF 문서 기반 검색기를 구현하는 방법을 알아보았습니다. 이 검색기는 PDF 문서를 분석하거나 특정 정보를 빠르게 찾는 데 유용합니다.

여러분도 직접 구현해 보고, 자신만의 PDF 기반 검색기를 만들어보세요! 🚀

위 과정을 통해 대규모 문서를 다루는 효율적인 검색 시스템을 구축할 수 있습니다.

반응형