Map-Reduce Özetleme Kalıbı
Her parçayı bağımsız olarak özetleyin, ardından özetleri birleştirin.
Map-Reduce Özetleme Kalıbı, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 2. 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 Prompt Engineering öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Prompt Engineering kursu toplamda 4 dersten oluşur.
Eşleştirme-Birleştirme Deseni
Bir belge LLM'nin bağlam penceresini aştığında, tamamını tek seferde gönderemezsiniz. Eşleştirme-birleştirme deseni bu sorunu çözer:
- Eşleştirme: Her parçayı bağımsız olarak özetleme
- Birleştirme: Tüm parça özetlerini tek bir son özette sentezleme
Bu, dağıtık sistemlerdeki klasik MapReduce işlemini yansıtır — aynı böl ve fethet mantığı dil görevlerine uygulanır.
1. Adım: Eşleştirme Aşaması
Eşleştirme aşamasında her parça, bir özetleme istemiyle LLM'ye gönderilir. Model yalnızca o parçanın kısa bir özetini döndürür. Bu özetler bir listede toplanır.
Her özet, özgün parçadan çok daha kısa olmalıdır — genellikle özgün uzunluğun %10–20'si kadar. Birleştirme adımını uygulanabilir kılan sıkıştırma budur.
import openai
client = openai.OpenAI(api_key='sk-...')
def summarize_chunk(chunk, model='gpt-4o'):
resp = client.chat.completions.create(
model=model,
messages=[
{'role': 'system', 'content': 'Summarize the following text concisely in 3-5 sentences.'},
{'role': 'user', 'content': chunk}
]
)
return resp.choices[0].message.content
def map_phase(chunks):
return [summarize_chunk(c) for c in chunks]2. Adım: Birleştirme Aşaması
Birleştirme aşamasında tüm parça özetleri birleştirilir ve bir sentez istemiyle LLM'ye gönderilir. Model, tutarlı tek bir son özet üretir.
Parça özetleri tek bir bağlam penceresine sığmayacak kadar uzunsa birleştirme işlemini yinelemeli uygulayın — önce özet gruplarını özetleyin, ardından bu özetleri sentezleyin.
def reduce_phase(chunk_summaries, model='gpt-4o'):
combined = '\n\n'.join(
f'Section {i+1}:\n{s}'
for i, s in enumerate(chunk_summaries)
)
resp = client.chat.completions.create(
model=model,
messages=[
{'role': 'system', 'content': 'You are given summaries of consecutive sections of a document. Write a single coherent summary of the entire document.'},
{'role': 'user', 'content': combined}
]
)
return resp.choices[0].message.contentBir Araya Getirme: Ham API
Herhangi bir yazılım çatısı gerektirmeyen, ham OpenAI API çağrılarını kullanan eksiksiz eşleştirme-birleştirme iş akışı aşağıdadır. Bu yaklaşım, her aşamadaki istemler ve parametreler üzerinde tam denetim sağlar.
def map_reduce_summarize(document, chunk_size=1000):
chunks = fixed_chunk(document, max_tokens=chunk_size)
print(f'Chunks: {len(chunks)}')
chunk_summaries = map_phase(chunks)
print(f'Map phase complete. Summaries: {len(chunk_summaries)}')
final_summary = reduce_phase(chunk_summaries)
return final_summary
with open('long_report.txt') as f:
doc = f.read()
result = map_reduce_summarize(doc)
print(result)LangChain MapReduceDocumentsChain
LangChain; parçalara ayırmayı, paralel eşleme çağrılarını ve birleştirme aşamasını yöneten, kullanıma hazır bir MapReduceDocumentsChain sağlar. Kullanışlıdır ancak ham API çağrılarına göre daha az esnektir.
from langchain_openai import ChatOpenAI
from langchain.chains.summarize import load_summarize_chain
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.docstore.document import Document
llm = ChatOpenAI(model='gpt-4o', openai_api_key='sk-...')
splitter = RecursiveCharacterTextSplitter(chunk_size=3000, chunk_overlap=200)
with open('long_report.txt') as f:
text = f.read()
docs = splitter.create_documents([text])
chain = load_summarize_chain(llm, chain_type='map_reduce')
result = chain.invoke(docs)
print(result['output_text'])Eşleştirme Aşamasını Paralelleştirme
Her parça özeti bağımsız olduğundan eşleştirme aşaması paralelleştirilebilir. Python'un ThreadPoolExecutor aracı kullanıldığında tüm parça API çağrıları eş zamanlı gönderilir ve gerçek geçen süre büyük ölçüde azalır.
from concurrent.futures import ThreadPoolExecutor, as_completed
def map_phase_parallel(chunks, max_workers=10):
summaries = [None] * len(chunks)
with ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = {
executor.submit(summarize_chunk, chunk): i
for i, chunk in enumerate(chunks)
}
for future in as_completed(futures):
idx = futures[future]
summaries[idx] = future.result()
return summariesYinelemeli Birleştirme
Bir belge çok uzunsa parça özetlerinin kendisi bağlam penceresini aşabilir. Birleştirmeyi yinelemeli uygulayın: özetleri gruplar hâlinde bir araya getirin, her grubu birleştirin, ardından grup özetlerini birleştirin.
def recursive_reduce(summaries, batch_size=10):
while len(summaries) > 1:
batches = [
summaries[i:i + batch_size]
for i in range(0, len(summaries), batch_size)
]
summaries = [reduce_phase(batch) for batch in batches]
print(f'Reduced to {len(summaries)} summaries')
return summaries[0]Önemli Ayrıntıları Koruma
Basit eşleştirme-birleştirmenin yaygın bir başarısızlığı, sıkıştırma sırasında önemli ayrıntıların kaybolmasıdır. Önlemler:
- Eşleştirme adımındaki istemde adların, sayıların ve tarihlerin korunmasını isteyin
- Birleştirme adımından bölümler arasındaki çelişkileri denetlemesini isteyin
- Eşleştirme bağlamının daha zengin olması için daha büyük bir parça boyutu kullanın
- Bir doğrulama turu çalıştırın: modelden, özgün belgedeki önemli varlıkların son özette yer alıp almadığını sorun
MAP_PROMPT = '''Summarize the following section in 5 sentences.
Preserve all key names, numbers, dates, and conclusions.
Section:
{chunk}'''İyileştirme Zinciri: Alternatif Bir Desen
İyileştirme zinciri, eşleştirme-birleştirmeye bir alternatiftir. Parçaları sırayla işler: N. parçanın özeti N+1. parçayla birlikte gönderilir ve model devam eden özeti günceller. Bu yaklaşım daha tutarlı bir çıktı üretir ancak paralelleştirilemez ve daha yavaştır.
Anlatı tutarlılığının önemli olduğu durumlarda (ör. hukuki sözleşmeler) iyileştirme zincirini kullanın. Hızın önemli olduğu durumlarda (ör. haber makalesi grupları) eşleştirme-birleştirmeyi kullanın.
def refine_summarize(chunks):
current_summary = summarize_chunk(chunks[0])
for chunk in chunks[1:]:
prompt = (
f'Existing summary:\n{current_summary}\n\n'
f'New section:\n{chunk}\n\n'
'Update the summary to incorporate the new section.'
)
resp = client.chat.completions.create(
model='gpt-4o',
messages=[{'role': 'user', 'content': prompt}]
)
current_summary = resp.choices[0].message.content
return current_summaryMaliyet ve Belirteç Yönetimi
Eşleştirme-birleştirme çok sayıda API çağrısı yapar. 1 milyon giriş belirteci başına 5 ABD doları ücretli gpt-4o ile 100 parçalık bir belge için:
- Eşleştirme: 100 parça × 1000 belirteç = 100 bin giriş belirteci ≈ $0.50
- Birleştirme: yaklaşık 10 bin belirteç (özetler) ≈ $0.05
- Toplam: belge başına yaklaşık $0.55
Maliyeti azaltmak için eşleştirme aşamasında gpt-4o-mini (1 milyon belirteç başına $0.15), birleştirme aşamasında ise yalnızca gpt-4o kullanın. Bu hibrit yaklaşım, kalite kaybı çok az olacak şekilde maliyetleri %70 azaltır.
def map_phase_cheap(chunks):
# Use mini model for map — cheaper, sufficient for chunk summaries
return [
summarize_chunk(c, model='gpt-4o-mini')
for c in chunks
]
def reduce_phase_quality(summaries):
# Use full model for final synthesis
return reduce_phase(summaries, model='gpt-4o')Eşleştirme-Birleştirme Ne Zaman Kullanılır
Eşleştirme-birleştirme özetleme şu durumlar için en uygunudur:
- Modelin bağlam penceresinden uzun belgeler
- Çok sayıda belgenin toplu olarak özetlenmesi (belge düzeyinde de paralelleştirin)
- Her aşamadaki istem üzerinde denetim sahibi olmanız gereken durumlar
Şu durumlar için daha az uygundur: belirli bir olguyu çıkarmak (bunun yerine bilgi getirmeyi kullanın) veya belgenin doğrudan özetlenebilecek kadar kısa olması (doğrudan özetleyin).
Bilginizi Sınayın
Eşleştirme-birleştirme özetleme deseninde birleştirme aşamasında ne olur?
Özet: Eşleştirme-Birleştirme Özetlemesi
Eşleştirme-birleştirme deseni, tek bir LLM çağrısı için fazla uzun olan belgeleri işler:
- Eşleştirme: Her parçayı bağımsız olarak özetleme — paralelleştirilebilir
- Birleştirme: Parça özetlerini tek bir son özette sentezleme
- Yinelemeli birleştirme: Özetlerin kendisi fazla uzun olduğunda uygulanır
- Maliyet önerisi: Eşleştirme için düşük maliyetli, birleştirme için kaliteli bir model kullanın
LangChain'in MapReduceDocumentsChain bileşeni kullanıma hazır bir uygulama sağlar. Sonraki derste kitaplar ve araştırma makaleleri için hiyerarşik özetleme ele alınacaktır.
Sıkça Sorulan Sorular
“Map-Reduce Özetleme Kalıbı” dersi ücretsiz mi?
Evet — “Map-Reduce Özetleme Kalıbı” 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 Prompt Engineering kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Prompt Engineering kursu toplamda 4 dersten oluşur.
“Map-Reduce Özetleme Kalıbı” dersinde ne öğreneceğim?
Her parçayı bağımsız olarak özetleyin, ardından özetleri birleştirin. AI Prompt Engineering 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 Prompt Engineering öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Prompt Engineering, 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 2. dersidir.
“Map-Reduce Özetleme Kalıbı” 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 Prompt Engineering dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Prompt Engineering 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
- Uzun Metinler için Parçalama Stratejileri
- Map-Reduce Özetleme Kalıbı
- Hiyerarşik Özetleme
- Parçalar Arasında Bağlamı Koruma