본문 바로가기
LLM

LLM - RAG 란 무엇일까? 간단하게 이론 정리

by Tiabet 2023. 12. 7.

진로를 LLM과 NLP 쪽으로 설정해놓긴 했고, 또 관련 공부를 많이 하고 있지만 블로그에 정리를 제대로 안 하고 스윽 넘어가기만 했었다. 사실 포스팅을 한 번 쓰면 하루가 그냥 날아가버려서 시간도 모자라고, 그러다 보니 마음도 잘 안 잡혔기 때문이다.

 

그래서 너무 완벽한 포스팅을 쓰는 것보단 정말 간단하게 LLM 관련 이론들을 하나씩 정리해보고자 한다. 사실 정리하면서 확실히 개념을 잡고 싶은 생각이 더 크지만.

 

가장 먼저 아주 핫한 토픽들 중 하나인 RAG, Retrieval-Augmented Generation 에 대해 정리하려고 한다.

 

RAG와 Hallucination

https://www.youtube.com/watch?v=T-D1OfcDW1M&t=15s&ab_channel=IBMTechnology

 

RAG의 개념을 IBM의 엔지니어 한 분이 아주 쉽게 설명해주신다. 다른 영상들도 몇 개 봤는데 이 분의 설명이 가장 깔끔하면서 명확하다.

 

내가 돌아다니면서 본 RAG의 개념은, 'LLM을 외부 인터넷과 연결시켜 그 답변의 근거를 찾는 기술' 이다. 나는 2월부터 ChatGPT의 가장 큰 단점을 늦은 데이터베이스의 업데이트가 아닌 바로 '환각(Hallucination)' 문제라고 생각했다.

 

잠깐 밈이 됐던 짤. 세종대왕이 맥북프로를 던졌다는 말도 안 되는 이야기를 자연스럽게 풀어내는 모습. 출처 한국일보

환각 현상을 가장 단적으로 보여주는 사진이다. GPT같은 트랜스포머 모델들은 기본적으로 질문과 가장 비슷한 개념을 데이터베이스에서 찾고, (벡터를 이용) 알맞은 대답을 꺼내 사람들에게 보여준다. 이 가장 비슷한 개념이 문제인데, 몰라서 못 알려준다라고 말해야 하는 부분마저도 그나마 가장 똑같은 답변 하나를 꺼내서 그럴듯하게 보여준다는 것이다.

 

환각을 정의하는 문장을 가져와봤다. 환각 : NLP의 컨텍스트에서 제공된 학습 데이터에 상관없이 믿을 수 없거나(unfaithful) 터무니 없는(non-sensical) 텍스트를 생성하는 현상이다.

출처 : https://moon-walker.medium.com/llm%EC%97%90-halluciation-%ED%99%98%EA%B0%81-%EC%9D%B4-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-%EC%9B%90%EC%9D%B8%EA%B3%BC-%ED%95%B4%EA%B2%B0%EB%B0%A9%EC%95%88-f18759f0a959

 

LLM에 Halluciation(환각)이 발생하는 원인과 해결방안

최근 LLM(Auto-regression 모델기반)의 발전과 인기는 AI 커뮤니티 내에서 LLM의 미래를 긍정하는 그룹과 부정하는 그룹으로 나누고 있다.

moon-walker.medium.com

 

이런 환각 현상을 포함해 많은 문제들은 LLM의 심각한 Challenge로 여겨졌으며, 이를 해결하기 위해 다방면으로 노력한 것으로 보인다. 그렇게 나온 해결법들 중 하나가 RAG 이다.

 

사실 RAG의 개념은 간단하다. 순서도로 설명하면,

1. LLM을 특별한 데이터 저장소(인터넷이 될 수도 있고, 회사 내에서 쓰인다면 회사 규정일 수도 있는)와 연결한다.

2. 유저가 프롬프트로 질문을 하면, LLM은 이 데이터 저장소를 먼저 쭉 찾아본다.

3. "유저가 이런 질문을 하는데, 이거에 대해서 아는 게 있나?"

4. 이때 저장소에서 유저의 질문과 유사한 부분이 있으면, 이에 맞게 대답을 해준다.

5. 없으면 학습될 때 사용된 정보들로 유저에게 알려준다. 혹은, 그냥 모른다고 대답한다.

 

즉, LLM을 Training 혹은 Fine-Tuning 시켰을 때의 데이터만 사용하는 것이 아닌, 추가적인 외부 데이터들도 사용하겠다는 의미이다. 이렇게 되면 다음과 같은 장점들이 발생한다.

 

1. 답변의 근거를 제시할 수 있어 유저가 더욱 믿을 수 있다.

2. 정보의 업데이트가 필요하지 않으며, 최신 정보에도 잘 대답할 수 있다.

3. 데이터 저장소에 회사 규정을 적어놓으면, 관련 질문을 받았을 때 데이터 유출을 방지할 수 있다.

4. 이용 가능한 정보의 양이 어마무시하게 많아진다. Train된 정보 외의 정보들도 사용 가능하기 때문이다.

 

가장 매력적으로 느껴지는 부분은 환각 해결과 비용 부분이다. 초거대 모델들을 새로 학습시키거나 파인튜닝하는 데에는 어마어마한 돈과 시간이 든다.(전기세) 하지만 RAG를 활용하면 그저 데이터 저장소를 슬쩍 바꿔주기만 하면 되니 실로 어마어마한 이익을 얻을 수 있는 것이다.

 

https://ai.meta.com/blog/retrieval-augmented-generation-streamlining-the-creation-of-intelligent-natural-language-processing-models/

 

Retrieval Augmented Generation: Streamlining the creation of intelligent natural language processing models

Teaching computers to understand how humans write and speak, known as natural language processing (NLP), is one of the oldest challenges in AI research. There has been a marked change in approach over the past two years, however. Where research once focuse

ai.meta.com

 

 

RAG를 직접 구현해본 적은 없지만 Meta의 연구진들에 의하면 겨우 5줄의 코드만으로 LLM에서 RAG를 구현하는 것이 가능하다고 한다. 

https://huggingface.co/facebook/rag-token-nq#usage

 

facebook/rag-token-nq · Hugging Face

💻 sadkowsk/coursemapper_RAG

huggingface.co

from transformers import RagTokenizer, RagRetriever, RagTokenForGeneration

tokenizer = RagTokenizer.from_pretrained("facebook/rag-token-nq")
retriever = RagRetriever.from_pretrained("facebook/rag-token-nq", index_name="exact", use_dummy_dataset=True)
model = RagTokenForGeneration.from_pretrained("facebook/rag-token-nq", retriever=retriever)

input_dict = tokenizer.prepare_seq2seq_batch("who holds the record in 100m freestyle", return_tensors="pt") 

generated = model.generate(input_ids=input_dict["input_ids"]) 
print(tokenizer.batch_decode(generated, skip_special_tokens=True)[0]) 

# should give michael phelps => sounds reasonable

 

참 친절하게도 벌써 이런 패키지들을 만들어버린 것이다. 이 패키지는 데이터 저장소로 위키피디아를 사용한다고 한다. 확실히 위키피디아만 사용해도, 세종대왕이 맥북프로를 던졌다고 하는 사실 정도는 충분히 검증할 수 있으니 꽤 합리적으로 보인다.

 

https://arxiv.org/abs/2005.11401

 

Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

Large pre-trained language models have been shown to store factual knowledge in their parameters, and achieve state-of-the-art results when fine-tuned on downstream NLP tasks. However, their ability to access and precisely manipulate knowledge is still lim

arxiv.org

동일 개발자들이 무려 2021년 4월에 이 방법을 제시해놓고 또 패키지를 만들었다고 하니, 메타와 OpenAI 등의 회사들이 얼마나 앞서가 있는지 참 무섭기도 하다.

 

 

참고로 포스팅에선 한국어로 데이터 저장소라는 용어로 일괄 사용했는데 이건 오롯이 내 편의를 위해 내가 해석한 용어로, 사용자에 따라서 다르게 표기할 수도 있다.