홈으로 돌아가기

RAG 시스템: 리랭커, 임베딩, LLM 정확도

RAG 시스템의 원리, 벡터 데이터베이스, 임베딩 및 리랭커가 대형 언어 모델 응답의 정확도를 향상시키는 역할에 대해 공부하세요. IT 전문가를 위해.

RAG 최적화: 리랭커가 LLM 응답 정확도를 어떻게 향상시키는가
Advertisement 728x90

RAG 시스템: LLM 환각 줄이고 답변 정확도 높이는 리랭커 활용법

대규모 언어 모델(LLM)은 인상적인 텍스트 생성 능력을 보여주지만, "환각(hallucinations)"—즉, 거짓되거나 검증되지 않은 정보를 생성하는 경향—은 여전히 중요한 과제로 남아 있습니다. 이를 해결하기 위해 검색 증강 생성(RAG) 아키텍처가 널리 사용됩니다. RAG는 LLM이 외부의 검증된 데이터 소스를 활용하여 생성된 응답의 신뢰성과 관련성을 크게 향상시킬 수 있도록 합니다. 이 글은 RAG의 작동 원리를 깊이 있게 다루며, 임베딩, 벡터 데이터베이스, 검색기(retriever)와 같은 핵심 구성 요소를 살펴보고, 특히 검색 속도와 정보 정확성 사이의 균형을 맞추는 데 있어 리랭커(reranker)의 중요한 역할에 초점을 맞춥니다.

RAG 기본 원리: 환각에서 사실로

LLM 환각 문제는 모델이 방대한 데이터셋으로 훈련되어, 요청된 주제에 대한 구체적인 지식이 부족하더라도 그럴듯하게 들리는 텍스트를 생성할 수 있기 때문에 발생합니다. RAG 시스템은 외부 지식 기반에서 최신 관련 정보에 모델이 접근할 수 있도록 함으로써 이 문제를 해결합니다. 이 과정은 크게 두 단계, 즉 검색(Retrieval)과 생성(Generation)으로 나뉩니다. 검색 단계에서는 시스템이 사용자 질의에 가장 관련성이 높은 텍스트 스니펫을 데이터베이스에서 추출한 다음, 이를 LLM에 추가 컨텍스트로 전달하여 응답을 생성하게 합니다.

외부 데이터를 효과적으로 사용하려면 데이터 준비가 필요합니다. 긴 문서는 더 작고 의미 있는 세그먼트, 즉 청크(chunks)로 분할됩니다. 이는 LLM이 한 번에 처리할 수 있는 최대 텍스트 양인 제한된 컨텍스트 창(context window)을 가지고 있기 때문에 필수적입니다. 인접한 청크 간의 정보 일관성을 유지하기 위해 오버랩(overlap) 기법이 사용되는데, 이는 이전 세그먼트의 작은 부분이 다음 세그먼트의 시작 부분에 포함되는 방식입니다. 이는 모델이 개별 텍스트 부분을 다룰 때 컨텍스트를 더 잘 이해하는 데 도움이 됩니다.

Google AdInline article slot

벡터 데이터베이스와 임베딩: 의미론적 검색

RAG 시스템의 핵심에는 관련 데이터 조각을 찾는 메커니즘이 있습니다. 컴퓨터는 단어의 의미를 직접 이해할 수 없으며, 숫자로 작동합니다. 따라서 텍스트는 임베딩(embeddings) 또는 벡터라고 불리는 숫자 표현으로 변환됩니다. 임베딩은 단어, 구 또는 전체 텍스트 세그먼트의 의미론적 의미를 인코딩하는 다차원 벡터(숫자 시퀀스)입니다. 의미가 유사한 단어나 구는 다차원 공간에서 서로 가까운 위치에 있는 벡터를 가집니다.

임베딩 생성 과정은 방대한 텍스트 코퍼스로 훈련된 특수 임베딩 모델(embedding models)을 사용하여 수행됩니다. 이 모델들은 단어와 그 컨텍스트를 고유한 숫자 표현에 매핑하는 방법을 학습합니다. 예를 들어, "왕(king)", "남자(man)", "여자(woman)"에 대한 벡터를 가져오면, "여왕(queen)"에 대한 벡터는 "vector(king) - vector(man) + vector(woman)" 연산의 결과와 매우 가까울 것입니다. 이는 임베딩이 언어의 복잡한 의미론적 및 구문적 관계를 포착하는 능력을 보여줍니다.

생성된 임베딩은 벡터 데이터베이스(vector databases)에 저장됩니다. 이 데이터베이스는 빠른 최근접 이웃 검색에 최적화되어 있습니다. 사용자가 질문을 하면, 해당 질의도 임베딩으로 변환된 다음, 벡터 데이터베이스는 질의의 임베딩과 가장 유사한 텍스트 조각의 임베딩을 찾습니다. 벡터 유사성은 일반적으로 코사인 유사도와 같은 측정항목을 사용하여 측정됩니다.

Google AdInline article slot

다음은 OpenAI API를 사용하여 임베딩 생성을 시연하는 Python 코드 예시입니다:

# To run this example, you need to install the openai library and obtain an API key
from openai import OpenAI
import os

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

text = "A fluffy cat named Whiskers enjoys telling tales of ancient explorers."

response = client.embeddings.create(
    model="text-embedding-3-small",
    input=text,
    dimensions=768  # explicitly set the dimensionality
)

vector = response.data[0].embedding
print(f"Vector dimensionality: {len(vector)}")  # will output 768
print("First 20 numbers:", vector[:20])
print("... and so on up to the 768th number")

이 코드는 텍스트 구문을 768개의 요소로 구성된 숫자 벡터로 변환하며, 이는 벡터 데이터베이스에서 검색하는 데 사용될 수 있습니다.

검색기와 확장성: 성능 과제

검색기(retriever)는 벡터 데이터베이스에서 초기 관련 문서 또는 조각 세트를 추출하는 역할을 하는 RAG 시스템의 구성 요소입니다. 이는 사용자 질의의 임베딩을 사용하여 저장된 청크의 임베딩 중 가장 유사한 것을 찾습니다. 소규모 문서 컬렉션의 경우, 검색기는 무차별 대입 검색(brute-force search)을 수행하여 질의 임베딩을 모든 저장된 벡터와 비교할 수 있습니다. 그러나 데이터 볼륨이 증가함에 따라(수십억 개의 조각), 이 접근 방식은 비효율적이고 너무 느려집니다.

Google AdInline article slot

확장성 문제를 해결하기 위해 다양한 근사 최근접 이웃(Approximate Nearest Neighbor, ANN) 알고리즘이 사용됩니다. 이러한 알고리즘은 IVF (Inverted File Index), HNSW (Hierarchical Navigable Small World) 또는 LSH (Locality Sensitive Hashing)와 같은 특수 인덱스를 생성합니다. ANN 인덱스는 약간의 정확도를 희생하면서 검색 속도를 크게 높입니다. 이들은 완벽하게 정확하지는 않지만, 훨씬 더 짧은 시간에 매우 가까운 이웃을 찾습니다. 따라서 재현율(recall) (완전성, 즉 모든 관련 항목을 찾는 능력)과 지연 시간(latency) (응답 속도) 사이의 절충점이 발생합니다.

속도 최적화에도 불구하고, 검색기가 반환하는 결과가 항상 이상적인 것은 아닙니다. 검색기는 질의와 의미론적으로 가깝지만 최종 답변을 구성하는 데 가장 관련성이 높거나 정확하지 않은 조각을 추출할 수 있습니다. 이는 검색에 사용되는 임베딩이 종종 단방향(bi-encoder)이기 때문입니다. 즉, 질의와 문서는 독립적으로 인코딩된 다음, 그 벡터가 비교됩니다. 빠른 검색에는 효율적이지만, 이 접근 방식은 미묘한 문맥적 연결을 놓칠 수 있습니다.

리랭커로 정확도 향상

검색기의 한계를 극복하고 RAG 시스템 응답의 정확도를 높이기 위해 리랭커(rerankers)가 사용됩니다. 리랭커는 검색기로부터 잠재적으로 관련성이 있는 작은 세트(예: 10-100개)의 조각을 받아 더 깊은 관련성 평가를 기반으로 순서를 재조정하는 추가 구성 요소입니다. 이는 덜 유용한 결과를 걸러내고 가장 중요한 결과를 상위로 끌어올리는 필터 역할을 합니다.

검색기가 사용하는 임베딩 모델과 달리, 리랭커는 종종 크로스 인코더(cross-encoders)를 활용합니다. 크로스 인코더는 "질의-문서" 쌍을 입력으로 받아 함께 처리하여 상호 관련성을 평가합니다. 이를 통해 단순한 벡터 비교보다 질의와 컨텍스트 간의 더 복잡하고 미묘한 상호 작용을 포착할 수 있습니다. 크로스 인코더는 바이 인코더 임베딩 모델보다 훨씬 느리지만, 이미 필터링된 소수의 문서 세트에 적용되므로 계산적으로 실행 가능합니다.

따라서 리랭커는 속도와 정확성 사이의 최적의 균형을 맞추는 데 도움을 줍니다. ANN 인덱스를 사용하는 빠른 검색기는 잠재적으로 관련성이 있는 광범위한 청크를 신속하게 선택하고, 그 다음 더 느리지만 더 정확한 리랭커가 이 제한된 세트를 재평가하여 LLM이 응답을 생성하는 데 가장 높은 품질의 컨텍스트를 받도록 보장합니다. 이 다단계 접근 방식은 RAG 시스템이 제공하는 정보의 품질과 신뢰성을 크게 향상시키고, 환각의 위험을 최소화하며, 전반적인 사용자 만족도를 높입니다.

핵심 요약

  • RAG 시스템은 LLM이 외부 데이터를 활용하여 정확하고 신뢰할 수 있는 답변을 생성함으로써 "환각" 문제를 해결할 수 있도록 합니다.
  • 임베딩은 텍스트를 의미론적 의미를 인코딩하는 숫자 벡터로 변환하여 벡터 데이터베이스에서 유사성 검색을 용이하게 합니다.
  • 검색기는 임베딩과 ANN 인덱스를 사용하여 초기 관련 조각 세트를 신속하게 추출하며, 속도와 재현율 사이의 균형을 맞춥니다.
  • 리랭커 (종종 크로스 인코더 기반)는 검색기 결과를 재평가하여 덜 관련성 있는 조각을 걸러내고 LLM을 위한 컨텍스트의 정확도를 향상시킵니다.
  • 빠른 검색기와 정확한 리랭커의 조합은 RAG 시스템에서 성능과 품질 사이의 최적의 균형을 달성합니다.

— Editorial Team

Advertisement 728x90

다음 읽기