관심 있는 NLP 논문을 읽어보고 간단히 정리했습니다.
혹시 부족하거나 잘못된 내용이 있다면 댓글 부탁드립니다 🙇♂️
[University of Science and Technology of China, Google Research]
- Corrective Retrieval Augmented Generation (CRAG)를 제안하여 retrieval이 잘못되었을 때의 문제를 해결
- lightweight retrieval evaluator(T5-large)를 이용하여 retrieved documents에 대한 confidence score를 반환
- large-scale의 web search를 extension으로 활용
- decompose-then-recompose 알고리즘을 설계
1. Introduction
LLM이 보이는 factual errors, hallucinations 등의 문제를 해결하기 위해 가장 효과적인 해결책으로 자리 잡게 된 것이 Retrieval Augmented Generation, RAG입니다.
query를 벡터화하고 이를 사전에 벡터화해 둔 DB 내 문서들과의 유사도를 비교하여, 답변하기에 가장 적절한 문서들을 query 앞에 붙여줌으로써 모델에게 context를 제공하는 방법이죠.
그러나 이 방식의 가장 큰 문제 중 하나는 retrieval 자체입니다.
일반적으로 top-k의 문서를 추출하여 해당 문서들을 query에 prepend 하게 되는데, 이때 k개의 문서들 중에는 질문에 답변하는데 도움이 되지 않는 녀석들이 끼어 있을 수 있기 때문입니다.
본 논문에서는 이전의 연구들은 이런 부분에 대해서 다루지 않고 단순히 top-k개의 문서를 어떻게 잘 추출할 것인지에 대해서만 집중하고 있음을 문제점으로 지적하며 본인들의 연구 방향성을 설명하고 있습니다.
즉, retriever가 질문에 답변하기 부적절한 문서를 추출했을 때의 문제를 어떻게 해결할 수 있을 것인지가 본 연구의 핵심이라고 할 수 있습니다.
2. Related Work
- Hallucinations of LLMs
- outdated information 또는 incorrect knowledge가 주로 hallucination을 초래
- Retrieval-Augmented Generation (RAG)
- Advancded RAG
- 언제, 무엇을 retrieve 할지 actively 결정하는 방식
- Wikipedia와 같은 APIs를 호출하는 방식
3. CRAG
위 그림과 알고리즘은 CRAG의 작동 방식을 잘 설명하고 있습니다.
주어지는 것은 query와 retrieved documents입니다.
lightweight retriever는 query와 각 문서 사이의 relevance score를 계산하는데, 이를 바탕으로 {Correct, Incorrect, Ambiguous} 셋 중 하나의 action을 취하게 됩니다.
각 action이 어떻게 동작하는지를 포함한 과정 전반을 살펴보도록 하겠습니다.
3.1. Retrieval Evaluator
T5-large 모델을 fine-tuning합니다.
한 개의 query에 대해 10개의 documents를 가져오고, 각 qeury와 document 사이의 relevance score를 -1에서 1 사이의 값으로 반환하도록 학습시킵니다.
이때 관련이 있으면 1, 그렇지 않으면 -1로 target 값을 정해 줍니다.
(여기에 ChatGPT를 활용해 보았으나 만족스럽지 않은 결과물이 나왔다고 언급되어 있습니다)
기존 연구 중 critic model을 사용했던 Self-RAG와 비교했을 때, 크게 두 가지의 장점을 기술했습니다.
첫째로 T5-large-based (0.77B) 모델은 엄청 가볍습니다.
요즘 주로 쓰이는 LLM들에 비하면 사용하기가 엄청나게 쉽습니다.
둘째로 사람 또는 LLM을 활용한 annotation 작업이 필요 없습니다.
따라서 실험해 보기도 굉장히 좋은 조건입니다.
3.2. Action Trigger
relevance score에 따라 세 가지 action을 취합니다.
(1) Correct
여러 document 중 적어도 한 개 이상의 document가 upper threshold 이상의 relevant score를 갖는 경우입니다.
하지만 이 document에도 noise가 포함되어 있을 수 있으므로 knowledge refinement를 적용합니다.
knowledge refinement는 주어진 relevant document에 대해 적용하는 'decompose-then-recompose' 방법론입니다.
주어진 문서를 heuristic rules에 따라 여러 fine-grained knowledge strips로 쪼갭니다.
그리고 각 strip을 fined-tuned retrieval evaluator로 평가하여 relevance score를 구합니다.
이를 바탕으로 점수가 낮은 strip은 filtering 합니다.
(2) Incorrect
모든 retrieved documents가 lower threshold 이하의 점수를 받은 경우입니다.
이럴 때는 기존의 source가 질문에 답변하는 데 도움이 되지 않는다는 것을 의미하므로 외부 knowledge source를 활용합니다.
본 연구에서는 Google Search API를 활용하여 각 query마다 URL 링크를 달아줘서 여기서부터 정보를 획득했다고 언급하고 있습니다.
따라서 이를 external knowledge라고 부릅니다.
(3) Ambiguous
retrieval evaluator가 어떤 판단을 내리기 애매한, 즉 upper threshold 보다는 낮고 lower threshold 보다는 높은 점수를 받은 경우입니다.
이때는 Correct, Incorrect 두 개의 action을 둘 다 실행하고 그 결과를 concat 합니다.
4. Experiments
- Datasets
- PopQA: Accuracy
- Bigoraphy: FactScore
- PubHealth: Accuracy
- Arc-Challenge: Accuracy
- Baselines
- Baselines without retrieval: LLaMA2-7B, 13B / Alpaca-7B, 13B / CoVE-65B
- Standard RAG: LLaMA2-7B, 13B / Alpaca-7B, 13B / LLaMA2-7B instruction-tuned in Self-RAG
- Advanced RAG: SAIL, Self-RAG, Ret-ChatGPT, Ret-LLaMA-chat
- Results
- CRAG 방식이 RAG, Self-RAG의 성능을 크게 향상시켰습니다. 이 결과는 CRAG 방식의 adaptability를 보여주는 것으로, 저자는 이를 plug-and-play에 해당한다고 해석합니다.
- 다양한 태스크에 대해 뛰어난 generalizability를 보입니다.
- Self-RAG 방식은 human 또는 LLM으로부터의 annotated data로 instruction-tuned 되어야 제 성능을 발휘할 수 있습니다.
- Ablation Study
5. Insights
top-k 개의 문서를 가져오는 RAG 방식의 문제는 'k'라는 숫자가 항상 고정되어 있다는 것이라고 생각했습니다.
왜냐면 가지고 있는 DB에서 몇 개의 문서를 가져오는 것이 답변을 생성하는 데 가장 도움이 될지는 사전에 알기 어렵기 때문입니다.
결국 가지고 온 k개의 문서 중에서 유효한 것을 남기고 그렇지 않은 것들을 제거하는 방법론이 나와야 된다고 생각해서 주제를 구체화하고 있었는데 역시 제가 생각할 수 있는 건 이미 세상에 다 있다는 사람들의 말이 틀리지 않았습니다.
심지어 가져온 문서 전부가 부적합한 경우 external source를 사용하는 방법까지 고안하다니..
흠.. 어떤 점을 개선하면 좋을까요?
relevance score를 개선하는 것도 T5-large를 사용했는데, 이에 대한 학습 방법을 개선하는 것도 아이디어가 될 수 있겠네요.
출처 : https://arxiv.org/abs/2401.15884