GEN AI

RAG: Retrieval-Augmented Generation
GenAI
RAG(Retrieval-Augmented Generation)는 대규모 언어 모델(LLM)의 한계를 극복하기 위해
제안된 새로운 자연어 처리 기술입니다. LLM은 방대한 양의 텍스트 데이터를 사전 학습하여
강력한 언어 이해 및 생성 능력을 갖추고 있지만,
학습 데이터에 없는 최신 정보나 특정 도메인 지식은 제공하기 어렵다는 단점이 있습니다.
RAG는 이러한 LLM의 한계를 극복하기 위해 ‘지식 검색’과 ‘언어 생성’을 결합한 프레임워크입니다.
RAG의 기본 아이디어는 질문에 답하기 위해 필요한 지식을 외부 데이터베이스에서 검색하여 활용하는 것입니다.

검색 증강 생성은 추가 데이터 소스의 컨텍스트를 더하고 훈련을 통해 LLM의 원래 지식 기반을 보완함으로써
검색 경험의 정확도를 개선할 수 있습니다.
따라서 모델을 다시 훈련할 필요 없이 대규모 언어 모델의 출력이 향상됩니다.
추가 정보 소스는 LLM의 훈련에 사용되지 않은 인터넷의 새로운 정보부터
독점 비즈니스 컨텍스트 또는 비즈니스에 속한 기밀 내부 문서에 이르기까지 다양합니다.

- RAG의 등장 배경과 필요성 -

RAG(Retrieval-Augmented Generation)의 등장은 자연어 처리(NLP)와 인공지능(AI) 기술의 발전,
사용자의 정보 요구 증가, 그리고 비정형 텍스트 데이터의 폭발적인 증가에 대응하기 위해 필요성이 대두되었습니다.
이 기술은 특히 대형 언어 모델(LLM)이 지니는 한계점을 극복하고자 개발되었습니다.
한계점 극복

한계점 극복

기존의 LLM은 일단 훈련이 완료되면 그 시점 이후의 데이터에 접근할 수 없어, 새로운 정보나 변화하는 데이터에 대응하지 못하는 한계가 있습니다. RAG는 이러한 문제를 해결하기 위해 실시간으로 정보를 검색하고 통합함으로써, LLM의 응답을 최신 상태로 유지하고 정확성을 높일 수 있습니다.

맞춤형 데이터 활용

맞춤형 데이터 활용

많은 조직들이 자신들의 특정 요구에 맞는 데이터를 활용하여 보다 구체적이고 관련성 높은 응답을 제공할 필요가 있습니다. RAG는 기업이나 조직이 보유한 맞춤 데이터를 활용하여 직원이나 고객의 질문에 보다 적절하게 대응할 수 있도록 지원합니다.

비정형 텍스트 데이터의 활용

비정형 텍스트 데이터의 활용

인터넷과 디지털 기기의 보급으로 생성되는 방대한 양의 비정형 텍스트 데이터를 효율적으로 활용하기 위해, RAG는 이 데이터를 통합하고 처리하여 사용자에게 필요한 정보를 제공할 수 있는 방법을 제시합니다.

통합형 질의응답 시스템

통합된 질의응답 시스템

전통적인 질의응답 시스템의 한계를 넘어서기 위해, RAG는 지식 검색과 답변 생성을 통합적으로 처리합니다. 이는 사용자의 질문을 보다 정확하게 이해하고, 관련성 높은 답변을 실시간으로 제공하는 데 중요한 역할을 합니다.

- Advantages -

향상된 정확성과 상세성

향상된 정확성과 상세성

RAG 모델은 관련 문서를 검색하여 그 정보를 바탕으로 응답을 생성합니다. 이 과정을 통해 모델은 더 정확하고 상세한 정보를 제공할 수 있으며, 특히 복잡하거나 특정 지식이 요구되는 질문에 효과적입니다.

컨텍스트 기반 응답

컨텍스트 기반 응답

RAG는 주어진 질문에 가장 적합한 문서를 검색함으로써, 질문의 맥락을 더 잘 이해하고 그에 따라 맞춤형 답변을 생성할 수 있습니다. 이는 특히 다의어 해석이나 맥락을 요구하는 질문에서 유리합니다.

지속적인 학습과 적응성

지속적인 학습과 적응성

검색 가능한 데이터베이스에 지속적으로 새로운 정보가 추가될 경우, RAG 모델은 새로운 데이터를 즉각적으로 활용하여 답변을 개선할 수 있습니다. 이로 인해 모델은 시간이 지나면서 더욱 정확하고 관련성 높은 응답을 생성할 수 있습니다.

확장성

확장성

RAG는 기존의 언어 모델보다 훨씬 더 큰 정보 소스에 접근할 수 있습니다. 대규모 문서 데이터베이스를 검색하여 사용함으로써, 모델은 다양한 주제와 분야에 걸쳐 광범위한 지식을 활용할 수 있어, 다양한 응용 분야에서의 활용이 가능합니다.

- RAG Process -

RAG(Retrieval-Augmented Generation)는 기존의 단순한 텍스트 생성 기반의 자연어 처리 모델보다 더 정확하고 깊이 있는 답변을 제공할 수 있습니다. 검색 기반의 접근 방식은 특히 대규모 데이터베이스를 활용하는 응용 분야에서 매우 유용하며, 실제 세계의 다양한 문제에 적용될 수 있는 강력한 도구입니다.
rag process

RAG 프로세스

문서 로드 및 Vector DB 저장

1

문서 로드(Load)

문서(pdf, word), RAW DATA, 웹페이지, Notion 등의 데이터를 읽기

2

분할(Split)

불러온 문서를 chunk 단위로 분할

3

임베딩(Embedding)

문서를 벡터 표현으로 변환

4

벡터DB(VectorStore)

변환된 벡터를 DB에 저장

RAG 프로세스

문서 검색 및 결과 도출

5

검색(Retrieval)

유사도 검색(similarity, mmr), Multi-Query, Ensemble-Retriever

6

프롬프트(Prompt)

검색된 결과를 바탕으로 원하는 결과를 도출하기 위한 프롬프트

7

모델(LLM)

모델 선택(Llama3, Alpha-Model)

8

결과(Output)

텍스트, JSON, 마크다운

- Prompt Maker Process -

Prompt Maker의 목적은 검색어를 입력받고 LLM모델에 검색할 때 더 좋은 답변을 얻기위해 양질의 프롬프트(Prompt)를 생성하는것입니다. Prompt Maker에서 RAG는 기존의 Lang Chain의 의존되어서 진행되어지는 프로세스와는 다르게 자체적인 프로세스를 구축하였습니다. 기존의 Lang Chain의 경우는 Vector DB의 임베딩(Embeddig)모델 선정,정보 검색 (Retrieval)방법 설정 등을 정해진 라이브러리 한계에서만 설정하여 진행하였으나 Prompt Maker에서는 자유로운 모델설정과 정보검색방식 설정의 이점을 통해 양질의 프롬프트(Prompt)를 생성할 수 있습니다.
Prompt Maker Process
Prompt Maker Process 챗봇 검색 Process

- 가까운 이웃 검색 -
(Nearest Neighbors Search)

Prompt Maker에 정보검색(Retrieval)중 Default로 설정된 ChromaDB의 가까운 이웃 검색(Nearest Neighbors Search) 은 고차원 벡터 공간에서 쿼리 벡터와 가장 유사한 벡터를 찾아주는 기능입니다. 이 기능은 데이터베이스에 저장된 벡터 데이터를 기반으로 쿼리 벡터와 가장 유사한 항목을 빠르게 찾아내어, 사용자에게 관련성 높은 결과를 제공합니다.
Chroma DB에서의 가까운 이웃 검색 과정
NNS Process

- 멀티 쿼리 검색 -
(Multi-Query Retrieval)

Prompt Maker에 정보검색(Retrieval)중 멀티쿼리는 여러 개의 검색 쿼리를 병렬로 실행하여 검색 정확도와 다양성을 높이는 방법입니다.
이는 특히 다양한 관점을 포함하거나 복잡한 정보 요구를 만족시키기 위해 유용합니다.
Prompt Maker의 경우는 기존의 RAG와는 다른방식으로 학습에 사용된 질문으로 구성된 자료와 다양한 문서자료들을 VectorDB에 저장합니다.
검색쿼리 들어오게 되면 저장된 질문데이터에서 검색쿼리와 연관성이 높은 질문을 여러개 출력하고
그 질문을 다시 VectorDB에 검색하여 연관성 높은 자료를 여러개 출력하는 방식입니다.
즉, 두 단계의 검색 과정을 통해, 첫 번째 단계에서 쿼리와 유사한 질문들을 찾고,
두 번째 단계에서 이 질문들을 기반으로 관련 문서들을 검색하여 최종적으로 사용자에게 제공되는 정보의 품질과 정확성을 높입니다.
이 방식은 멀티쿼리 접근법을 통해 보다 포괄적이고 심층적인 검색 결과를 제공하는 것을 목표로 합니다.
문서 저장
(Document Save)
기존의 모델이 학습한 내용이 아닌 다양한 문서 자료를 임베딩으로 변환하여 Vector DB에 저장합니다. 다양한 문서자료와 다양한 기존의 학습된 질문 쿼리들을 저장합니다. Prompt Maker의 경우는 데이터 저장과 임베딩에는 Sentence모델을 사용하고 Vector DB의 경우는 ChromaDB를 사용하고 있습니다.
>>
질문 처리
(Input Query Processing)
사용자가 특정 정보를 요청하면 이 입력 쿼리는 벡터화되어 VectorDB에 저장된 질문 데이터와 비교됩니다. 벡터화 과정에서는 BERT와 같은 자연어 처리 모델을 사용하여 쿼리와 질문 데이터를 고차원 벡터로 변환합니다. 이러한 벡터화된 쿼리는 VectorDB에서 유사한 질문을 검색하는 데 사용되며, 검색된 유사 질문들은 검색 결과의 정확성과 다양성을 높이기 위해 활용됩니다.
>>
정보 검색
(Retrieval)
검색된 질문들이 도출되면, 이 질문들 각각을 다시 벡터화하여 VectorDB에 저장된 문서 자료와 비교합니다. 이 두 번째 검색 단계에서는 각 질문에 대한 관련 문서들이 검색되어 출력됩니다. 이 과정을 통해 사용자는 초기 쿼리에 대한 다양한 측면을 반영한 연관성 높은 자료들을 얻을 수 있습니다.

RAG 프로세스

문서 로드 및 Vector DB 저장

1

문서 로드(Load)

문서(pdf, word), RAW DATA, 웹페이지, Notion 등의 데이터를 읽기

2

분할(Split)

불러온 문서를 chunk 단위로 분할

3

임베딩(Embedding)

문서를 벡터 표현으로 변환

4

벡터DB(VectorStore)

변환된 벡터를 DB에 저장

RAG 프로세스

문서 검색 및 결과 도출

5

검색(Retrieval)

유사도 검색(similarity, mmr), Multi-Query, Ensemble-Retriever

6

프롬프트(Prompt)

검색된 결과를 바탕으로 원하는 결과를 도출하기 위한 프롬프트

7

모델(LLM)

모델 선택(Llama3, Alpha-Model)

8

결과(Output)

텍스트, JSON, 마크다운

- 앙상블 검색기 -
(Ensemble Retriever)

Prompt Maker의 앙상블 검색기 구성 방식은 멀티쿼리 방식과
Chromadb 그리고 BWSE를 활용하여 보다 정교한 검색 결과를 제공합니다.
이를 통해 검색 쿼리에 대한 답변을 가중치를 부여하여 최적의 프롬프트를 구성하는 과정입니다.
문서 저장
(Document Save)
앙상블 검색기를 구성하는 ChromaDB와 멀티쿼리 방식은 두개 모두 다른 방식으로 저장하는게 아니라 같은 입력 데이터를 바탕으로 같은곳에 저장된 벡터화 데이터를 가지고 검색을 진행합니다 또한 BWSE의 경우는 독자적인 저장소에 벡터화한 데이터를 저장합니다.
화살표
질문 처리
(Input Query Processing)
Prompt Maker의 앙상블 검색기는 사용자 질문 처리를 통해 검색 쿼리를 벡터화하여 진행됩니다. 사용자가 특정 정보를 요청하면, 입력된 쿼리는 전처리 과정을 거쳐 벡터화됩니다. 이 벡터화된 쿼리는 앙상블 검색기를 구성하는 VectorDB와 BWSE 동시에 입력됩니다. VectorDB는 유사 질문을 검색하여 관련 자료를 찾고, Chromadb와 BWSE는 쿼리와 직접적으로 관련된 자료를 검색합니다. 두 데이터베이스에서 나온 결과는 각각 가중치를 부여받아 통합됩니다. 최종적으로 가중치가 높은 결과를 우선으로 하여 최적의 프롬프트를 구성해 사용자의 질문에 대한 답변을 제공합니다.
화살표
정보 검색
(Retrieval)
Prompt Maker의 정보 검색(Retrieval) 과정은 ChromaDB와 BWSE그리고 멀티쿼리 각각의 프로세스를 통해 각각의 데이터를 검색한 후, 가중치를 부여하여 최종 Prompt를 구성하는 방식입니다. 사용자가 특정 정보를 요청하면, 벡터화된 쿼리가 ChromaDB와 BWSE 그리고 멀티쿼리 프로세스에 동시에 입력됩니다. ChromaDB는 쿼리와 직접적으로 관련된 자료를 검색하고, 멀티쿼리는 유사한 질문들을 검색하여 관련 자료를 찾습니다. 각각의 데이터베이스에서 나온 결과는 각각 가중치를 부여받아 통합됩니다. 이러한 가중치는 검색 쿼리와의 유사도, 자료의 신뢰성 등을 기반으로 결정됩니다. 가중치가 부여된 데이터 목록은 Reference에 비율을 설정하여 추가되고, 이를 통해 최적의 Prompt를 구성하여 사용자의 질문에 대한 답변을 제공합니다.

RAG 프로세스

문서 로드 및 Vector DB 저장

1

문서 로드(Load)

문서(pdf, word), RAW DATA, 웹페이지, Notion 등의 데이터를 읽기

2

분할(Split)

불러온 문서를 chunk 단위로 분할

3

임베딩(Embedding)

문서를 벡터 표현으로 변환

4

벡터DB(VectorStore)

변환된 벡터를 DB에 저장

RAG 프로세스

문서 검색 및 결과 도출

5

검색(Retrieval)

유사도 검색(similarity, mmr), Multi-Query, Ensemble-Retriever

6

프롬프트(Prompt)

검색된 결과를 바탕으로 원하는 결과를 도출하기 위한 프롬프트

7

모델(LLM)

모델 선택(Llama3, Alpha-Model)

8

결과(Output)

텍스트, JSON, 마크다운