테디노트 영상을 보고 정리한 글입니다.
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
[결과]
'LLM' 카테고리의 다른 글
#MCP 그래서 어떻게 사용하는건데? (3) | 2025.04.23 |
---|---|
Don’t Do RAG:When Cache-Augmented Generation is All You Need forKnowledge Tasks (0) | 2025.02.03 |
[테디노트] 피드백으로 원하는 형식의 답변을 학습하는 GPT (4) | 2024.11.21 |
지식 편집(KNOWLEDGE EDITING)이란 무엇인가? (2) | 2024.10.31 |
[LLM] RAG 성능 높이는 방법 - Reranker (1) | 2024.10.07 |