brunch

You can make anything
by writing

C.S.Lewis

by chorong Jan 24. 2024

요즘 개발자들 사이에서 핫한 RAG_#2

Retrieval Augmented Generation; 검색증강생성

지난 1편에서는 RAG가 등장한 배경과 RAG의 기본적인 설명을 공유했는데요,

2편에서는 RAG가 '외부지식(정보)'를 검색할 때 어떤 프로세스로 이루어지는지에 대해 다루겠습니다.




기본적인 RAG를 넘어, 보다 복잡한 사용자 질문과 정교한 데이터소스를 다룰 때 고급기술과 전략이 필요합니다. 사용자의 질의와 관련된 외부정보를 검색하고, 답변을 하기까지 크게 8개의 단계로 나누어져요!



1. Chunk-size

RAG는 사용자 질의에 대해 관련 정보를 검색한 후, LLM(대규모언어모델)을 거쳐 답을 해주는 AI모델인데요!

쉽게 생각해서 오픈북 테스트를 떠올리시면 됩니다. 즉, 범위를 정해주고 해당 범위내에서 검색한 후 사용자의 질의에 대해 답변을 해주기에 할루시네이션 문제를 현저히 감소시킬 수 있는 것이죠!

그래서 외부지식(정보)를 검색하기 위해 최적의 크기로 덩어리를 나누어야 하는데 너무 잘게 쪼개거나 너무 크게 쪼갤 경우 답변의 정확성이 떨어질 수 있어요!



2. Sliding Window Chunking

외부지식(정보)를 덩어리로 쪼개는데, 이때 긴 문서의 경우 정확성을 높이기 위해 문맥을 잘 파악할 수 있도록 겹치는 부분을 설정해서 쪼갭니다.

위 이미지에서 왼쪽에 보시면, 외부지식(정보)를 덩어리로 쪼갤때 겹치는 범위(Overlapping chunks)를 설정해주면 글의 이해도가 훨씬 올라가겠죠?



3. Knowledge Graphs

지식 그래프를 사용함으로써 외부지식(정보)의 더 풍부한 표현을 가능하게 합니다. Knowledge graphs는 지식을 보기 쉽도록 그래프화 한 것을 의미하는데요! 이는 정보들간의 관계, 계층구조, 상호작용 등에 대해 더 효과적으로 표현할 수 있어요. 이렇게 더 다양한 방식으로 표현하게 되면 모델이 검색과 생성단계에서 지식을 풍부하게 활용할 수 있기 때문에 더 유의미하고 정확한 결과를 생성할 수 있습니다:)



4. Embedding Fine-Tuning

'Embedding(임베딩)'이란 텍스트 데이터를 컴퓨터가 잘 이해할 수 있게 숫자로 나타내는 기술을 뜻하는데요. 기존의 임베딩 모델을 가져와서 해당 도메인에 특화된 말뭉치에 맞게 미세조정(Fine-Tuning)을 하거나 적응하도록 합니다. '특화된 말뭉치에 맞게'하기에 해당되는 특정분야의 전문용어나 문맥을 조금 더 잘 이해하고 표현할 수 있겠죠?



5. Structured Knowledge

재귀검색 및 쿼리라우팅을 활성화합니다. 말이 너무 어렵죠? ㅎㅎ

재귀검색은 초기에 검색한 결과를 다시 활용하여 추가적으로 검색하는 것을 의미합니다. 이는 더 깊은 수준의 정보를 찾는 데에 도움이 됩니다.

쿼리라우팅이라는 것은 쿼리를 적절한 목적지로 보내는 것을 의미합니다.

쿼리가 어떤 정보를 찾고자 하는지에 따라 적절한 데이터베이스나 검색엔진으로 라우팅하여 처리하는 것을 말해요!

이처럼 재귀검색과 쿼리라우팅을 통해 보다 깊은 수준의 정보를 검색하고, 적절한 데이터소스를 쿼리로 전달할 수 있게 합니다. 



6. Metadata Attachements

키워드 필터링을 통해 보다 효율적인 검색을 가능하게 합니다. 검색을 할 때 특정 조건을 기반으로 데이터를 필터링하여 빠르고 정확한 검색을 할 수 있습니다.



7. Mixed Retireval 

사용자 질의에 맞게 밀집한 검색과 희소한 검색을 혼합하여 사용합니다.

밀집한 검색과 희소한 검색이라니, 단어가 익숙하지 않은데요,

'밀집한 검색(dense search)'이란 많은 양의 정보가 비교적 작은 공간에 밀집되어 있는 상태로, 특정 주제나 키워드에 대한 상세 정보를 제공함으로써 보다 구체적인 답변을 얻을 수 있습니다.

'희소한 검색(sparse search)'이란 많은 양의 정보가 넓은 공간에 흩어져 있는 상태로, 다양한 주제나 키워드에 대한 전반적인 정보를 제공함으로써 다양하고 넓은시각의 답변을 얻을 수 있습니다.

이처럼 RAG는 밀집한검색과 희소한검색을 함께 사용함으로써 사용자질의에 대해 깊이 있는 정보와 넓은 시각의 정보를 함께 제공합니다.

우리가 흔히 정보를 접할 때 'T'자 형태로 접근해야 한다고들 하는데 이와 같은 이치인 것 같죠? ㅎ



 8. Question-Embedding Transformation

임베딩이란 4번에서 텍스트를 숫자로 변환하는 것이라고 말씀드렸는데요!

이 단계에서는 사용자의 질의와 검색 대상인 문서를 비교하여 해당 질의와 가장 잘 맞는 문서의 유사도를 높이는 방향으로 조정하여 '정렬'합니다.

그리고 질문에 대한 임베딩에 추가 정보를 주거나 문서 임베딩에 관련된 정보를 더 '보강'함으로써 더 정확한 결과를 얻을 수 있습니다.





해당 글에서는 RAG가 정보를 검색하는 프로세스에 대해 공유드렸습니다.

생각보다 정확도가 높은 답변을 위해 많은 전략을 사용하고 있다는 점에서 놀라웠는데요,

다음에는 '요즘 개발자들 사이에서 핫한 RAG' 시리즈의 마지막 3편, 생성단계에서의 RAG에 대해 다루겠습니다:)  

매거진의 이전글 요즘 개발자들 사이에서 핫한 RAG_#1
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari