- 학회: NeurIPS 2020
- 키워드: RAG, BART, DPR, 오픈 도메인 QA, 지식 집약형 작업, 검색 기반 생성
1. 연구 배경 및 문제의식
배경
- 기존의 대형 언어 모델(예: GPT, BERT 등)은 사전 학습된 파라미터에 내재된 지식만 사용하여 문장을 생성함.
- 하지만 이 접근은 지식의 최신성, 정확성, 확장성에 문제가 있음.
- 특히 질의응답(QA), 요약, 사실 검증 등 지식 기반 작업에서는 한계가 명확.
문제 제기
- 모델의 파라미터에만 의존하면 모델 크기를 키우는 것만으로 지식 확장이 어려움.
- 이를 해결하기 위해 외부 지식 베이스를 활용하는 retrieval-augmented generation(RAG) 접근이 필요.
2. RAG의 핵심 개념
Retrieval-Augmented Generation (RAG)
- 정보 검색기(retriever)와 텍스트 생성기(generator)를 결합한 프레임워크
- 입력 질의에 대해 관련 문서 N개를 검색하고, 이를 기반으로 문장을 생성함
- 생성기는 단순히 입력만 보고 문장을 생성하는 것이 아니라, 검색된 문서의 내용을 참조함
주요 구성 요소
- Retriever:
- DPR(Dense Passage Retrieval)을 사용
- 입력 질의와 문서 모두를 벡터로 임베딩하고, 가장 가까운 문서 N개를 검색
- Generator:
- 사전 학습된 BART를 사용
- 입력 질의 + 검색된 문서를 입력으로 받아 문장을 생성
3. 두 가지 RAG 구조
RAG-Sequence
- N개의 검색 문서 각각에 대해 문장 전체를 독립적으로 생성
- 이후 N개의 출력 중 가장 가능도 높은 것을 선택
RAG-Token
- 문장 내 각 토큰(token)을 생성할 때마다 모든 문서에 대해 분포를 계산하고, 확률을 평균함
- 더 미세하고 유연한 방식으로 성능이 일반적으로 우수함
4. 실험 설정
실험 대상 작업
- 오픈 도메인 질의응답 (Open-domain QA):
- Natural Questions, WebQuestions, CuratedTREC, TriviaQA
- 사실 검증 (Fact Verification):
- FEVER
- 대화 응답 생성 (Dialog Response Generation):
- Wizard of Wikipedia
비교 모델
- BART (단독)
- BERT+DPR
- REALM (retrieval-based LM)
- Fusion-in-Decoder (FiD)
5. 주요 결과
성능 요약 (예시: QA Accuracy)
모델 | TriviaQA | NaturalQuestions |
BART | 54.7 | 42.0 |
REALM | 68.6 | 64.4 |
RAG-Token | 72.1 | 69.3 |
- RAG 모델은 거의 모든 데이터셋에서 기존 모델보다 성능이 우수함
- RAG-Token > RAG-Sequence > 다른 baseline 순으로 성능이 좋음
6. 분석 및 ablation 실험
- retriever 없이 생성만 하는 모델과 비교했을 때, retriever의 기여가 매우 큼
- 검색된 문서 수(k)를 늘리면 성능이 좋아지지만 계산 비용도 증가
- retriever를 고정했을 때보다, joint fine-tuning(동시 학습)을 하면 더 좋은 성능을 얻음
7. 결론 및 기여
- Retrieval + Generation을 결합한 RAG 구조 최초 제안
- RAG-Token이라는 효율적이고 강력한 구조 제시
- 다양한 지식 기반 작업에서 SOTA 달성
- 추론 중 외부 문서 접근 가능 → 모델 업데이트 없이도 지식 확장 가능
프로젝트에서 얻을 수 있는 것
- DiverseVul 기반 코드베이스 보안 분석
- 질의(ex. "이 함수에 문제가 있어?")에 대해 취약점 예시/문서 검색 후 LLM이 종합
- 프롬프트 설계 부담 완화
- 전체 코드 넣지 않고, 핵심 관련 부분만 RAG로 검색해서 프롬프트로 구성
- 최신 취약점 정보 연계
- LLM은 사전 학습된 것만 아는 반면 RAG는 CVE 설명, 취약점 데이터베이스 등 최신 정보와 연결
- 시각화와 연결
- 검색된 문서와 코드 상 위치를 매칭 → 어떤 코드가 어떤 취약점과 관련 있는지 시각화 가능
- RAG-Token 방식 → 코드-취약점 연결과 분석으로 좋지 않을까,,