Üst-Alt ve Küçükten Büyüğe Getirme
Hassas getirme için küçük alt parçaları depolayın, ancak daha zengin bağlam sağlamak üzere bunların daha büyük üst parçalarını LLM'ye döndürün; getirme hassasiyeti ile üretim kalitesini dengeleyin.
Üst-Alt ve Küçükten Büyüğe Getirme, CoddyKit'te ücretsiz bir AI Engineering Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Engineering Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Engineering Academy kursu toplamda 4 dersten oluşur.
Kesinlik ve Bağlam İkilemi
RAG sistemleri bir gerilimle karşı karşıyadır: küçük parçalar, her parça tek bir fikre odaklandığı için yüksek kesinlikle getirilir ancak LLM'in eksiksiz bir yanıt üretmek için ihtiyaç duyduğu çevre bağlamından yoksundur. Büyük parçalar zengin bağlam sağlar ancak tek bir sorguyla güçlü biçimde eşleşmek yerine birçok sorguyla zayıf biçimde eşleştikleri için erişim kesinliğini azaltır. Üst-alt parçalara ayırma bu ikilemi çözer.
Üst-Alt Mimarisi
Üst-alt parçalara ayırmada aynı belgeden iki parça katmanı oluşturursunuz. Alt parçalar küçüktür (örneğin 1-3 cümle) ve erişim için gömülerek dizine eklenir. Üst parçalar daha büyük bölümlerdir (örneğin tüm paragraflar veya sayfalar) ve ayrı olarak saklanır. Bir alt parça getirildiğinde bunun yerine üst parçasını LLM'e döndürürsünüz.
Parça Hiyerarşisini Oluşturma
İlk adım, belgeyi büyük üst parçalara bölmek ve ardından her üst parçayı daha küçük alt parçalara ayırmaktır. Her alt parça, genellikle bir parent_id meta veri alanı aracılığıyla üst parçasına geri işaret eden bir başvuru tutar. Bu eşleme, getirilen herhangi bir alt parça verildiğinde tam üst bölümü bulmanızı sağlar.
from langchain.text_splitter import RecursiveCharacterTextSplitter
parent_splitter = RecursiveCharacterTextSplitter(chunk_size=1500, chunk_overlap=0)
child_splitter = RecursiveCharacterTextSplitter(chunk_size=300, chunk_overlap=30)
parent_chunks = parent_splitter.split_documents(docs)
child_chunks = []
for i, parent in enumerate(parent_chunks):
children = child_splitter.split_documents([parent])
for child in children:
child.metadata['parent_id'] = i
child_chunks.extend(children)Yalnızca Alt Parçaları Dizine Ekleme
Yalnızca alt parçalar gömülür ve vektör veritabanında saklanır. Üst parçalar ayrı bir anahtar-değer deposunda (bellek içi sözlük, Redis veya belge veritabanı) tutulur. Böylece vektör dizini yoğun ve kesin kalırken zengin bağlam bunun dışında saklanır.
# Store parents in a docstore
parent_store = {i: chunk.page_content for i, chunk in enumerate(parent_chunks)}
# Embed and index only children
vectorstore = Chroma.from_documents(
child_chunks,
embedding=OpenAIEmbeddings()
)Erişim: Alt İçeri, Üst Dışarı
Erişim sırasında kullanıcı sorgusu gömülür ve alt parçalarla eşleştirilir. İlk k alt parça bulunur ve bunların parent_id başvuruları, üst parça deposunda arama yapılarak çözümlenir. Ardından LLM istemine alt parçalar değil, üst bölümler eklenir. LLM geniş bağlam alır; erişim ise kesin kalır.
def retrieve_with_parents(query, vectorstore, parent_store, k=5):
child_results = vectorstore.similarity_search(query, k=k)
seen_parent_ids = set()
parent_contexts = []
for child in child_results:
pid = child.metadata['parent_id']
if pid not in seen_parent_ids:
parent_contexts.append(parent_store[pid])
seen_parent_ids.add(pid)
return parent_contextsLangChain ParentDocumentRetriever
LangChain, bu deseni kullanıma hazır olarak uygulayan ParentDocumentRetriever sınıfını sağlar. Bir üst bölücü, alt bölücü, alt gömmeleri için bir vektör deposu ve üst belgeler için bir belge deposu sağlarsınız. Hiyerarşiyi kurar ve getirme işlemini şeffaf biçimde yönetir.
from langchain.retrievers import ParentDocumentRetriever
from langchain.storage import InMemoryStore
store = InMemoryStore()
retriever = ParentDocumentRetriever(
vectorstore=vectorstore,
docstore=store,
child_splitter=child_splitter,
parent_splitter=parent_splitter
)
retriever.add_documents(docs)
results = retriever.invoke('What is the refund policy?')Küçükten Büyüğe Getirme Açıklaması
Küçükten büyüğe getirme, aynı kavramın başka bir adıdır: küçük ve kesin parçaları getirir, ancak bunları LLM'e göndermeden önce çevrelerindeki bağlamı içerecek şekilde genişletirsiniz. Bazı uygulamalar sabit bir üst parçaya değil, eşleşen parçadan önceki ve sonraki cümleleri sağlayan bitişik cümlelerden oluşan bir pencereye genişletme yapar. Böylece modele bağlamsal süreklilik sağlanır.
def retrieve_with_window(query, vectorstore, sentences, window=2, k=5):
results = vectorstore.similarity_search(query, k=k)
expanded = []
for r in results:
idx = r.metadata['sentence_index']
start = max(0, idx - window)
end = min(len(sentences), idx + window + 1)
expanded.append(' '.join(sentences[start:end]))
return expandedÜst Parçaların Yinelenenlerini Kaldırma
Aynı üst parçaya ait birden çok alt parça tek bir sorgu için getirilebilir. Yinelenenler kaldırılmazsa aynı üst metin istemde birden çok kez görünür ve belirteçler gereksiz yere harcanır. Bağlamı birleştirmeden önce her zaman üst ID'sine göre yinelenenleri kaldırın. Yukarıdaki retrieve işlevindeki kod örneği bunu bir seen_parent_ids kümesiyle gerçekleştirir.
Üst-Alt Parçalama Ne Zaman Kullanılmalı
Üst-alt getirme; belgeleriniz bölümler ve kısımlar, makaleler ve paragraflar veya alt bölümler içeren vikiler gibi belirgin bir hiyerarşik yapıya sahip olduğunda en iyi sonucu verir. Özellikle, kesin soruların yerel yanıtlar gerektirdiği ancak bu yanıtların yalnızca daha geniş bir bağlam bölümü içinde anlam kazandığı uzun teknik belgelerde etkilidir.
Alt ve Üst Boyutlarını Belirleme
Tipik bir yapılandırma şöyledir: 200-400 belirteçlik alt parçalar (tek bir fikre odaklanır) ve 1000-2000 belirteçlik üst parçalar (tam kısımlar). Alt parçalar çok küçük olursa, kendi başlarına anlam taşımayan tek tek cümlelere dönüşür. Üst parçalar çok büyük olursa, kaçınmaya çalıştığınız bağlamın seyrelmesi sorununu yeniden ortaya çıkarmaya başlarsınız.
Yaklaşımların Karşılaştırılması: Özet
Şimdiye kadarki parçalama stratejilerini özetlemek gerekirse: sabit boyutlu parçalama hızlıdır ancak bağlamı bozar; anlamsal parçalama konu bütünlüğünü korur; üst-alt parçalama hem getirme kesinliğini hem de LLM bağlamının zenginliğini en iyi duruma getirir. Uzun belgeleri işleyen çoğu üretim RAG sistemi için üst-alt parçalama, yönetilebilir bir karmaşıklıkla en iyi getirme kalitesini sağlar.
Kısa Kontrol
Bu dersteki üst-alt parçalama konusunu anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: alt parçalar kesin getirme, üst parçalar ise zengin bağlam sağlar, LangChain'in ParentDocumentRetriever bileşeni bunu otomatik olarak uygular ve üst ID'sine göre yinelenenleri kaldırmak bağlamın tekrarlanmasını önler. Sırada kod dosyaları ve HTML belgeleri için belgeye özgü parçalama stratejilerini inceleyeceğiz.
Yapay zeka eğitmeniyle Python öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“Üst-Alt ve Küçükten Büyüğe Getirme” dersi ücretsiz mi?
Evet — “Üst-Alt ve Küçükten Büyüğe Getirme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Engineering Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Engineering Academy kursu toplamda 4 dersten oluşur.
“Üst-Alt ve Küçükten Büyüğe Getirme” dersinde ne öğreneceğim?
Hassas getirme için küçük alt parçaları depolayın, ancak daha zengin bağlam sağlamak üzere bunların daha büyük üst parçalarını LLM'ye döndürün; getirme hassasiyeti ile üretim kalitesini dengeleyin. AI Engineering Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Engineering Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Engineering Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Üst-Alt ve Küçükten Büyüğe Getirme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Engineering Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Engineering Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Saf Parçalamanın Getirme İşlemini Zayıflatmasının Nedeni
- Gömme Benzerliğiyle Anlamsal Parçalama
- Üst-Alt ve Küçükten Büyüğe Getirme
- Kod ve HTML İçin Belgeye Özel Stratejiler