핵심 : 언제, 무엇을 retrieve할지 스스로 판단하는 RAG
0. Abstract
LLM에서 부족한 부분을 Retrieval을 통해 보완하고자 RAG(Retrieve-and-Generate)가 나왔지만, 기존 RAG는 생성 전에 한번만 문서들을 가져온다. 이는 긴 텍스트를 생성하면서 여러번 문서들을 가져와야 되는 작업에는 부적절하다. 따라서 해당 연구에서는 Forward-Looking Active REtrieal augmented Generation (FLARE)을 소개한다. 생성 과정에서 언제, 어떤 것을 retrieve할지 스스로 결정하는 방식으로, retrieve할 때는 생성될 문장을 미리 본 다음에 불확실한 부분에 대한 정보를 가져온다.
1. Introduction
LLM이 학습한 데이터만으로 대답을 할 때, hallucination이나 outdated 된 정보만 사용한다는 단점이 있다. 그래서 Retrieval augmented LM은 사용자의 input을 보고 관련된 문서들을 들고 온 다음에 답변을 생성한다.
하지만 짧고 단순한 문제들이 아닌, 길고 복잡한 문제들에 대해서는 필요한 정보가 input에 무조건 들어있지는 않다. 인간이 정보를 수집하는 것과 유사하게 생성 과정을 진행하면서 그때그때 필요한 정보를 찾아야 더 정확하다. (e.g. 조 바이든에 대해서 에세이를 작성하다가 조 바이든의 출신 대학은 따로 한번 더 찾아야 할 수도 있다.)
기존에도 여러 번 retrieve를 하는 연구들이 있다. 이전까지 만들어낸 내용(past context)을 바탕으로 retrieve하거나, 고정된 인터벌마다 retrieve를 할 수 있고, 질문 자체를 sub-question으로 분해하는 방법도 존재한다.
해당 논문에서는 when to retrieve, what to retrieve를 스스로 판단하는 FLARE 방식을 소개한다.
- When : 임시로 생성한 문장의 confidence가 낮을 때. 매번 retrieve를 하면 불필요하거나 부적합한 문서까지 들고와서 정확도를 낮출 수 있다.
- What : 예전 내용들이 아니라 일단 임시로 생성한 문장에서 미래에 필요한 정보를 보고 판단한다.
2. Retrieval Augmented Generation
2.1 Notations and Definitions & 2.2 Single-time Retrieval Augmented Generation
$$ y = LM([D_x, x]) $$
RAG의 가장 기본적인 구조 : D라는 Document corpus가 있을 때, user input인 x와 관련된 document들 Dx와 x를 concat한 다음에 LM에 넣어서 답변을 생성하는 것.
2.3 Active Retrieval Augmented Generation
long-form 생성을 위해서 해당 연구에서는 생성 과정 안에서 언제, 무엇을 retrieve할지 적절하게 결정하는 프레임워크를 제안한다. 즉, retrieval과 generation을 섞는 (interleaving) 방식으로 접근한다.
$$ y_t = LM([D_{qt}, x, y_{<t}]) $$
t번째 step일 때, 해당 step에서 retrieve한 document들, user input x, 그리고 t-1번째 step까지 생성된 결과를 concat해서 LM에 넣는다.
3. FLARE: Forward-Looking Active REtrieval Augmented Generation
해당 연구의 동기는 크게 2개이다.
- LM이 필요로 하는 지식이 없을 때만 retrieve해야 한다 (불필요하거나 부적절한 정보를 가져오는 것 방지)
- retrieval에 사용되는 query는 과거의 내용이 아니라 미래의 내용과 관련되어야 한다.
FLARE를 구현하기 위해서 2가지 방법을 사용한다.
- instruction을 사용해서 [Search(Joe Biden University)]와 같은 search query의 역할을 하는 토큰을 생성하도록 한다.
- direct하게 문장 하나를 미리 생성해서 search query로 사용한다. 미리 생성된 문장에 uncertain한 토큰이 존재한다면 retrieve를 한다.
3.1 FLARE with Retrieval Instructions
Toolformer와 유사하게 api를 호출하게 하는 토큰을 생성한다. few-shot 프롬프팅으로 형식을 맞추게 한다.
예시: “The colors on the flag of Ghana have the following meanings. Red is for [Search(Ghana flag red meaning)]”
3.2 Direct FLARE
첫번째 방법은 파인튜닝 없이 few-shot으로만 query를 생성해서 정확도가 떨어지는 경우가 많이 발생하게 된다. 그래서 두번째 방법인 미리 생성된 문장을 보고 retrieve를 할지 여부와 그 내용을 결정하는 방법을 제안한다.
3.2.1 Confidence-based Active Retrieval
t번째 step일 때, 임시로 다음 문장을 생성한다. 만약 그 문장에 대해 LM의 confidence가 높다면 그대로 유지하고, 낮다면 retrieve를 한다. LM이 낮은 확률/confidence를 가지고 있는지는 수치화가 잘 되기 때문에, 적절한 threshold를 사용해 기준을 정한다.
3.2.2 Confidence-based Query Formulation
임시로 생성된 문장 자체를 search query로 사용할 수 있지만, 이 문장 안에 에러가 있다면 그 에러가 그대로 들어가서 부정확한 정보를 들고 올 수도 있다는 위험이 존재한다. 이 문제를 해결하기 위해, 저자들은 2가지 방식을 제안한다.
① 불확실한 부분을 아예 마스킹하는 것.
② 불확실한 부분을 바탕으로 질문을 만든 다음에, 그 질문으로 retrieve한 문서들을 사용해서 생성하는 것.
예시: 만약 불확실한 문장이 “조 바이든은 펜실베니아 대학 출신이다”라면, 펜실베니아 대학이 답으로 들어갈 수 있는 “조 바이든의 출신 대학은 어디야?”라고 만드는 것이다.
3.3 Implementation Details
LM으로는 GPT-3.5의 text-davinci-003을 사용하였고, Wikipedia dump를 데이터셋으로, BM25를 retriever로 사용하였다.
4. Multi-time Retrieval Baselines
baseline으로 삼을 수 있는 기존 연구들의 유형은 크게 3가지로 나뉜다.
Previous-window
고정된 토큰 개수마다 retrieve하며, 직전의 window를 search query로 사용한다. RETRO, IC-RALM 방식들이 여기에 해당한다.
Previous-sentence
매 문장마다 retrieve하며, 직전의 문장을 search query로 사용한다. IR-COT가 여기에 해당한다.
Question decomposition
few-shot 예시들을 사용해서 sub-question이 생성될 때 retrieval을 수행할 수 있다. self-ask가 여기에 해당한다.
3가지 유형들 모두 한계점이 존재한다:
- 예전 정보를 사용하면 도움이 안될 수도 있다.
- 고정된 간격을 사용하면 필요없는 정보를 들고 올 수도 있다.
- question decomposition은 task-specific한 프롬프트 엔지니어링이 필요해서 일반화 능력이 떨어진다.
5. Experimental Setup
Multihop QA, Commensense Reasoning, Long-form QA, Open-domain Summarization, 총 4개의 task에 대해서 FLARE를 평가한다. Multihop QA는 질문을 단계별로 진행하면서 답변을 해야하는 task이고, Long-form QA는 모호한 질문에 여러 측면을 모두 고려해서 답변을 해야하는 task이다. Long-form QA에 쓰인 ASQA 데이터셋과 같은 경우에는, 인간도 수행하기 모호한 부분이 있어서 실험을 할 때 hint를 제공하는 방식을 사용한다.
6. Experimental Results
6.1 Comparison with Baselines
모든 task들에 대해 Multihop QA에서 가장 많은 성능 향상을 보였는데, 기준이 명확해서 평가를 할 때 더 유리하기 때문으로 추측한다. 반대로 조금 더 모호하고 open-ended인 Long-form QA와 Open-domain Summarization에서는 생성과 평가에서 조금 불리한 부분이 있다.
6.2 Ablation Study
먼저 forward-looking의 유효성을 보여주기 위해 과거의 문장들(토큰도 여러개로 실험)만 사용하는 경우와 미래 문장에서 retrieval을 하는 것을 비교한다.
그리고 active retrieval의 중요성을 보여주기 위해 threshold 값을 수정하면서 실험한다.
마지막으로 마스킹을 함으로써 에러가 있는 토큰을 전달 안하는게 더 성능이 좋다는 것을 보인다.
7. Related Work
반복적으로 retrieval하는 방식들이 존재하지만, 대부분 single-time retrieval을 바탕으로 접근한다. 하지만 FLARE의 경우에는 생성 과정 중에 필요한 정보를 가져온다는 점에서 다르다. 추가적으로 Web과 같은 외부 환경과 상호작용하면서 retrieve하는 연구들도 진행되고 있기 때문에 FLARE에도 결합될 여지가 있다.
8. Conclusion
다음에 생성될 문장을 미리 보고 불확실한 부분이 있으면 관련된 정보를 찾아오는 FLARE 방식을 새롭게 제안한다.
9. Limitations
데이터셋 특성상 여러개의 짧은 문서들을 가져와야 하는 경우에는 비교적 약한 모습을 보였다. 또한 generation과 retrieval을 여러번 사용하게 되면 LM을 여러번 호출해야 해서 overhead가 증가하는 문제도 존재한다.
논문 링크 :
https://arxiv.org/abs/2305.06983