11. RAG (검색증강생성)

LLM 시대, LangChain(랭체인)으로 배우는 AI 소프트웨어 개발

by AI개발자
gaebalai-blog_ai-v3-1.jpg

RAG(Retrieval Augmented Generation, 검색증강생성)(Lewis et al, 2020)은 작업과 관련된 외부지식을 캡쳐하여 LLM의 응답 성능을 향상시키는 기술입니다. LLM은 응답 성능을 향상시키는 기술입니다. LLM은 대규모 텍스트 코퍼스를 사용하여 사전학습되지만, 훈련 데이터에 존재하지 않는 지식에 기초한 질문에 대한 답변이 어려울 수 있습니다. 이 때문에, 훈련 데이터에 포함되지 않은 특정 도메인의 정보, 최신의 사건등이 필요한 경우, 회답할 수 없거나, 부정확한 회돱을 생성(할루시네이션) 하는 일이 있습니다. RAG의 기본 아이디어는 교육 데이터 이외의 출처에서 지식을 얻고 LLM이 이를 이용할 수 있도록 함으로써 보다 정확하고 정보량이 많은 출력을 생성하는 것입니다.


아래 그림은 RAG의 개요를 보여줍니다. RAG는 LLM과 외부지식 소스를 저장하는 인덱스로 구서오딥니다. 사용자로부터 프롬프트가 주어지면 LLM을 사용하여 프롬프트의 내장 벡터를 검색하고 인덱스에서 프롬프트와 관련된 지식을 검색합니다. 그런 다음 관련 지식을 원래 프롬프트와 결합하여 LLM에 입력하여 답변을 생성합니다.


RAG에서 사용할 수 있는 외부 지식원으로는 웹페이지, 뉴스기사, 서적, 논문, 기밀문서등 다양한 텍스트 데이터가 있습니다. 지식원의 선정에 있어서는 태스크에 관련하는 정보가 풍부하게 포함되어 있는 것, 정보의 신뢰성이 높은 것등이 중요한 기준이 됩니다.


RAG의 사용단계는 다음과 같습니다.


색인 생성

정보 검색

답변 생성


여기서의 인덱스(색인)란, 외부 지식원으로부터 취득한 정보를 검색가능한 형식으로 변환한 것입니다. 정보 검색은 사용자의 질문과 관련된 정보를 색인에서 검색하고 응답 생성은 검색된 정보를 프롬프트에 포함합니다.


llm-langchain69.png RAG(검색증강생성) 개요


(1) 색인 생성

RAG(검색증강생성) 사용의 첫번째 단계에서는 작업과 관련된 외부 지식 소스엣서 색인을 지정합니다. 색인 지정 절차는 다음과 같습니다.


텍스트 추출

분할

벡터화

저장


또한 이 형태를 아래와 같이 표현합니다.


llm-langchain70.png RAG(검색증강생성) 인덱싱 개요

① 텍스트 추출

먼저 외부지식이 될 문서를 선택하고 텍스트 데이터로 변환합니다. 문서의 형식으로는 Word, PDF, Markdown, HTML, HWP 등 다양한 것을 생각할 수 있습니다. 이 문서에 포함된 텍스트 데이터를 추출하고 전처리합니다. 전처리에는 헤더, 바닥글, 광고제거 등의 불필요한 데이터 삭제, 텍스트의 표기 통합등이 포함됩니다.


② 분할

그런 다음 텍스트 데이터를 적절한 크기의 청크로 나눕니다. 텍스트를 분할하는 것은 나중에 LLM에 입력할 때의 제한을 고려하는 것입니다. LLM은 최대 토큰 수를 초과할 수 없으므로 적절한 크기로 나누어야 합니다. 이 때문에 사용하는 LLM에 적합한 길이로 텍스트를 분할합니다. 청크의 단위는 문장, 단락, 고정길이의 토큰 수등으로 다룹니다.


③ 벡터화

그런 다음 분할된 개별 청크를 내장 벡터로 변환합니다. 이 포함 벡터는 문서의 특징을 벡터화한 것입니다. 임베디드 벡터 생성에도 이전에 설명한 Transformer가 자주 사용됩니다. 문서를 Transformer에 입력하여 마지막 토큰의 포함된 벡터를 가져옵니다. 마지막 토큰은 전체 문서의 정보를 집계하므로 전체 문서의 특성을 나타내는 포함 벡터를 사용할 수 없습니다.


④ 저장

인덱싱의 마지막 단계는 내장 벡터를 데이터베이스에 저장하는 것입니다. 여기서 사용하는 데이터베이스는 임베디드 벡터를 이용한 빠른 유사도 검색에 대응할 수 있습니다. 예를 들어, 벡터 데이터에 특화된 고속 검색기능을 제공하는 Chrome, Faiss등이 이용됩니다.


(2) 정보 검색

정보검색은 프롬프트와 관련된 정보를 인덱스에서 검색합니다. 이 단계에서는 프롬프트를 포함 벡터로 변환하고 이를 사용하여 인덱스를 검색하고 해당 텍스트 데이터를 검색합니다. 이 검색에서는 포함된 벡터의 유사도를 사용하여 프롬프트와 가장 관련성이 높은 텍스트 데이터를 검색합니다.


유사도로는 코사인 유사도 등이 사용됩니다. 코사인 유사도는 두 벡터 사이의 각도의 코사인을 계산하여 벡터 간의 유사도를 측정하는 지표입니다. 코사인 유사도는 내장벡터의 내적을 그 놈으로 나눔으로써 계산됩니다. 임베디드 벡터의 내적은 Transformer 주의 메커니즘의 계산에서도 사용되므로 LLM의 내부구조와도 관련이 있습니다.


(3) 답변 생성

검색에서 얻은 텍스트 데이터를 사용하여 답변을 생성합니다. 그 때 취득한 텍스트 데이터를 프롬프트에 짜넣고 LLM에 입력합니다. LLM은 외부 지식을 포함하는 프롬프트를 입력으로 사용하고 이에 따라 응답을 생성합니다. 답변 생성시, LLM은 원래 프롬프트와 관련 외부 지식을 결합하여 정확한 답변을 생성할 수 있습니다.



©2024-2025 GAEBAL AI, Hand-crafted & made with Damon Jaewoo Kim.

GAEBAL AI 개발사: https://gaebalai.com

AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5


keyword
이전 11화10. Self-Consistency (자기 일관성)