Uzun Metinler için Parçalama Stratejileri
Sabit boyutlu, cümle sınırlarına dayalı ve anlamsal parçalama yaklaşımlarını öğrenin.
Uzun Metinler için Parçalama Stratejileri, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 1. 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.
Uzun Belgeler Neden Zorluk Çıkarır
LLM'lerin bir bağlam penceresi vardır — tek seferde işleyebilecekleri en fazla belirteç sayısı. GPT-4 128 bin belirteci, Claude ise 200 bin belirteci destekler; ancak birçok belge bu sınırları bile aşar. Daha da önemlisi, araştırmalar model doğruluğunun çok uzun bağlamlarda genellikle düştüğünü göstermektedir. Parçalama, belgeleri işlemeden önce daha küçük parçalara ayırma işlemidir.
Sabit Boyutlu Parçalama
Sabit boyutlu parçalama, içerik sınırlarından bağımsız olarak metni her N belirteçte (veya karakterde) böler. En basit stratejidir ve anlamsal anlayış gerektirmez.
Tipik parça boyutu: 500–1000 belirteç. Parçaları dizine eklemek ve getirmek kolaydır; ancak cümleleri ortadan bölebilir ve sınırlarda anlam kaybına yol açabilir.
import tiktoken
def fixed_chunk(text, max_tokens=1000):
enc = tiktoken.get_encoding('cl100k_base')
tokens = enc.encode(text)
chunks = []
for i in range(0, len(tokens), max_tokens):
chunk_tokens = tokens[i:i + max_tokens]
chunks.append(enc.decode(chunk_tokens))
return chunks
chunks = fixed_chunk(long_document)
print(f'Total chunks: {len(chunks)}')Sabit Boyutlu Parçalamanın Avantajları ve Dezavantajları
Avantajları:
- Uygulaması basittir — NLP gerekmez
- Parça boyutları öngörülebilirdir — API maliyetlerini yönetmek daha kolaydır
- Hızlı işleme
Dezavantajları:
- Cümle ve paragraf sınırlarını keser
- Parçalar arasında bölünen bir cümle, getirme sırasında bağlamını kaybeder
- Özetleme için elverişsizdir — parça bir savın ortasında bitebilir
Cümle Sınırlarında Parçalama
Cümle sınırlarında parçalama, metni doğal cümle veya paragraf kesişimlerinden böler. Her parça tam bir cümle sonunda biter; böylece hiçbir cümle ortadan bölünmez. Bu yöntem daha okunabilir ve tutarlı parçalar üretir.
Sınırları algılamak için bir cümle belirteçleyici (spaCy veya NLTK) kullanın, ardından parça hedef boyuta ulaşana kadar cümleleri gruplayın.
import spacy
nlp = spacy.load('en_core_web_sm')
def sentence_chunk(text, max_tokens=1000):
doc = nlp(text)
sentences = [sent.text.strip() for sent in doc.sents]
chunks, current, count = [], [], 0
for sent in sentences:
word_count = len(sent.split())
if count + word_count > max_tokens and current:
chunks.append(' '.join(current))
current, count = [], 0
current.append(sent)
count += word_count
if current:
chunks.append(' '.join(current))
return chunksAnlamsal Parçalama
Anlamsal parçalama bir adım daha ileri gider — metni konu değiştiğinde böler. Bitişik cümleleri gömerek ve cosine_similarity ölçerek tartışmanın yeni bir konuya geçtiği noktayı tespit edebiliriz.
Benzerlik bir eşik değerinin altına düştüğünde parça sınırı ekleyin. Bu yöntem, konu bakımından bütünlüklü parçalar üretir ve geri getirmeli üretim (RAG) için idealdir.
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
model = SentenceTransformer('all-MiniLM-L6-v2')
def semantic_chunk(sentences, threshold=0.75):
embeddings = model.encode(sentences)
chunks, current = [], [sentences[0]]
for i in range(1, len(sentences)):
sim = cosine_similarity(
[embeddings[i-1]], [embeddings[i]]
)[0][0]
if sim < threshold:
chunks.append(' '.join(current))
current = []
current.append(sentences[i])
if current:
chunks.append(' '.join(current))
return chunksÜç Stratejinin Karşılaştırılması
Seçim yapmanıza yardımcı olacak yan yana bir karşılaştırma:
- Sabit boyutlu: en hızlı, sınırları en az doğru olan yöntem — basit işlem hatları için kullanın
- Cümle sınırlarında: cümle bütünlüğünü korur — tutarlılığın önemli olduğu durumlarda kullanın
- Anlamsal: konu bütünlüğü en iyi olan yöntem — hassas getirmenin kritik olduğu RAG için kullanın
Uygulamada anlamsal parçalama, gömme hesaplaması nedeniyle gecikme ekler. Seçiminizi getirme doğruluğu gereksinimlerine göre yapın.
Getirme Görevleri için Parçalama
Geri getirmeli üretim (RAG) için parçalar arama birimine dönüşür. Bir kullanıcı sorgusu gömülür, ardından en benzer parçalar getirilerek isteme eklenir.
Daha küçük parçalar (200–400 belirteç) getirme kesinliğini artırır — her parça tek bir odaklanmış fikir içerir. Daha büyük parçalar (800–1000 belirteç) daha fazla bağlam sağlar; ancak ilgili pasajın yanında ilgisiz içerikler de barındırabilir.
import openai
import numpy as np
client = openai.OpenAI(api_key='sk-...')
def embed(text):
resp = client.embeddings.create(
model='text-embedding-3-small',
input=text
)
return np.array(resp.data[0].embedding)
def retrieve(query, chunks, top_k=3):
q_emb = embed(query)
scores = [(i, np.dot(q_emb, embed(c))) for i, c in enumerate(chunks)]
scores.sort(key=lambda x: x[1], reverse=True)
return [chunks[i] for i, _ in scores[:top_k]]Özetleme Görevleri için Parçalama
Özetleme için parçalar, eksiksiz bir savı veya bölümü içerecek kadar büyük olmalıdır. 600–800 belirteçlik cümle sınırı parçaları iyi sonuç verir.
Her parça bağımsız olarak özetlenir (eşleştir adımı), ardından özetler birleştirilerek nihai özet oluşturulur (indirge adımı). Bu, sonraki derste ele alınan klasik eşleştir-indirge düzenidir.
Örtüşme: Parça Sınırlarını Birleştirme
Sınır hatalarını azaltmaya yarayan pratik bir teknik: parçalar arasında örtüşme ekleyin. N parçasının son 100–200 belirteci, N+1 parçasının başında tekrarlanır.
Örtüşme, bir sınırı aşan cümlenin en az bir parçada tam olarak bulunmasını sağlar. Bu, özellikle getirme için önemlidir — sınırın iki tarafına yayılan bir konuyla ilgili sorgu, örtüşen parçayla eşleşir.
def fixed_chunk_with_overlap(text, max_tokens=1000, overlap=200):
enc = tiktoken.get_encoding('cl100k_base')
tokens = enc.encode(text)
chunks = []
step = max_tokens - overlap
for i in range(0, len(tokens), step):
chunk_tokens = tokens[i:i + max_tokens]
chunks.append(enc.decode(chunk_tokens))
if i + max_tokens >= len(tokens):
break
return chunksParça Başına Üst Veri Zenginleştirme
Sonraki adımların kaynağına başvurabilmesi için her parça üst veri taşımalıdır:
source: dosya adı veya URLpage: sayfa numarasıchunk_index: belgedeki konumsection: bölüm veya başlık
Bu üst veriler, bir vektör veritabanında (Pinecone, Chroma, Weaviate) gömme vektörüyle birlikte depolanır ve getirilen parçalarla birlikte döndürülür; böylece LLM kaynaklara atıfta bulunabilir.
def chunk_with_metadata(text, source='doc.pdf', page=1):
chunks = fixed_chunk_with_overlap(text)
return [
{
'text': chunk,
'metadata': {
'source': source,
'page': page,
'chunk_index': i
}
}
for i, chunk in enumerate(chunks)
]Doğru Stratejiyi Seçme
Hızlı bir karar kılavuzu:
- Öncelik hızda, içerik düzyazı biçiminde: cümle sınırlarında parçalama
- Getirme doğruluğu kritik: küçük parçalarla (300 belirteç) anlamsal parçalama
- Bir kitabı veya raporu özetleme: cümle sınırlarında parçalama, daha büyük parçalar (800 belirteç), eşleştir-indirge
- Hukuki/teknik belgeler: maddeleri birlikte tutmak için anlamsal parçalama
Bir stratejiye kesin olarak karar vermeden önce, temsili bir sorgu kümesi üzerinde getirme geri çağırma oranını her zaman ölçün.
Bilginizi Sınayın
Ardışık cümle gömmeleri arasındaki kosinüs benzerliği bir eşik değerinin altına düştüğünde metni parçalara ayıran strateji hangisidir?
Özet: Parçalara Ayırma Stratejileri
Üç temel parçalara ayırma stratejisi öğrendiniz:
- Sabit boyutlu: Her N belirteçte bir ayırma — hızlı, basit, sınırları dikkate almaz
- Cümle sınırı tabanlı: Doğal cümle kesimlerinde ayırma — tutarlı, orta düzeyde karmaşık
- Anlamsal: Gömme benzerliği aracılığıyla konu değişimlerinde ayırma — en doğru, maliyeti en yüksek
Sınır hatalarını azaltmak için parçalar arasında örtüşme ekleyin ve kaynak gösterme ile izlenebilirliği mümkün kılmak için her zaman parçalara üst veri (kaynak, sayfa, dizin) ekleyin. Sonraki derste eşleştirme-birleştirme özetleme deseni ele alınacaktır.
Yapay zeka eğitmeniyle AI Prompt Engineering öğ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
- 53
- Dersler
- 199
Sıkça Sorulan Sorular
“Uzun Metinler için Parçalama Stratejileri” dersi ücretsiz mi?
Evet — “Uzun Metinler için Parçalama Stratejileri” 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.
“Uzun Metinler için Parçalama Stratejileri” dersinde ne öğreneceğim?
Sabit boyutlu, cümle sınırlarına dayalı ve anlamsal parçalama yaklaşımlarını öğrenin. 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 1. dersidir.
“Uzun Metinler için Parçalama Stratejileri” 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