-
Anthropic's Contextual RetrievalDEV 2024. 11. 26. 20:54
사진: Unsplash 의 Jeremy Bishop 전통적인 RAG 시스템의 한계와 Contextual Retrieval
RAG
2024.11.08 - [DEV] - simple RAG pipeline
simple RAG pipeline
RAGRetrieval augmented generation (RAG: 검색 증강 생성)할루시네이션, 학습되지 않은 최신 데이터, 메모리 이슈해결RAG의 간단한 인덱싱 파이프라인 4단계원본 데이터에서 데이터 로딩(load data)큰 문서를
developer-as-job.tistory.com
전통적인 RAG 시스템은 대규모 지식 베이스를 활용하여 사용자 쿼리에 대해 보다 정확한 응답을 생성하는 강력한 기술. 그러나 몇 가지 단점이 존재.
문맥 손실: 가장 큰 단점은 정보를 인코딩할 때 컨텍스트가 제거된다는 것. 문서가 작은 청크로 나뉘어 LLM이 쿼리에 응답할 때 문서의 전체 컨텍스트를 활용하지 못하게 됨. 예를 들어, 특정 회사의 2023년 2분기 매출 성장률을 묻는 질문에 "회사의 매출은 전 분기 대비 3% 증가했습니다."라는 청크가 검색될 수 있음. 그러나 이 청크만으로는 어떤 회사를 지칭하는지, 관련 기간이 무엇인지 알 수 없어 정확한 정보를 검색하거나 효과적으로 활용하기 어려움.
벡터 유사성의 한계: 전통적인 RAG는 컨텍스트를 검색할 때 벡터 유사성에 의존. 벡터 유사성은 항상 일관성이 있는 것은 아니며 고유한 사용자 키워드를 처리하는 데 어려움을 겪을 수 있음. 예를 들어, 특정 오류 코드 "TS-999"를 검색할 때, 임베딩 모델은 일반적인 오류 코드에 대한 내용을 찾을 수 있지만 정확한 "TS-999"는 놓칠 수 있음.
이러한 문제를 해결하기 위해 Anthropic이 Contextual Retrieval이라는 방법을 제안.이 방법은 Contextual Embeddings와 Contextual BM25라는 두 가지 하위 기술을 사용.
https://www.anthropic.com/news/contextual-retrieval
Introducing Contextual Retrieval
Anthropic is an AI safety and research company that's working to build reliable, interpretable, and steerable AI systems.
www.anthropic.com
Contextual Retrieval의 핵심 개념
Contextual Retrieval Preprocessing Contextual Embeddings: 임베딩하기 전에 청크별 설명 컨텍스트를 각 청크에 추가. 즉, 각 청크는 전체 문서의 컨텍스트를 포함하게 되므로 LLM이 쿼리에 응답할 때 더 많은 정보를 활용할 수 있음. 위의 예시에서, Contextual Embeddings를 적용하면 청크는 다음과 같이 변형.
original_chunk = "회사의 매출은 전 분기 대비 3% 증가했습니다."
contextualized_chunk = "이 청크는 2023년 2분기 ACME Corp의 실적에 대한 SEC 보고서에서 발췌한 것입니다. 전 분기 매출은 3억 1,400만 달러였습니다. 회사의 매출은 전 분기 대비 3% 증가했습니다."프롬프트 예제
<document>
{{WHOLE_DOCUMENT}}
</document>
Here is the chunk we want to situate within the whole document
<chunk> {{CHUNK_CONTENT}} </chunk>
Please give a short succinct context to situate this chunk within the overall document for the purposes of improving search retrieval of the chunk. Answer only with the succinct context and nothing else.Contextual BM25: BM25 인덱스를 생성하기 전에 청크별 컨텍스트를 추가. BM25는 정확한 단어 또는 구문 일치를 찾는 데 효과적인 랭킹 함수. Contextual BM25를 사용하면 BM25가 특정 용어를 검색할 때 더 넓은 컨텍스트를 고려할 수 있으므로 검색 정확도가 향상. 예를 들어, "TS-999" 오류 코드를 검색할 때 Contextual BM25는 해당 오류 코드가 발생할 수 있는 특정 상황이나 관련 정보를 포함하는 청크를 검색할 수 있음.
Contextual Retrieval Preprocessing & Runtime Contextual Retrieval의 이점
검색 정확도 향상: Contextual Embeddings는 상위 20개 청크 검색 실패율을 35% 감소시켰고, Contextual Embeddings와 Contextual BM25를 결합하면 검색 실패율이 49% 감소. Reranking을 추가하면 검색 실패율이 67%까지 감소.
환각 현상 감소: LLM은 청크에 대한 컨텍스트가 없을 때 컨텍스트 외부의 정보를 사용하여 응답을 생성하는 경우가 있음. Contextual Retrieval을 사용하면 모델에 각 청크의 컨텍스트가 제공되므로 환각 현상이 크게 줄어듬.
틈새 키워드 처리: Contextual Retrieval은 BM25 인덱싱을 통해 틈새 키워드가 사용자 쿼리에 포함될 때 관련 문서를 더 잘 검색할 수 있음.정리
Contextual Retrieval은 전통적인 RAG 시스템의 한계를 극복하기 위한 효과적인 방법. Contextual Embeddings와 Contextual BM25를 사용하여 컨텍스트 손실 문제를 해결하고 검색 정확도를 향상. 또한 Reranking을 통해 성능을 더욱 향상시킬 수 있음.
728x90'DEV' 카테고리의 다른 글
RAG from scratch - Routing (0) 2024.11.29 RAG 고급 기법 - Query Translation (0) 2024.11.27 새로운 RAG system Golden-Retriever (2) 2024.11.25 LLM으로 프로그래밍 (0) 2024.11.24 Agentic RAG (1) 2024.11.22