문서 검색 최적화

LangChain을 활용한 RAG(검색 증강 생성)

Meri Nova

Machine Learning Engineer

RAG의 R...

벡터 데이터베이스에서 문서를 검색하여 응답을 생성하는 애플리케이션으로 전송하는 모습.

LangChain을 활용한 RAG(검색 증강 생성)

밀집(Dense)

청크를 0이 아닌 성분을 가진 단일 벡터로 인코딩

유사한 용어들이 함께 그룹화된 벡터 공간: 대형 언어 모델, AI, 머신 러닝.

  • 장점: 의미론적 의미 포착
  • 단점: 높은 연산 비용
LangChain을 활용한 RAG(검색 증강 생성)

밀집(Dense)

청크를 0이 아닌 성분을 가진 단일 벡터로 인코딩

의미적으로 유사한 용어들이 더 가깝게 그룹화된 벡터 공간 내 임베딩된 용어들.

  • 장점: 의미론적 의미 포착
  • 단점: 높은 연산 비용

희소(Sparse)

대부분 0인 성분으로 단어 매칭을 통해 인코딩

특정 용어가 포함된 문서 중 가장 많은 용어를 포함한 문서가 강조 표시된 모습.

  • 장점: 정밀성, 설명 가능성, 희귀 단어 처리
  • 단점: 일반화 능력
LangChain을 활용한 RAG(검색 증강 생성)

희소 검색 방법

TF-IDF: 문서의 고유한 단어를 사용하여 문서를 인코딩

특정 용어가 포함된 문서 중 가장 많은 용어를 포함한 문서가 강조 표시된 모습.

BM25: 고빈도 단어가 인코딩을 포화시키는 문제를 완화

LangChain을 활용한 RAG(검색 증강 생성)

BM25 검색

from langchain_community.retrievers import BM25Retriever

chunks = [ "Python was created by Guido van Rossum and released in 1991.", "Python is a popular language for machine learning (ML).", "The PyTorch library is a popular Python library for AI and ML." ]
bm25_retriever = BM25Retriever.from_texts(chunks, k=3)
LangChain을 활용한 RAG(검색 증강 생성)

BM25 검색

results = bm25_retriever.invoke("When was Python created?")
print("Most Relevant Document:")
print(results[0].page_content)
Most Relevant Document:
Python was created by Guido van Rossum and released in 1991.
  • Python was created by Guido van Rossum and released in 1991."
  • "Python is a popular language for machine learning (ML)."
  • "The PyTorch library is a popular Python library for AI/ML."
LangChain을 활용한 RAG(검색 증강 생성)

RAG에서의 BM25

retriever = BM25Retriever.from_documents(
    documents=chunks, 
    k=5
)

chain = ({"context": retriever, "question": RunnablePassthrough()} | prompt | llm | StrOutputParser() )
1 https://www.datacamp.com/blog/what-is-retrieval-augmented-generation-rag
LangChain을 활용한 RAG(검색 증강 생성)

RAG에서의 BM25

print(chain.invoke("How can LLM hallucination impact a RAG application?"))
The RAG application may generate responses that are off-topic or inaccurate.
LangChain을 활용한 RAG(검색 증강 생성)

연습해 봅시다!

LangChain을 활용한 RAG(검색 증강 생성)

Preparing Video For Download...