반응형

테디노트 영상을 보고 정리한 글입니다.

실전! RAG 고급 기법 - Retriever (1)

 

 

Multi-query

  • 대충 질문해도 좋은 답변 원할 때

예시

[기존의 RAG]

사용자의 질문: B은행의 대출은 어때? → LLM 답변: B 은형의 대출은 좋은 편입니다.

 

[Multi-query RAG]

사용자의 질문: B은행의 대출은 어때?

 

→ 재생성 질문:

1) B 은행의 대출 금리는 어때?

2) B 은행의 대출 조건은 어때?

3) B 은행의 대출 후기는 어때?

 

→ LLM 답변: B 은행 대출 요약 (금리, 조건, 후기 등등)

 

from langchain.retrievers.multi_query import MultiQueryRetriever

 


Parent-Document

  • 앞 뒤 문맥 잘 담아야할 때

 

[기존 RAG]

query와 가장 유사한 chuck를 참고문서로 LLM에게 넘겨주고 그에 맞는 답을 받는다.

  • 문제점: 예를들어 유사한 청크(1-1)를 참고문서라고 했을 때, 질문이 청크(1-1)에서 모두 커버가 되면 문제가 없음. but, 중요한 내용이 1-2에 있다면, LLM은 정확한 답변을 해줄 수 없다. (1-1만 참고하고 있기 때문)

[Parent-Document RAG]

1-1만 LLM에게 주는 것이 아니라 1-1을 포함하고 있는 parent-document를 주게 된다.

유사 문서의 부모 문서를 참고하므로, 조금 더 맥락을 담아 LLM에게 제공 가능

 

from langchain.retrievers import ParentDocumentRetriever

from langchain.storage import InMemoryStory

 


 

Self-Querying

  • 시맨틱 검색 말고 쿼리가 필요할 때
  • 문서가 갖고 있는 metadata를 기반으로 필터링을 생성해서, 더 정확한 답변을 가능하도록 만드는 retriever

  • 평점, 장르 필터링이 필요함

 

[주의할 점]

필터링이 필요한 query에 적합한 retreiver (excel, csv..)

from langchain.retrievers.self_query_base import SelfQueryRetriever

 

[결과]

 


Time-weighted

  • 오래된 자료는 덜 참고했으면 할 때
  • 시간에 가중치

사용자 질문: 평점이 9점 이상인 영화 중에 SF 영화를 추천해줄래?

사용자의 속마음: 최신 영화 중에 + 평점 9점 이상 + SF 영화

⇒ Document 중에서 최근 이용된 영화 위주로 추천

시간이 지난 만큼 패널티를 주자!

 

(semantic_similarity + (1.0 - decay_rate) ^ 경과한 시간*)

from langchain.retrievers import TimeWeightVectorStoreRetriever

 

 

[주의해야할 점]

decay_rate에 따라서 답변이 완전 달라짐

decay_rate = 0.01일 경우

  • decay_rate를 적게 줌으로써, 시간이 오래됐더라도 상관없어. 유사한 것을 우선으로 찾아

 

decay_rate = 0.99 일 경우

  • decay_rate를 너무 높게 주면, 문장이 유사하던지 말던지, 가장 최근값만 가져옴

 

 


Ensemble Retriever

  • Retriever + Dense Retrieve

비타민 B1, 비타민 B2, 비타민 B3에 대한 document 중에 비타민 B1에 관한 정보만 원한다면 sparse Retriever + Dense Retriever 필요

ex) BM25(키워드 검색) + FAISS(맥락 검색) = Hybrid Search

Retrive된 결과를 재정렬하는 Reciprocal Rank Fusion으로 더욱 좋은 참고문서 생성

 

 


Long Context Reorder

  • RAG의 Source Document가 많을 경우, 중간 순서는 무시되는 경우가 많음
  • context의 중간에 위치한 참고문서는 무시하는 경향
  • 연관성이 높은 문서는 일부로 맨앞과 맨뒤에 Reorder

 

[결과]

반응형

+ Recent posts