Retrieval-Augmented Generation (RAG)

Anahtar Kelimelerin Ötesinde: Modern RAG Boru Hatlarında Anlamsal Aramanın Uygulanması

Yıllar boyunca veri çekme için standart yaklaşım anahtar kelime eşleştirmesiydi. Bir kullanıcı "makine öğrenimi" araması yaptığında, sistem dizinde bu tam kelimeleri arardı. Yapılandırılmış sorgular için işlevsel olsa da, bu yöntem doğal dil, eş anlamlılar veya karmaşık niyetlerle uğraşırken dramatik şekilde başarısız olur. Geriye Dönük Üretimi Artıran (RAG) mimariler, kurumsal AI uygulamalarının omurgası haline geldikçe, anlamsal arama ihtiyacı vazgeçilmez hale gelmiştir. Bu yazı, LLM'lerinizin en ilgili bağlamı çekmesini sağlayarak halüsinasyonları azaltan ve yanıt kalitesini artıran anlamsal aramanın nasıl uygulanacağını inceler.

Neden RAG'de Anahtar Kelime Araması Başarısız Olur?

Geleneksel arama motorları, terim sıklığı-ters belge sıklığı (TF-IDF) veya BM25 algoritmalarına dayanır. Bu yöntemler, kelime örtüşmesinin ilgililikle eşit olduğu varsayımıyla çalışır. Ancak şu senaryoyu düşünün: Bir kullanıcı, "Sızan bir musluğu nasıl tamir ederim?" diye sorar. Bir anahtar kelime araması, "musluk tamiri" veya "su tesisatı sorunları" içeren belgeleri döndürebilir, ancak tam olarak "musluk" kelimesi eksik olduğu için "Sızan Lavaboların Tanılanması" başlıklı bir kılavuzu kaçırabilir. Bir RAG boru hattında, yanlış bir belge çekmek, LLM'ye ilgisiz bir bağlam beslemek ve bu da anlamsız veya faktüel olarak hatalı yanıtlara yol açmak demektir.

Anlamsal arama, kelimelerin kendilerinden ziyade kelimelerin arkasındaki anlamı anlayarak bu sorunu çözer. Metni, kelime örtüşmesinden bağımsız olarak anlamsal olarak benzer kavramların birbirine yakın olduğu yüksek boyutlu bir vektör uzayına haritalar.

Temel Mekanikler: Gömmeler (Embeddings) ve Vektör Veritabanları

Anlamsal aramanın kalbinde gömme (embedding) modeli yatar. Bir gömme modeli (örneğin OpenAI'nin text-embedding-ada-002'si veya BGE gibi açık kaynaklı modeller), metni bir sayı listesine—bir vektöre—dönüştürür. Örneğin, "Kedi paspasın üzerinde oturuyor" ve "Kedi halının üzerinde dinleniyor" cümleleri, yüksek bir kosinüs benzerliğine sahip vektörlere sahip olacaktır.

Bu vektörlerin ölçeklenebilirlikte hızlı ve verimli bir şekilde çekilmesini sağlamak için, bunlar bir Vektör Veritabanında (Pinecone, Weaviate veya Milvus gibi) saklanır. Bir sorgu geldiğinde, bu sorgu gömülür ve ardından veritabanındaki en yakın komşu vektörleri bulmak için kullanılır. Yaklaşık en yakın komşu (ANN) araması olarak bilinen bu işlem, milyonlarca belge üzerinden bile milisaniye gecikmeli çekim sağlar.

Python ve LangChain ile Uygulama Örneği

LangChain gibi modern kütüphanelerden yararlanıldığında anlamsal arama uygulamak oldukça basittir. Aşağıda, bir gömme modeli ve bir vektör deposu kullanarak basit bir RAG bileşeni oluşturma konusunda pratik bir örnek bulunmaktadır.

from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader

# 1. Belgeleri Yükle ve Böl
loader = TextLoader('data/my_document.txt')
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

# 2. Gömmeler Oluştur
embeddings = OpenAIEmbeddings()

# 3. Vektör Veritabanında Sakla
db = Chroma.from_documents(docs, embeddings)

# 4. Anlamsal Arama Yap
query = "Bu çalışmanın ana sonuçları nelerdir?"
similar_docs = db.similarity_search(query, k=3)

# 5. Çekilen Bağlamı İncele
for doc in similar_docs:
    print(doc.page_content[:100] + "...")

Bu kod parçasında, similarity_search yöntemi sorguyu otomatik olarak bir vektöre dönüştürür ve anlamsal olarak en benzer ilk 3 belgeyi döndürür. Herhangi bir anahtar kelime geçirmediğimize, bunun yerine doğal dil sorusunu doğrudan geçirdiğimize dikkat edin.

Üretim Seviyesinde Arama İçin En İyi Uygulamalar

Temel gömme çekimi güçlü olsa da, üretim sistemleri ek ince ayarlar gerektirir:

  • Bölme Stratejisi: Belgeleri bölme şekliniz, çekim üzerinde büyük bir etkiye sahiptir. Parçaların anlamsal olarak tam olmasını sağlayın (örneğin, tüm paragraflar veya bölümler), keyfi karakter sayıları yerine.
  • Hiyerarşik Arama: Devasa kütüphaneler için "küçükten büyüğe" bir yaklaşım düşünün. Öncelikle ilgili bölümleri belirlemek için küçük bir belge özetleri kümesini arayın, ardından bu bölümlerin tam metnini çekin.
  • Yeniden Sıralama (Re-ranking): İlk vektör araması hızlıdır ancak her zaman kesin değildir. İkinci bir adım olarak bir çapraz kodlayıcı (cross-encoder) yeniden sıralayıcı uygulamak, sorgu-belge çiftini dikkatlice analiz ederek ilgililiği önemli ölçüde artırabilir.

Sonuç

Anlamsal arama, insan dili ile makine anlayışı arasındaki köprüdür. Gömmeleri ve vektör veritabanlarını RAG mimarinize entegre ederek, kırılgan anahtar kelime eşleştirmesinin ötesine geçip niyeti gerçekten anlayan bir sisteme geçiş yaparsınız. AI uygulamaları olgunlaştıkça, iyi ve mükemmel bir LLM deneyimi arasındaki fark genellikle çekim katmanının kalitesine bağlı olacaktır. Güçlü anlamsal arama stratejilerine yatırım yapmak artık bir seçenek değil, bir zorunluluktur.

Share: