1. 왜 RAG를 사용하는가?
LLM은 충분하지 않다
LLM (Large Language Model) 은 매우 방대한 양의 텍스트 데이터를 학습하여 텍스트 생성, 번역, 질의응답 등 다양한 자연어 처리 작업을 수행할 수 있는 모델이다. LLM은 다양한 분야의 애플리케이션에서 활용되고 있지만 Large 하다는 특징 때문에 모델에 내제된 지식들을 업데이트하는 것이 쉽지 않다. 이러한 특징으로 인해 파생된 문제들 중, RAG 가 해결하고자 하는 문제는 다음과 같다.
LLM의 문제점
- Out of date (오래된 지식)
- No knowledge - Hallucination (환각 문제)
# Out of date
LLM은 파라미터가 최소 7M개가 넘는 아주 거대한 모델이기 때문에 새로운 정보들로 매번 학습시키려면 그 load가 상당하다. 나는 매년 하나씩 증가하는 내 나이도 뇌에서 업데이트하는 것조차 버거운데.... 그래서 나는 그냥 쭉 22살로 살고 있다. 그래서 누군가 나에게 몇 살이냐고 질문을 하면 나는 오래된 지식에 기반해서 "22살이요~"라고 out dated 된 답변을 도출하게 되는 것처럼 LLM도 학습된 데이터가 지금 현재의 상황, 또는 지식과 일치하지 않는다면 틀린 답변을 내놓게 된다.
# No knowledge
또한 LLM이 아무리 방대한 양의 텍스트 데이터를 학습했다고 해도 미처 학습하지 못한 지식이 있을 수도 있다. 그러나 일반적인 LLM들은 학습된 데이터를 기반으로 사용자의 질문에 답변을 생성하는데, 이때 사용자가 미처 학습시키지 않은 정보에 대한 질문을 하면 텍스트 생성에 특화 되어있는 LLM은 가장 그럴 듯한 답변 (Hallucination, 환각 현상)을 내놓게 된다. 잘 알려진 사례로 세종대왕 맥북 던짐 사건이 있다.
RAG는 기존의 LLM의 생성능력에 외부 지식 베이스의 정보를 결합한 방식으로 이러한 LLM의 한계를 극복하기 위해 LLM이 답변을 생성하기 전, 모델 외부 데이터를 참조해서 답변의 정확도를 높이기 위한 방법이다. 신뢰할 수 있는 데이터에서 필요한 정보를 검색하여 답변을 제공함으로써, 더 정확하고 사실에 기반한 답변을 제공할 수 있다.
1) 외부 데이터의 활용
LLM이 가진 지식보다 더욱 최신의, 테스크와 관련된 지식을 참조한 답변을 제공할 수 있으며, 사용자의 질문에 대한 배경지식과 맥락 정보를 파악할 수 있다.
2) 증거 기반의 생성
데이터의 어느 부분이 검색되어 답변이 생성되었는지 파악이 가능하다. 생성된 답변의 출처를 확인할 수 있어 답변의 신뢰성을 향상할 수 있다.
2. RAG는 무엇인가?
구성 요소와 작동 방식
RAG는 '지식 검색' + '언어 생성' 프레임 워크로, 질문에 답하기 위해 필요한 지식을 외부의 데이터에서 검색해 답변을 생성하는 방법이다.
구성 요소
1) 쿼리 인코더 (Query Encoder) : 사용자의 질문을 지식 검색기가 이해할 수 있는 벡터 형태로 인코딩
2) 지식 검색기 (Knowledge Retriever) : 인코딩 된 질문을 바탕으로 외부 데이터에서 관련된 데이터를 검색
3) 지식 증강 생성기 (Knowledge-Augmented Generator) : 검색된 데이터를 활용해서 질문에 대한 답변을 생성하는 언어모델
작동 방식
1) 외부 데이터 생성
데이터를 벡터 형태로 변환하여 (임베딩) LLM이 이해할 수 있는 지식 라이브러리를 구성한다.
2) 관련 정보 검색
사용자가 질문을 하면, 쿼리 인코더로 질문을 인코딩한다. 인코딩한 질문과 관련된 데이터를 지식 라이브러리에서 검색해서 가져온다. 보통 검색 키워드가 많이 포함된 문서를 찾는 키워드 검색, 의미를 분석하여 벡터 간의 유사도를 계산하는 시멘틱 검색, 이 두 가지 방법을 결합한 하이브리드 검색 방법을 사용할 수 있다.
3) LLM 프롬프트 확장
검색된 데이터를 컨텍스트 (context, 문맥)에 추가해서 사용자의 질문을 보강한다. 이렇게 확장된 질문(프롬프트)을 LLM에 전달하면 LLM이 검색된 데이터를 참고하여 답변을 생성한다.
LLM 이 AI 분야의 핵심 기술로 자리 잡으면서, LLM 의 문제점인 환각 현상, 데이터 관리 등을 해결하기 위한 연구가 활발하게 진행되고 있다.
RAG는 그 중 하나로, 외부 데이터를 벡터 DB에 저장하고 주어진 프롬프트와 관련된 문서를 검색해서, 보다 정확하고 사실에 기반한 답변을 생성한다. 생성된 답변에 대한 증거를 제시할 수 있기 때문에 설명 가능성과 신뢰성을 높일 수 있다는 장점을 갖는다.
RAG는 질의응답과 정보 검색, 팩트 체킹 등 사실 정보가 답변의 품질에 중요한 태스크에서 활발히 연구되고 있는 주제이다.
Hallucination을 해결하기 위한 또 다른 방법 중 하나인 Finetuning과 달리 최신 정보를 제공하는 데 용이하며, 출처가 확실한 데이터를 기반으로 답변을 생성하기 때문에 품질 유지와 비용 측면에서도 각광받고 있다고 한다.
이러한 이점 덕분에 구글의 LaMDA, OpenAI의 WebGPT 등 최신 LLM과, 마이크로소프트의 Bing Search, AWS의 Amazon Kendra 등의 서비스에 적용되어 사용되고 있다.
reference
[1] https://arxiv.org/pdf/2005.11401
[2] RAG(Retrieval-Augmented Generation): LLM의 한계와 보완 방법
[4] RAG(검색 증강 생성)란? – LLM 단점을 보완하는 기술
[5] (한국일보) "세종대왕 맥북 던짐 사건 알려줘" 물었더니... 챗GPT의 엉뚱 답변 '밈'으로 유행 중
[6] 10분 만에 RAG 이해하기