inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

RAG 마스터: 기초부터 고급기법까지 (feat. LangChain)

RAG 답변 평가 (정량적 지표) 4 - Rouge Metric 활용

95

정영수

작성한 질문수 2

0

from langchain.retrievers.document_compressors import DocumentCompressorPipeline
from langchain_community.document_transformers import EmbeddingsRedundantFilter


# 중복 문서 제거
redundant_filter = EmbeddingsRedundantFilter(embeddings=embeddings_model)

# 쿼리와 관련성이 높은 문서만 필터링
relevant_filter = EmbeddingsFilter(embeddings=embeddings_model, similarity_threshold=0.5)

# Re-ranking
re_ranker = LLMListwiseRerank.from_llm(llm, top_n=2)

pipeline_compressor = DocumentCompressorPipeline(
    transformers=[redundant_filter, relevant_filter, re_ranker]
)

pipeline_compression_retriever = ContextualCompressionRetriever(
    base_compressor=pipeline_compressor, 
    base_retriever=chroma_db.as_retriever()
)

question = "테슬라 회장은 누구인가요?"

compressed_docs = pipeline_compression_retriever.invoke(question)

print(f"쿼리: {question}")
print("검색 결과:")
for doc in compressed_docs:
    print(f"- {doc.page_content} [출처: {doc.metadata['source']}]")
    print("-"*100)
    print()
`(4) DocumentCompressorPipeline`  

- 여러 압축기를 순차적으로 결합하는 방식
- BaseDocumentTransformers를 추가하여, 문서를 더 작은 조각으로 나누거나 중복 문서를 제거하는 등의 작업도 가능

여기에서 result = chain.invoke() 로 받아서 result의 데이터를 보면,

context = result['context'][i]
query_similarity_score = context.state['query_similarity_score']

이렇게 similarity_score 처럼 rerank score같은거 보고싶은데,

# 크로스 인코더를 사용하여 유사성 점수를 계산합니다.
sentence_pairs = [[query, prediction]]
similarity_scores = cross_encoder_model.predict(sentence_pairs)

이런식으로 계산을 해야하나요? 추출하고 싶은데 방법을 잘 모르겠습니다.

python 챗봇 llm langchain rag

답변 1

0

판다스 스튜디오

안녕하세요. 판다스 스튜디오입니다.

LLMListwiseRerank를 사용하면, 관련성 기준으로 순위에 따라 정렬하는 방식으로 작동합니다. (아래 링크 참조)
https://inf.run/5eeJZ

이 코드를 기반으로 관련성(relevance)을 평가하는 reranker의 프롬프트를 수정해서, 관련성 점수를 함께 출력하고 이를 기준으로 정렬하도록 코드를 수정해서 적용해야 할 것 같습니다.

LLMListwiseRerank 클래스를 상속받아서, 커스텀 클래스를 만들면 될 것 같습니다.

감사합니다!

테스트데이터셋 평가지표 값 문제

0

53

1

언어 감지 및 검색 라우팅

0

52

2

동영상이 검은 화면으로 나옵니다.

0

68

2

강의가 진행되지 않습니다.

0

69

2

'팀 단위 AI 업무 혁신' 자문 관련하여 문의드리고자 합니다. (연락처 요청)

0

57

1

Rerank에 대해 질문드립니다.

0

68

2

Cross Encoder Reranker 임포트 에러 관련 내용입니다.

0

104

2

HuggingFaceCrossEncoder 임포트 에러

0

82

2

아나콘다랑 pytry없이. 단순 파이참에서 venv 설정해서 설치하는건 불가능하나요?

0

81

1

2.7 전체 RAG파이프라인 구성에서 4번째 줄 오류

0

81

1

rag 와 랭체인

0

115

2

score 기반 서치

0

50

2

KR.txt파일이 없습니다.

0

78

2

krag를 이용한 검색기법 평가관련 질문

0

77

2

MMR 관련 질문입니다.

0

84

1

Text_splitter관련 질문입니다.

0

62

2

오픈api key는 따로 구매해야되는 걸까요?

0

267

2

과거 채팅이력을 LLM에 줄때 포멧

0

74

1

OpenAIEmbeddings모델이 사용하는 토크나이저는 뭘까요?

0

174

2

ChatPromptTemplate의 from_messages로 메세지를 구성할 때 system은 어떻게 설정해야하나요?

0

98

2

create_retrieval_chain에서 context는 지정된 인자인가요?

0

64

1

vectorstore의 as_retriever와 similarity_search는 같은 로직인가요?, 사용되는 검색 알고리즘은 뭔가요?

0

95

2

evaluate_retrieval_at_K 함수 문의드립니다.

0

68

2

검색기 관련 질문드립니다.

0

88

2