오늘 PRML 스터디에서 다뤘던 내용을 정리한다 ㅎㅎ 새해에는 active 하게 공부하는게 목표!!
아래 게시글은 이 survey 논문을 기반으로 하고 있다.
Overview
LLM의 더 정확한 답변을 위해 document를 이용해 정보를 retrieval 하여 이 정보를 이용해 LLM이 답변하게 하는 방법이다. Hallucination을 예방하는데 큰 도움을 줄 것 같다. User의 query를 document knowledge로 augment 한다는 측면에서 augmentation 이라는 말을 쓴다고 한다.
아래와 같은 순서로 진행된다고 직관적으로 이해했다.
Direction 1. Naive RAG
1. 먼저 Document를 어떻게 indexing 할건가도 중요한데, PDF, HTML 등의 파일을 embedding model로 encoding 하는 단계이다. 이런 인코딩된 vector 들은 database에 저장된다.
2. User의 query도 마찬가지로 encoding한다.
3. 위 document vector (i.e., document chunks) 와 user query의 유사도 (주로 cosine similarity)를 구해 Frozen LLM에게 넣어준다. LLM에게 넣어줄 때는 그냥 prompt로 document 정보를 붙여서 넣어주면 된다.
Direction 2. Advanced RAG
Original query에 indexing structure를 optimize하는 방법이다.
1. Pre-retrieval: User의 query를 rewriting하거나, transform 하거나, expansion 하는 방법이다. Retrieval이 잘 되게 하도록 하는 것이 목적이다. 약간 Prompt engineering과 비슷하다고 이해했다.
2. Post-retrieval: Retrieval 후 LLM에게 document 정보를 잘 입력할 수 있는 방법? Reranking 같은 방법들이 있다고 한다.
Retrieval 에 대한 고민
당연히 몇십억개에 해당하는 document를 retrieval을 잘 하는게 가장 중요할거다. 아래는 주요 고민거리라고 한다.
- Retrieval Source: Document의 source에 대한 고민
- Indexing Optimization: 임베딩을 어떻게 할건지?에 대한 고민
- Query Optimization: user의 initial query에 대한 reliance를 어떻게 반영할건지? 에 대한 고민
- Embedding: Bi-encoder vs Cross encoder에 대한 고민 (몇십억개에 해당하는 document를 모두 cross encoder로 similarity를 계산할 수는 없어서, 주로 frozen encoder를 사용한다고 한다)
Generation
LLM을 통해 어떻게 잘 Generation 할까? LLM에게 document 정보를 어떻게 잘 넣어줄 것인가에 대한 고민이다.
일단 아래와 같이 reranking을 해주는 방법이 대표적이다. LLM에 넣어줄 top-k document chunk를 reranking한다.
Augmentation process in RAG
Retrieval step을 iterative하게 물어보는 방법이다. 아래 예시처럼 질문을 decompose해서 물을 수 있다.
'NLP' 카테고리의 다른 글
[TIL] In-context Learning with Long-context LLMs (0) | 2024.09.13 |
---|---|
[TIL] LLM as reward models/evaluators (#RLHF, #Self-improvement) (0) | 2024.08.30 |
[NLP] LORA : Low-Rank Adaptation of Large Language Models 논문 리뷰 (0) | 2023.04.04 |
[NLP] Transformer(트랜스포머, Attention is all you need) (0) | 2021.02.09 |
[NLP] Attention Mechanism (어텐션 메커니즘) (0) | 2021.02.09 |