AGI ve geleceğin yapay zekası

Rerankers ve İki Aşamlı Geri Çağırma için RAG’nin Gücü

mm
Unite.AI sitesini Google'daki tercih ettiğiniz kaynaklara ekleyin

Doğal dil işleme (NLP) ve bilgi geri çağırma bağlamında, ilgili bilgileri verimli ve doğru bir şekilde geri çağırmak çok önemlidir. Bu alanda geliştirilen yeni teknikler ve metodolojiler, özellikle Geri Çağırma Artırılmış Oluşturma (RAG) bağlamında, geri çağırma sistemlerinin performansını artırmaya yöneliktir. İki aşamlı geri çağırma ve yeniden sıralama gibi bir teknik, geleneksel geri çağırma yöntemlerinin sınırlarını ele almak için güçlü bir çözüm olarak ortaya çıkmıştır.

Bu makalede, iki aşamlı geri çağırma ve yeniden sıralamanın inceliklerini, temel prensiplerini, uygulama stratejilerini ve RAG sistemlerinin doğruluğunu ve verimliliğini artırmada sundukları faydaları tartışacağız. Ayrıca, kavramları daha derinlemesine anlamak için pratik örnekler ve kod parçaları sağlayacağız.

Geri Çağırma Artırılmış Oluşturma (RAG) Anlamak

swe agent LLM

İki aşamlı geri çağırma ve yeniden sıralamaya dalmeden önce, Geri Çağırma Artırılmış Oluşturma (RAG) kavramını kısaca gözden geçirelim. RAG, büyük dil modellerinin (LLM) dış bilgi kaynaklarına erişimini sağlayarak onların bilgi ve yeteneklerini genişleten bir tekniktir. Daha fazla bilgi için “LLM’de Geri Çağırma Artırılmış Oluşturma” makalesine bakabilirsiniz.

Tipik RAG süreci aşağıdaki adımları içerir:

  1. Sorgu: Kullanıcı sistemi bir soru sorar veya bir talimat verir.
  2. Geri Çağırma: Sistem, kullanıcının sorgusuna ilgili bilgi bulmak için bir vektör veritabanı veya belge koleksiyonuna sorgu gönderir.
  3. Artırma: Geri çağırılan bilgi, kullanıcının orijinal sorgusu veya talimatıyla birleştirilir.
  4. Oluşturma: Dil modeli, artırılmış girişi işler ve dış bilgiyi kullanarak çıktı kalitesini ve kapsamlılığını artırmak için bir cevap üretir.

RAG güçlü bir teknik olsa da, kendi zorlukları vardır. Bunlardan biri, geri çağırma aşamasında geleneksel geri çağırma yöntemlerinin en ilgili belgeleri tanımlamada başarısız olması ve bu da dil modelinden suboptimal veya yanlış cevaplar alınmasıdır.

İki Aşamlı Geri Çağırma ve Yeniden Sıralamanın İhtiyacı

Geleneksel geri çağırma yöntemleri, anahtar kelime eşleştirmesi veya vektör uzay modelleri gibi, sorgular ve belgeler arasındaki nüanslı anlamsal ilişkileri yakalamada genellikle zorluk çeker. Bu sınırlama, yalnızca yüzeyel olarak ilgili belgelerin geri çağrılmasına veya kritik bilgilerin kaçırılmasına yol açabilir, bu da üretilen cevabın kalitesini olumsuz etkiler.

Bu zorluğu ele almak için, araştırmacılar ve uygulayıcılar iki aşamlı geri çağırma ve yeniden sıralamaya yöneldiler. Bu yaklaşım iki adımdan oluşur:

  1. İlk Geri Çağırma: İlk aşamada, potansiyel olarak ilgili bir belge kümesi, hızlı ve verimli bir geri çağırma yöntemiyle geri çağırılır, örneğin vektör uzay modeli veya anahtar kelime tabanlı arama.
  2. Yeniden Sıralama: İkinci aşamada, daha gelişmiş bir yeniden sıralama modeli, ilk olarak geri çağırılan belgelerin sorguya göre sıralanmasını sağlar, böylece en ilgili belgeler listesinin başına gelir.

Yeniden sıralama modeli, genellikle bir sinir ağı veya transformer tabanlı mimari, bir sorguya göre bir belgenin alakalılığını değerlendirmek için özel olarak eğitilir. Gelişmiş doğal dil anlama yeteneklerini kullanarak, sorgu ve belgeler arasındaki anlamsal nüansları ve bağlamsal ilişkileri yakalar, daha doğru ve ilgili bir sıralama sağlar.

İki Aşamlı Geri Çağırma ve Yeniden Sıralamanın Faydaları

İki aşamlı geri çağırma ve yeniden sıralamanın benimsenmesi, RAG sistemleri bağlamında several önemli fayda sağlar:

  1. Doğruluğun İyileştirilmesi: İlk olarak geri çağırılan belgelerin yeniden sıralanması ve en ilgili olanların öne çıkarılması, dil modeline daha doğru ve kesin bilgi sağlar, bu da üretilen cevapların kalitesini artırır.
  2. Alan Dışında Kalma Sorunlarının Azaltılması: Geleneksel geri çağırma yöntemleri genellikle genel amaçlı metin koleksiyonları üzerinde eğitilir, bu da alan özel dili ve anlamsal ilişkileri yakalamada yetersiz kalabilir. Yeniden sıralama modelleri, alan özel veri üzerinde eğitilebilir, bu da alan içinde ilgili belgelerin geri çağrılmasını iyileştirir.
  3. Ölçeklenebilirlik: İki aşamlı yaklaşım, ilk aşamada hızlı ve hafif geri çağırma yöntemlerini kullanarak, daha sonra daha hesaplamalı yoğun yeniden sıralama işlemini yalnızca daha küçük bir belge kümesi için gerçekleştirerek, sistemlerin ölçeklenebilirliğini sağlar.
  4. Esneklik: Yeniden sıralama modelleri, ilk geri çağırma yönteminden bağımsız olarak değiştirilebilir veya güncellenebilir, bu da sistemlerin değişen gereksinimlerine uyum sağlamasına olanak tanır.

ColBERT: Verimli ve Etkili Geç İletişim

Yeniden sıralama alanında öne çıkan modellerden biri, ColBERT (Contextualized Late Interaction over BERT)’dir. ColBERT, belgelerin yeniden sıralanması için kullanılan bir modeldir ve BERT’in derin dil anlama yeteneklerini kullanır, aynı zamanda “geç iletişim” olarak bilinen yeni bir mekanizma sunar.

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’in geç iletişim mekanizması, sorgular ve belgelerin ayrı ayrı işlenmesiyle verimli ve kesin bir şekilde geri çağırma yapılmasını sağlar. ColBERT, sorgu ve belgeleri BERT kullanarak bağımsız olarak kodlar, ardından bir lightweight ancak güçlü etkileşim adımıyla onların ince benzerliğini modelleyerek, derin dil modellerinin ifade gücünden yararlanarak, aynı zamanda belge temsillerinin önceden hesaplanmasını sağlar, bu da sorgu işlemini hızlandırır.

ColBERT’in geç iletişim mimarisi, hesaplamalı verimlilik, belge koleksiyonu büyüklüğü ile ölçeklenebilirlik ve gerçek dünya senaryoları için pratik uygulanabilirlik gibi faydalar sağlar. Ayrıca, ColBERT gürültüden arındırma ve artıkların sıkıştırılması gibi tekniklerle geliştirilmiştir, bu da modelin eğitimini iyileştirir ve alanını azaltırken, yüksek geri çağırma etkinliğini korur.

İki Aşamlı Geri Çağırma ve Yeniden Sıralamanın Uygulaması

Şimdi, iki aşamlı geri çağırma ve yeniden sıralamanın prensiplerini anladıktan sonra, bu tekniklerin RAG sistemi içinde pratik uygulamasını keşfedeceğiz. Popüler kütüphaneler ve çerçeveleri kullanarak bu tekniklerin entegrasyonunu göstereceğiz.

Ortamın Hazırlanması

Önce, geliştirme ortamımızı hazırlayalım. Python ve beberapa popüler NLP kütüphanesi, Hugging Face Transformers, Sentence Transformers ve LanceDB kullanacağız.

# Gerekli kütüphaneleri kurun
!pip install datasets huggingface_hub sentence_transformers lancedb

Veri Hazırlama

Gösterim amacıyla, Hugging Face Datasets’ten “ai-arxiv-chunked” verisetini kullanacağız, bu veriseti 400’den fazla ArXiv makalesini içerir.

from datasets import load_dataset

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

&amp;lt;pre&amp;gt;

Sonraki adımda, veriyi işleyerek daha küçük parçalara böleceğiz, bu da geri çağırma ve işlemenin daha verimli olmasını sağlayacaktır.

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 veriseti:
text = doc[&quot;chunk&quot;]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)</p>

İlk geri çağırma aşaması için, cümle dönüşüm modelini kullanarak belgelerimizi ve sorgularımızı dense vektör temsilcisi olarak kodlayacağız, ardından LanceDB gibi bir vektör veritabanı kullanarak yaklaşık en yakın komşu araması yapacağız.

from sentence_transformers import SentenceTransformer
from lancedb import lancedb

<p># Cümle dönüşüm modelini yükleyin
model = SentenceTransformer(&#039;all-MiniLM-L6-v2&#039;)</p>

<p># LanceDB vektör depolama oluşturun
db = lancedb.lancedb(&#039;/path/to/store&#039;)
db.create_collection(&#039;docs&#039;, vector_dimension=model.get_sentence_embedding_dimension())</p>

<p># Belgeleri indeksleyin
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document(&#039;docs&#039;, vector, text)</p>

<p>from sentence_transformers import SentenceTransformer
from lancedb import lancedb</p>

<p># Cümle dönüşüm modelini yükleyin
model = SentenceTransformer(&#039;all-MiniLM-L6-v2&#039;)</p>

<p># LanceDB vektör depolama oluşturun
db = lancedb.lancedb(&#039;/path/to/store&#039;)
db.create_collection(&#039;docs&#039;, vector_dimension=model.get_sentence_embedding_dimension())</p>

<p># Belgeleri indeksleyin
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document(&#039;docs&#039;, vector, text)

Belgelerimiz indekslendikten sonra, ilk geri çağırma işlemini gerçekleştirebiliriz, bu da sorgu vektörüne en yakın komşuları bulmayı içerir.

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 veriseti:
text = doc[&quot;chunk&quot;]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)

Yeniden Sıralama

İlk geri çağırma işleminin ardından, belgelerin sorguya göre sıralanması için bir yeniden sıralama modeli kullanacağız. Bu örnekte, ColBERT yeniden sıralama modelini kullanacağız, bu model hızlı ve doğru bir transformer tabanlı modeldir.

from lancedb.rerankers import ColbertReranker

reranker = ColbertReranker()

<p># İlk belgeleri yeniden sıralayın
reranked_docs = reranker.rerank(query, initial_docs)

Artık reranked_docs listesi, sorguya göre sıralanmış belgeleri içerir, ColBERT yeniden sıralama modeli tarafından belirlenir.

Artırma ve Oluşturma

Yeniden sıralanmış ve ilgili belgelerle, RAG pipeline’ının artırma ve oluşturma aşamalarına geçebiliriz. Hugging Face Transformers kütüphanesinden bir dil modeli kullanarak nihai cevabı üreteceğiz.

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

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

<p># Sorguyu yeniden sıralanmış belgelerle artırın
augmented_query = query + &quot; &quot; + &quot; &quot;.join(reranked_docs[:3])</p>

<p># Dil modelinden cevabı üretin
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)

Yukarıdaki kod parçacığı, jina-colbert-v1-en modelini kullanarak bir belge koleksiyonunun indekslenmesini ve bu modelin uzun bağlamları verimli bir şekilde işleyebilmesini gösterir.

Artık response değişkeni, dil modelinin ürettiği nihai cevabı içerir, bu cevap dış bilgiyi kullanarak oluşturulur ve orijinal sorguya verilen cevapın kalitesini artırır.

İleri Düzey Teknikler ve Considerations

İki aşamlı geri çağırma ve yeniden sıralamanın uygulamasını ele aldığımız bu makalede, RAG sistemlerinin performansını ve sağlamlığını daha da artırmak için beberapa ileri düzey teknik ve considerationlara değineceğiz.

  1. Sorgu Genişletme: İlk geri çağırma aşamasını iyileştirmek için sorgu genişletme tekniklerini kullanabilirsiniz, bu da orijinal sorguya ilgili terim veya ifadelerin eklenmesini içerir.
  2. Topluluk Yeniden Sıralama: Tek bir yeniden sıralama modeli yerine, birden fazla modeli birleştirerek bir topluluk oluşturabilirsiniz, bu da farklı modellerin güçlü yanlarını birleştirerek genel performansı iyileştirir.
  3. Yeniden Sıralama Modelinin İyileştirilmesi: Önceden eğitilmiş yeniden sıralama modelleri etkili olabilir, ancak bunları alan özel veri üzerinde iyileştirmek, bu modellerin alan özel anlamsal ilişkileri ve alaka sinyallerini daha iyi yakalamalarına yardımcı olabilir.
  4. İteratif Geri Çağırma ve Yeniden Sıralama: Bazı durumlarda, tek bir geri çağırma ve yeniden sıralama aşaması yeterli olmayabilir. Dil modelinin çıktısını kullanarak sorguyu ve geri çağırma işlemini iyileştirmek için iteratif bir yaklaşım kullanabilirsiniz, bu da daha interaktif ve dinamik bir sistem oluşturur.
  5. Alaka ve Çeşitlilik Dengeleme: Yeniden sıralama modelleri en ilgili belgeleri öne çıkarmaya çalışırken, alaka ve çeşitlilik arasında bir denge kurmak önemlidir, bu da sistemlerin dar veya önyargılı olmamasını sağlar.
  6. Değerlendirme Ölçütleri: İki aşamlı geri çağırma ve yeniden sıralama yaklaşımının etkinliğini değerlendirmek için uygun ölçütleri tanımlamanız gerekir, bu ölçütler geleneksel bilgi geri çağırma ölçütleri gibi kesinlik, geri çağırma ve ortalama geri çağırma oranı (MRR) ile birlikte, özel kullanım durumunuza uygun ölçütleri içerebilir.

Sonuç

Geri Çağırma Artırılmış Oluşturma (RAG), büyük dil modellerinin dış bilgi kaynaklarına erişimini sağlayarak onların yeteneklerini genişleten güçlü bir tekniktir. Ancak, geleneksel geri çağırma yöntemleri en ilgili belgeleri tanımlamada zorluk çekebilir, bu da dil modelinin performansı olumsuz etkileyebilir.

İki aşamlı geri çağırma ve yeniden sıralama, bu zorluğu ele almak için güçlü bir çözüm sunar. İlk bir hızlı geri çağırma aşamasını, daha sonra bir yeniden sıralama modelinin uygulandığı bir yaklaşım kullanarak, geri çağırılan belgelerin alakalılığını ve doğruluğunu önemli ölçüde iyileştirebilir, bu da dil modelinden daha kaliteli cevaplar alınmasını sağlar.

Son beş yıldır Makine Öğrenimi ve Derin Öğrenme dünyasına kendimi adamış bulunuyorum. Tutkum ve uzmanlığım, özellikle AI/ML'ye odaklanarak 50'den fazla çeşitli yazılım mühendisliği projesine katkıda bulunmama yol açtı. Süregelen meraklılığım da beni Doğal Dil İşleme alanına yöneltti, bu alana daha da derinlemesine girmeye hevesliyim.