rag+rerank (ollama-llama3, qdrant) -2

이우철·2025년 7월 10일

이전 컨텐츠에서 pdf를 청크하여 백터 디비에 넣고 검색까지 해보았다
오늘은 리랭크다 (rerank)

  • reranking : 성능향상 위해...
    Reranking은 Qdrant에서 1차로 검색된 문서들 중 가장 관련성이 높은 문서를 다시 한번 정렬하여 LLM에 전달되는 정보의 질을 높이는 과정임. 이를 통해 LLM의 환각(hallucination)을 줄이고 답변의 정확도를 높일 수 있음.
  1. reranking 모델 로드
    sentence-transformers 라이브러리에서 크로스-인코더(Cross-Encoder) 모델을 사용하여 Reranking을 수행. 이 모델은 두 문장(쿼리와 검색된 문서) 사이의 유사도 점수를 계산함.

from sentence_transformers import CrossEncoder

# Reranking 모델 로드
# 'cross-encoder/ms-marco-TinyBERT-L-2'는 좋은 성능을 보이는 작은 모델입니다.
# 더 큰 모델을 원한다면 'cross-encoder/ms-marco-MiniLM-L-6-v2' 등을 고려할 수 있습니다.
reranker_model = CrossEncoder('cross-encoder/ms-marco-TinyBERT-L-2')
  1. reranking 함수 구현
    검색된 문서들과 쿼리를 활용하여 랭킹 점수를 계산하고
    높은 점수순으로 정렬함

def rerank_documents(query, documents, reranker, top_k=3):
    # 쿼리와 각 문서의 쌍을 생성
    pairs = [(query, doc.page_content) for doc in documents]
    # Reranking 점수 계산
    scores = reranker.predict(pairs)

    # 문서와 점수를 묶어서 정렬
    scored_documents = sorted(zip(documents, scores), key=lambda x: x[1], reverse=True)

    # 상위 top_k 문서 반환
    return [doc for doc, score in scored_documents[:top_k]]
  1. Reranking을 포함한 RAG 파이프라인:
    RAG 체인에 Reranking 단계를 추가.
    LangChain의 ContextualCompressionRetriever를 사용.
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import DocumentCompressor

# 사용자 정의 압축기 (Reranking 로직을 포함)
class RerankCompressor(DocumentCompressor):
    def __init__(self, reranker_model, top_n=3):
        self.reranker_model = reranker_model
        self.top_n = top_n

    def compress_documents(self, documents, query, callbacks=None):
        if not documents:
            return []
        reranked_docs = rerank_documents(query, documents, self.reranker_model, self.top_n)
        return reranked_docs

# Reranking 압축기 초기화
rerank_compressor = RerankCompressor(reranker_model, top_n=3) # 상위 3개 문서만 선택

# ContextualCompressionRetriever를 사용하여 Qdrant 리트리버와 Reranker 결합
compression_retriever = ContextualCompressionRetriever(
    base_retriever=retriever,
    base_compressor=rerank_compressor
)

# Reranking이 적용된 QA 체인
qa_rerank_chain = RetrievalQA.from_chain_type(
    llm=ollama_llm,
    chain_type="stuff",
    retriever=compression_retriever,
    return_source_documents=True
)

# Reranking 적용 후 질문 및 답변 생성
query_rerank = "당신이 제공하는 주요 서비스는 무엇인가요?" # 질문을 입력하세요
result_rerank = qa_rerank_chain.invoke({"query": query_rerank})

print("\n--- RAG (Rerank 적용) 답변 ---")
print(f"질문: {query_rerank}")
print(f"답변: {result_rerank['result']}")
print("\n--- 참조 문서 (Reranked) ---")
for doc in result_rerank['source_documents']:
    print(f"페이지: {doc.metadata.get('page')}, 소스: {doc.metadata.get('source')}")
    print(f"내용: {doc.page_content[:200]}...")
    print("-" * 20)

Reranker 구현 방식

  • Bi-Encoder vs Cross-Encoder
방식설명장점단점
Bi-Encoder질문과 문서를 각각 임베딩 후 유사도 계산빠름정확도 낮음
Cross-Encoder질문과 문서를 함께 입력해 유사도 계산정확도 높음느림, 비용 높음

대부분의 RAG 시스템은 벡터 검색 → Reranker로 재정렬하는 2단계 전략을 사용함


--- RAG 답변 ---
질문: SAP AI Core에서 모델을 학습시키는 기능이 있나요?
답변: 예, SAP AI Core는 모델을 학습시키기 위한 기능이 있습니다.

--- 참조 문서 ---
페이지: 253, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: 14.2  전송  중  암호화
14.1  데이터,  데이터  흐름  및  프로세스의  보안  기능
14.3  사용자  인증  및  관리
보안  조치
백업  및  복원  기능이  구현  및  테스트되었습니다.삼
보안
포즈
전송  제어/통신
2
층
1
목적에  따른  접근  통제  및  분리
설명
지속성  있는  애플리케이션  데이터
4
특권”과  “직무의  ...
--------------------
페이지: 21, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: 힘내  레포
기계  학습  모델의  최적화된  배포를  위한  것입니다.  배포  템플릿  사용
아르고  워크플로우
교육을  저장하고  워크플로와  템플릿을  제공하기  위해
KServe  표기법.
SAP  AI  런치패드
AI  코어).  SAP  AI  Launchpad는  Generative  AI를  통해  생성  AI  기능도  제공합니다.
무엇
...
--------------------
페이지: 281, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: 2.  {{apiurl}}/v2/admin/repositories  엔드포인트에  GET  요청을  제출합니다.  3.  문제가  지속되면  모니 터링  및  문제  해결  
[페이지  266]에  설명된  대로  SAP  지원  센터에  문의하십시오.
1.  모든  환경  변수가  SAP  AI  Core  서비스  키와  일치하는지  확인하세요.  구체적...
--------------------
페이지: 158, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: Artifacts.ai.sap.com/
<argo_artifact_name>.label  s:  |  
{"ext.ai.sap.com/
Artifacts.ai.sap.com/
이름
,  "ext.ai.sap.com/
맞춤키2":"맞춤값2"
맞춤키1":"맞춤값1"
실행  가능  ID입니다.  실행  파일  ID
시나리오.ai.sap.com/설명  (선택  사...
--------------------
페이지: 258, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: Docker  이미지는  가상  머신에  캐시됩니다.  이러한  캐시된  Docker  이미지는  다른  사람이  액세스할  수  없습니다.
테넌트이며  SAP에서는  액세스할  수  없습니다.
AI  콘텐츠에는  워크플로  템플릿과  서빙  템플릿은  물론  여기에  사용되는  Docker  이미지도  포함됩니다.      
보안상의  이유로  SAP  AI  Co...
--------------------

--- RAG (Rerank 적용) 답변 ---
질문: SAP AI Core에서 모델을 학습시키는 기능이 있나요?
답변: SAP AI Core에는 모델을 학습시키는 기능이 있습니다. SAP AI Core는 머신 러닝 및 Deep Learning을 포함한 다양한 머신 러닝 알고리즘과 기계 학습 모델을 제공합니다. 또한, 모델의 배포와 관리를 위한 워크플로 엔진도 지원합니다.

--- 참조 문서 (Reranked) ---
페이지: 281, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: 2.  {{apiurl}}/v2/admin/repositories  엔드포인트에  GET  요청을  제출합니다.  3.  문제가  지속되면  모니 터링  및  문제  해결  
[페이지  266]에  설명된  대로  SAP  지원  센터에  문의하십시오.
1.  모든  환경  변수가  SAP  AI  Core  서비스  키와  일치하는지  확인하세요.  구체적...
--------------------
페이지: 21, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: 힘내  레포
기계  학습  모델의  최적화된  배포를  위한  것입니다.  배포  템플릿  사용
아르고  워크플로우
교육을  저장하고  워크플로와  템플릿을  제공하기  위해
KServe  표기법.
SAP  AI  런치패드
AI  코어).  SAP  AI  Launchpad는  Generative  AI를  통해  생성  AI  기능도  제공합니다.
무엇
...
--------------------
페이지: 258, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: Docker  이미지는  가상  머신에  캐시됩니다.  이러한  캐시된  Docker  이미지는  다른  사람이  액세스할  수  없습니다.
테넌트이며  SAP에서는  액세스할  수  없습니다.
AI  콘텐츠에는  워크플로  템플릿과  서빙  템플릿은  물론  여기에  사용되는  Docker  이미지도  포함됩니다.      
보안상의  이유로  SAP  AI  Co...
--------------------

source :
https://github.com/wclee7/rag_reranking

profile
개발 정리 공간 - 업무일때도 있고, 공부일때도 있고...

0개의 댓글