AGI 및 미래 AI

Rerankers와 2단계 검색의 검색 증강 생성을 위한 파워

mm
Unite.AI를 Google의 선호 소스에 추가

자연어 처리(NLP)와 정보 검색 분야에서 관련 정보를 효율적이고 정확하게 검색하는 능력은 매우 중요합니다. 이 분야는 지속적으로 발전하고 있으며, 새로운 기술과 방법론이 검색 시스템의 성능을 향상시키기 위해 개발되고 있습니다. 특히, 검색 증강 생성(Retrieval Augmented Generation, RAG)과 같은 기술에서 두 단계 검색과 Rerankers를 사용하는 접근법이 등장했습니다.

이 기사에서는 두 단계 검색과 Rerankers의 세부 사항을 обсужд하고, 그들의 기본 원리, 구현 전략, 및 RAG 시스템의 정확성과 효율성을 향상시키는 데 제공하는ประโยชน에 대해 설명합니다. 또한, 개념과 더 깊은 이해를 도와주기 위해 실제 예제와 코드 조각을 제공할 것입니다.

검색 증강 생성(Retrieval Augmented Generation, RAG) 이해

swe agent LLM

두 단계 검색과 Rerankers의 세부 사항에 대해 논의하기 전에, 검색 증강 생성(RAG)에 대한 개념을 간략하게 살펴보겠습니다. RAG는 외부 정보源에 접근할 수 있는 대규모 언어 모델을 확장하는 기술입니다. 외부 정보源에는 데이터베이스 또는 문서 컬렉션이 포함될 수 있습니다. 자세한 내용은 “검색 증강 생성에 대한 깊은 분석“을 참조하십시오.

일반적인 RAG 프로세스는 다음과 같은 단계로 구성됩니다.

  1. 질문: 사용자가 시스템에 질문이나 지시를 제공합니다.
  2. 검색: 시스템은 사용자의 질문과 관련된 정보를 찾기 위해 벡터 데이터베이스 또는 문서 컬렉션을 검색합니다.
  3. 증강: 검색된 정보는 사용자의 원래 질문 또는 지시와 결합됩니다.
  4. 생성: 언어 모델은 증강된 입력을 처리하고, 외부 정보를 활용하여 출력의 정확성과 완전성을 향상시킵니다.

그러나 RAG는 도전을 안고 있습니다. 검색 단계에서 전통적인 검색 방법이 가장 관련된 문서를 식별하지 못할 수 있습니다. 이는 언어 모델의 출력이 하위 또는 부정확할 수 있습니다.

두 단계 검색과 Rerankers의 필요성

전통적인 검색 방법은 키워드 일치 또는 벡터 공간 모델과 같은 방법을 사용하여 질문과 문서 사이의 세부적인 의미적 관계를 포착하는 데 어려움을 겪을 수 있습니다. 이러한 제한으로 인해 문서가 표면적으로만 관련이 있거나 중요한 정보를 놓칠 수 있습니다.

이 도전을 해결하기 위해, 두 단계 검색과 Rerankers를 사용하는 접근법이 등장했습니다. 이 접근법은 두 단계로 구성됩니다.

  1. 초기 검색: 첫 번째 단계에서는 상대적으로 빠르고 효율적인 검색 방법을 사용하여 잠재적으로 관련된 문서의 큰 집합을 검색합니다.
  2. 재정렬: 두 번째 단계에서는 더 복잡한 재정렬 모델을 사용하여 초기 검색된 문서를 질문과 관련된 순서로 재정렬합니다.

재정렬 모델은 일반적으로 신경망 또는 트랜스포머 기반 아키텍처로 구성되며, 문서와 질문 사이의 관련성을 평가하는 데 사용됩니다. 자연어 이해 능력을 활용하여 의미적 관계와 문맥을 포착할 수 있습니다.

두 단계 검색과 Rerankers의 이점

두 단계 검색과 Rerankers를 사용하는 접근법은 RAG 시스템에서 몇 가지 중요한 이점을 제공합니다.

  1. 향상된 정확성: 재정렬된 문서를 언어 모델에 제공하여 더 정확한 출력을 생성할 수 있습니다.
  2. 도메인 외부 문제 완화: 전통적인 검색 방법은 일반적인 텍스트 코퍼스에서 학습되며, 도메인 특정 언어와 의미를 포착하는 데 어려움을 겪을 수 있습니다. 재정렬 모델은 도메인 특정 데이터에서 학습될 수 있으며, 도메인 외부 문제를 완화하고 문서의 관련성을 향상시킬 수 있습니다.
  3. 확장성: 두 단계 접근법은 초기 검색에서 빠르고 가벼운 방법을 사용하여 효율적으로 확장할 수 있습니다.
  4. 유연성: 재정렬 모델은 초기 검색 방법과 독립적으로 교체 또는 업데이트될 수 있으며, 시스템의 요구 사항에 따라 유연하게 대응할 수 있습니다.

ColBERT: 효율적이고 효과적인 늦은 상호작용

재정렬 모델 중에는 ColBERT(Contextualized Late Interaction over BERT)가 있습니다. ColBERT는 문서 재정렬 모델로, BERT의 깊은 언어 이해 능력을 활용하며, 새로운 상호작용 메커니즘인 “늦은 상호작용”을 도입합니다.

ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT

ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT

ColBERT의 늦은 상호작용 메커니즘은 효율적이고 정밀한 검색을 가능하게 합니다. 질문과 문서를 별도로 처리한 후, 마지막 단계에서만 상호작용을 모델링하여 문서의 미세한 유사성을 평가합니다. 이러한 늦은 상호작용을 지연시키면서도 유지함으로써, ColBERT는 깊은 언어 모델의 표현력을 활용하면서도 문서 표현을 오프라인에서 事前 계산할 수 있으므로, 쿼리 처리를 상당히 가속화할 수 있습니다.

ColBERT의 늦은 상호작용 아키텍처는 몇 가지 이점을 제공합니다. 계산 효율성이 향상되고, 문서 컬렉션 크기에 따라 확장할 수 있으며, 실제 시나리오에서 실용적인 적용이 가능합니다. 또한, ColBERT는 잡음 제거 및 잔여 압축과 같은 기술을 통해 훈련 과정을 세부적으로 조정하고, 모델의 공간 크기를 줄이면서 높은 검색 효율성을 유지할 수 있습니다.

두 단계 검색과 Rerankers의 구현

이제 두 단계 검색과 Rerankers의 원리에 대해 이해했으므로, 실제 구현을 살펴보겠습니다. 우리는 인기 있는 라이브러리와 프레임워크를 사용하여 이러한 기술을 통합하는 방법을示겠습니다.

환경 설정

코드를 작성하기 전에, 개발 환경을 설정해야 합니다. 우리는 Python과 여러 인기 있는 NLP 라이브러리를 사용할 것입니다.

# 필요한 라이브러리 설치
!pip install datasets huggingface_hub sentence_transformers lancedb

데이터 준비

예시를 위해, 우리는 Hugging Face Datasets에서 “ai-arxiv-chunked” 데이터셋을 사용할 것입니다. 이 데이터셋에는 기계 학습, 자연어 처리, 및 대규모 언어 모델에 관한 400개 이상의 ArXiv 논문이 포함되어 있습니다.

from datasets import load_dataset

<p>dataset = load_dataset(&quot;jamescalam/ai-arxiv-chunked&quot;, split=&quot;train&quot;)</p>

<p>데이터를 전처리하고, 효율적인 검색과 처리를 위해 더 작은 청크로 나눕니다.</p>

[code language="Python"]
from transformers import AutoTokenizer

<p>tokenizer = AutoTokenizer.from_pretrained(&quot;bert-base-uncased&quot;)</p>

<p>def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors=&quot;pt&quot;, truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts</p>

<p>chunked_data = []
for doc in dataset:
text = doc[&quot;chunk&quot;]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)</p>

<h3 class="font-bold">재정렬</h3>
<p class="whitespace-pre-wrap break-words">초기 검색 후, 우리는 재정렬 모델을 사용하여 검색된 문서를 질문과 관련된 순서로 재정렬합니다. 이 예제에서는 ColBERT 재정렬 모델을 사용할 것입니다.</p>

[code language="Python"]
from lancedb.rerankers import ColbertReranker

reranker = ColbertReranker()

<p># 초기 문서 재정렬
reranked_docs = reranker.rerank(query, initial_docs)

재정렬된 문서 목록은 이제 질문과 관련된 순서로 정렬된 문서를 포함합니다.

증강과 생성

재정렬된 문서와 관련된 문서를 사용하여, 우리는 이제 증강과 생성 단계로 진행할 수 있습니다. 우리는 언어 모델에서 최종 응답을 생성하기 위해 Hugging Face Transformers 라이브러리에서 언어 모델을 사용할 것입니다.

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

<p>tokenizer = AutoTokenizer.from_pretrained(&quot;t5-base&quot;)
model = AutoModelForSeq2SeqLM.from_pretrained(&quot;t5-base&quot;)</p>

<p># 질문과 재정렬된 문서를 결합하여 증강된 질문을 생성합니다.
augmented_query = query + &quot; &quot; + &quot; &quot;.join(reranked_docs[:3])</p>

<p># 언어 모델에서 응답을 생성합니다.
input_ids = tokenizer.encode(augmented_query, return_tensors=&quot;pt&quot;)
output_ids = model.generate(input_ids, max_length=500)
response = tokenizer.decode(output_ids[0], skip_special_tokens=True)</p>

print(response)

고급 기술과 고려 사항

두 단계 검색과 Rerankers의 구현을 다루었지만, 몇 가지 고급 기술과 고려 사항이 있습니다.

  1. 질문 확장: 초기 검색을 개선하기 위해, 질문 확장 기술을 사용할 수 있습니다. 이는 원래 질문에 관련된 용어 또는 구를 추가하여, 더 다양한 문서를 검색할 수 있습니다.
  2. 앙상블 재정렬: 단일 재정렬 모델 대신, 여러 재정렬 모델을 결합하여 앙상블을 생성할 수 있습니다. 이는 다양한 모델의 강점을 활용하여 전체 성능을 향상시킬 수 있습니다.
  3. 재정렬 모델 미세 조정: 미세 조정된 재정렬 모델은 도메인 특정 데이터에서 학습될 수 있으며, 도메인 특정 의미와 관련 신호를 더 잘 포착할 수 있습니다.
  4. 반복적 검색과 재정렬: 일부 경우에는, 단일 반복의 검색과 재정렬이 충분하지 않을 수 있습니다. 언어 모델의 출력을 사용하여 질문과 검색 프로세스를 개선하는 반복적 접근법을 탐색할 수 있습니다.
  5. 관련성과 다양성의 균형: 재정렬 모델은 가장 관련된 문서를 촉진하지만, 관련성과 다양성 사이의 균형을 맞추는 것이 중요합니다. 다양성 증진 기술을 통합하여 시스템이 너무 좁거나 편향된 정보源을 피할 수 있습니다.
  6. 평가 지표: 두 단계 검색과 재정렬 접근법의 효과를 평가하기 위해, 적절한 평가 지표를 정의해야 합니다. 이는 전통적인 정보 검색 지표와 작업 특정 지표를 포함할 수 있습니다.

결론

검색 증강 생성(RAG)은 외부 정보源을 활용하여 대규모 언어 모델의 능력을 확장하는 강력한 기술입니다. 그러나 전통적인 검색 방법은 가장 관련된 문서를 식별하지 못할 수 있습니다.

두 단계 검색과 Rerankers를 사용하는 접근법은 이 도전을 해결하는 데 강력한 솔루션을 제공합니다. 초기 검색 단계와 더 복잡한 재정렬 모델을 결합하여, 검색된 문서의 정확성과 관련성을 크게 향상시킬 수 있습니다.

지난 5년 동안私は Machine Learning과 Deep Learning의 매혹적인 세계에 몰두해 왔습니다.私の熱情と専門知識は私を50以上의多様한 소프트웨어 엔지니어링 프로젝트에 기여하게 했으며, 특히 AI/ML에 중점을 두었습니다.私の継続的な 호기심은 또한私를自然어 처리로 끌어들였습니다.私は이 분야를さらに 탐구하기를熱望합니다.