안녕하세요, 저는 요고조고 다 하는 YogoJogo입니다.
오늘은 Retrieve AUgemented Generation (RAG)에 대하여 다루어 볼 예정이에요.
본론으로 들어가기 전, 두가지를 집고 가야할거 같아요.
1. 왜 RAG가 왜 자주 언급이 되는지?
- RAG는 Retrieve (검색) Augment(강화) Generate(생성)이라는 의미를 담고 있는데, ChatGPT와 같은 LLM 모델은 당신이 원하는 데이터를 모두 가지고 있지 않아요. GPT에게 내 이름이 뭐야? 혹은 2024년 정보를 요구하면 알려주나요? 나는 2023년 4월까지 학습(GPT4-turbo기준)이 되었어요 라고 합니다. 그럼 어떻게 정확하고 원하는 데이터를 LLM 모델을 강화시킬 수 있을까요? RAG는 LLM모델에 외부 데이터를 더하는 한 방법이라고 생각하시면 됩니다.
2. RAG를 구체적으로 다루기전에 General 한 뜻은 무엇이 있는지?
- 말 그대로 검색하는 것을 강화하고 생성시키는 것입니다.
항상 큰 틀을 먼저 알고 디테일을 알면 이해가 쉽더라고요.
Technically, RAG는 LLM에 외부 지식 소스의 추가 정보를 제공하는 개념입니다.
이를 통해 LLM의 Bull shit을 보다 정확하고 상황에 맞는 답변을 생성할 수 있습니다.
PROBLEM
최근 LLM은 신경망의 가중치에 저장된 광범위한 일반 지식을 얻기 위해 대량의 데이터에 대해 훈련됩니다. 그러나 최신 정보, 독점 정보 또는 도메인별 정보와 같이 학습 데이터에 포함 되지 않은 정보는 내 뱉을 수 없죠.
SOLUTION
전통적으로 신경망은 모델을 미세 조정하며 도메인별 또는 독점 정보에 맞게 튜닝 되었습니다. BUT, 비용이 너무 비싸고 시간이 오래걸린다.
하지만, 2020년에는 Lewis et al. RAG(Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks)라는 논문에서 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks [1]라는 보다 유연한 기술을 제안했습니다. 본 논문에서 연구자들은 더 쉽게 업데이트할 수 있는 외부 지식 소스로부터 추가 정보를 제공하기 위해 생성 모델을 검색 모듈과 결합했습니다.
여기서 고질적인 문제 두개를 알려줄까요?
1. 23개의 언어를 정확하게 Cover하기 너무 복잡하죠? LLM은 Deiversity한 대응에 취약합니다.
2. 검색이 몇 초이상 걸리면 구글에서 검색하지 GPT에게 왜 묻죠? Time Limation
이게 검색을 위한 학습 모델의 고질적인 문제 였습니다.
이제 이게 RAG가 이 고질적인 문제를 해결 하였는지 보다 자세히 알려드리겠습니다.
A. Retrieve (검색) : 사용자 쿼리는 외부 지식 소스에서 관련 컨텍스트를 검색하는데 사용됩니다. 이를 위해 사용자 쿼리는 임베딩 모델을 통해 벡터 데이터베이스의 추가 컨텍스트와 동일한(유사한) 벡터 공간에 임베드됩니다. 이를 통해 유사성 검색을 수행할 수 있으며 벡터 데이터 베이스에서 가장 가까운 상위 K개 데이터 객체가 반환됩니다.
읽어 보시니까 어때요? 뭔 소리인가 싶은 사람들이 많을거에요. 이해가 되면 적어도 Computer Science 학사 혹슨 석사 과정을 밟은 사람이라고 생각합니다 또는 정말 공부만 하는 친구든. 잡소리 그만할게요.
a. 유저가 LLM에게 질문을 한다. (e.g GPT야 나의 이상형이 누군지 알려줘?)
b. GPT는 너를 모른다. 그럼 너를 어떻게 GPT에게 알려주는가?
c. Vector Database (벡터 데이터베이스)를 활용한다. 여기서 Vector Database란 User 혹은 기업 단위에서 원하는 Data를 보다 정확하게 찾을 수 있도록 모아두는 데이터베이스입니다. 왜 백터냐? 이건 Natural Language Model 부터 Corpus(말뭉치) 속에서 단어가 어떤의미를 하고 당신이 말하는 질문이 컴퓨터가 정확한 의미를 알기 위해 필요한 건데.. 이거 설명하려면 2시간 걸려서 구글에서 찾아봐요. 어쨋든 쉽게 말해드리면, 너가 말한 질문을 파악하고 그 질문에 대답을 벡터 데이터베이스에 든 데이터중에 가장 정확하고 흡사한 답변을 주기 위해서 꼭 필요하다.
d. Embedding Model 이란 단어와 문장을 수백 또는 수천개의 차원의 Vector로 변환시키는 모델이다. 다시 말해, 과일이냐 야채냐를 구별 할 수 있는 카테고리가 차원이라고 생각하면 되고, 각 야채 및 과일들이 Embedding되어 Vector값을 가지게 된다. 그러면 수백 수천 차원에 각 야채와 과일들은 점으로 찍혀있고 각 점들의 거리를 계산해서 야채인지 과일인지 그 안에서도 비슷한 야채인지 과일인지 알 수 있게된다.
e. 그럼 Vector Database에는 뭐가 있겠어? 단어도 있고~ 문장도 있고~ 각 단어별 문장별 Vector값이 있는거야. ㅇㅋ?
자, 이제 그럼 검색할 수 있는 베이스는 만들어졌고.
B. Augment (증강)
쉽게 말하면 너만의 prompt를 만들어서 (안 만들면 GPT Prompt라고 생각하면됨) 정답의 정확도 강화하는 겁니다.
이건 사용자가 질문하는 쿼리와 백터 데이터베이스에서 답변을 가져오는 컨텍스트의 템플릿이라고 생각하면 됩니다.
C. Generate (생성)
이건 이제 생성된 데이터베이스를 바탕으로 Prompt를 넣으면 LLM이 그냥 GPT-4.0 Api 사용해서 정답을 생성하는 것이라고 생각하면 됩니다.
여기서 GPT4.0 API를 쓰는 이유는
1. 가격 및 속도
이번에 가격이 기존보다 3배 떨어져서 1000토큰당 0.01달러임 (Input) / 1000토큰당 0.03달러임(output)
여기서 토큰이 뭐냐면 단어나 문장 부호를 더 작은 단위로 쪼갠 것을 토큰이라고 생각하면 됩니다.
계산 방식은 https://huggingface.co/spaces/JacobLinCool/tiktoken-calculator 여기서 찾으면 됨. 정확한 공식은 저도 잘 모르겠어요. 샘 알트만이 만든거겠죠 뭐
2. 성능
여기서 성능은 얘가 얼마나 학습되어있는지가 아니라 얼마나 너의 질문의 의미를 잘 이해하는가야.
'LLM' 카테고리의 다른 글
[Session 0]:Scratch 나만의 GPT Project (4) | 2023.12.06 |
---|