Balıkçıl Kuşu'nun Gizli Yeteneği: Alet Kullanımı

Başlığı okuyunca "Ya bu adam yine ne diyor?" diye düşündüğünüzü tahmin edebiliyorum. Ama kabul edelim, böyle anlatmak hem daha zevkli hem de daha kolay.
Geçtiğimiz iki yazı sonucunda, yapay zekânın karmaşık dünyasını anlamak için kendimize bilge bir rehber edinmiştik: Balıkçıl Kuşu. İlk yazıda onun yardımıyla bir miti çürüttük. İkincisinde ise RAG sistemleri gibi çözümlerle, onun "bilgi okyanusunda" nasıl usta bir avcı olduğunu gördük. Peki, av tamamlandıktan sonra ne oluyor? Balıkçıl'ın yakaladığı "bilgi balığı", bazen tek lokmada yutulamayacak kadar büyük ve karmaşıksa? İşte bu noktada, Balıkçıl Kuşu'nun çoğumuzun bilmediği gizli bir yeteneği ortaya çıkıyor: O, sadece bir avcı değil, aynı zamanda zeki bir alet kullanıcısıdır. Bu yeni yazı da ise onun bu yeteneğini, yani Chunking metodunu ve farklı uygulama şekillerini anlatmaya çalışacağım.
Aslında mantık olarak her gün hayatımızda gördüğümüz, kullandığımız bir şey olan gruplama ya da istifleme diyebileceğimiz "chunking" işlemi, yapay zeka modellerinde çıktı kalitesini artırmak ve GIGO (Garbage In, Garbage Out) tuzağına düşmemek için uyguladığımız en temel adımlardan biri. Şimdi... Hadi gelin analojimize geri dönelim. Yani bizim çilekeş, cefakâr Balıkçıl Kuşu'na...
Hatırlarsanız kuşumuz modelimizin karşılaştığı çeşitli sorunlarına deva olmak için bilgi balıkları yakalıyordu. Bir önceki yazıda da değindiğim gibi, peki ya bu balıklar gereğinden büyük olursa, yarardan çok zarar vermez mi?
Verirler tabii ki. Peki neden böyle? Yani neden bir sorunu çözmek için kullandığımız RAG, beraberinde yeni sorunlar getiriyor? Aslında bunun iki temel sebebi var:
- Bağlam Penceresi: Önceki yazılardan tanıdık gelen, mevcut teknolojimiz sebebiyle yapay zeka tarafında en çok canımızı sıkan şey. Koku formülünü çıkarmakla görevli olan "Koku Uzmanı"nın (yani embedding modellerin) vektöre gömebileceği 'token'ların, yani modelin metni işlediği en küçük veri birimlerinin bir sınırı vardır. Bu sınırın aşılmasını istemiyoruz çünkü sınır aşıldığı zaman modeller gömme işlemine devam edemez, istediğimiz bir bilgiyi kaçırabilir ya da yanlış yorumlamasına sebebiyet verebilir. Yani evet, hem sohbet ettiğimiz dil modellerinin hem de onların kullandığı embedding modellerinin sınırlı bir hafızası var.
- Anlam Bütünlüğü: Bununla beraber, "chunking" işlemi tek başına, en azından dümdüz şekilde yapıldığında yarardan çok zarar verebilir. Çünkü böldüğünüz kısımlar eğer kendi içinde bir bütünlük sağlamıyor ya da bir önceki-sonraki bölümden parça taşıyorsa model yine işini doğru yapamayacak.
Diyeceksiniz, bize çözüm diye anlattığın şeyin bile bir sürü derdi var. O zaman kullanmamızın anlamı ne? Diyebilirsiniz tabii ki. Ancak bunları da çözmenin yolları var. Maalesef ki yapay zeka o eski güvenilir Casio saatiniz kadar sorunsuz değil.
Ee o zaman? Çözüm ne? Balıkçıl Kuşu, bu sorunu çözmek için sadece gagasına güvenmez, aynı zamanda zeki bir alet kullanıcısıdır kendisi. Devasa diyebileceğimiz 'bilgi balıklarını', nehir kenarında özenle biriktirdiği doğal aletleriyle, modellerin tüketebileceği lokmalara dikkatle ayırması, yani parçalaması, hem modellerin işini kolaylaştıran hem de bizim onlardan aldığımız verimi artıran hayati bir adımdır.
Şimdi gelin, Bilge Balıkçıl'ın bu 'doğru şekilde parçalama' işi için kullandığı aletlere ve yöntemlere daha yakından bakalım.
Balıkçıl'ın Alet Çantası: Temel Parçalama Yöntemleri
Parçalama (chunking) işlemini doğru yapmak, RAG sisteminin temelini sağlam kurmak demektir. Bu bölümde, sıkça karşılaşılan temel parçalama yöntemlerini, yani Balıkçıl'ın alet çantasındaki vazgeçilmezleri inceleyeceğiz.
1. Sabit Boyutlu Parçalama (Fixed-Size Chunking)
En basit parçalama yaklaşımıdır. Metin, içeriğine bakılmaksızın, önceden belirlenen bir karakter veya token sayısına (örneğin 1024 token) göre mekanik olarak bölünür. Analojimizde bu, Balıkçıl'ın keskin bir alet yerine küt bir taş kullanarak balığı kaba kuvvetle, hassasiyet gözetmeksizin yaklaşık olarak eşit parçalara ayırmasına benzer.
- Artıları:
- Basit ve Hızlı: Uygulaması en kolay ve işlem gücü en az gerektiren yöntemdir.
- Öngörülebilir Boyut: Tüm parçaların boyutu neredeyse aynıdır, bu da bazı sistemlerde yönetimi kolaylaştırır.
- Eksileri:
- Anlamsal Felaket Riski: Cümleleri, kelimeleri veya fikirleri tam ortasından bölme riski çok yüksektir. Bu, en büyük dezavantajıdır.
Pratik Bir Not
Bu yöntemin en büyük zafiyetini (anlam kaybı) azaltmak için genellikle "chunk overlap" (parça örtüşmesi) tekniği kullanılır. Örneğin, 1000 karakterlik parçalar oluştururken, her yeni parçanın bir önceki parçanın son 100 karakterini de içermesi sağlanır. Bu, parçalar arasındaki anlamsal bağın tamamen kopmasını bir nebze engeller.
2. Basit Cümle ve Paragraf Ayrımı (Simple Sentence/Paragraph Splitting)
Bu yaklaşım, metni önceden tanımlanmış belirli ayraç karakterlerine göre böler. Genellikle yeni satır karakterleri (\n) paragrafları, noktalar (.) ise cümleleri ayırmak için kullanılır. Analojimizde bu, Balıkçıl'ın yassı ve kenarı biraz keskin bir nehir taşı kullanarak, balığı kaba kuvvetle ezmek yerine, en azından görünen eklem yerlerinden ayırması gibidir.
- Artıları:
- Daha İyi Bütünlük: Sabit boyutlu parçalamaya göre anlam bütünlüğünü çok daha iyi korur.
- Hala Basit: Uygulaması hala oldukça basittir.
- Eksileri:
- Kırılganlık: Kısaltmalar, listeler veya farklı dillerdeki cümle yapıları gibi istisnai durumlarda kolayca hata yapabilir.
Pratik Bir Not
Bu yöntem, göründüğünden daha kırılgandır. Örneğin, "Prof. Dr. Şimşek Araba..." gibi bir cümlede, "Prof." ve "Dr." kelimelerinden sonraki noktalar, sistem tarafından cümlenin sonu olarak algılanabilir ve metin yanlış yerden bölünebilir.
3. Özyinelemeli Parçalama (Recursive Character Splitting)
Bu yaklaşım, metni anlamsal bütünlüğü koruyacak şekilde, öncelikli bir ayraç listesine göre hiyerarşik olarak bölmeyi hedefler. Mantığı şöyledir: "Önce metni paragraflara (\n\n) bölmeyi dene. Elde edilen parçalar hala belirlediğin boyuttan büyük mü? O zaman o büyük parçaları al ve bu sefer cümlelere (.) bölmeyi dene. Hala mı büyük? O zaman kelimelere ( ) göre böl..." Bu hiyerarşi, metnin yapısına en üst düzeyde saygı duyar. Balıkçıl'ın, avının doğal yapısını gözeten keskin bir çakmaktaşı kullanması gibi, bu yöntem de metnin doğal yapılarına öncelik verir.
- Artıları:
- Yüksek Anlamsal Bütünlük: Anlamsal olarak bağlantılı metinleri bir arada tutma olasılığı çok yüksektir.
- Esneklik: Hiyerarşik yapısı sayesinde birçok farklı metin türüne başarıyla uyum sağlar.
- Eksileri:
- Tutarsız Parça Boyutu: Parçaların nihai boyutu metnin yapısına göre değişir, bu da boyut tutarlılığının önemli olduğu durumlarda bir dezavantaj olabilir.
Pratik Bir Not
Esnekliği ve etkinliği nedeniyle LangChain gibi popüler framework'lerde varsayılan parçalama stratejisi genellikle budur.
4. Belge Yapısına Göre Parçalama (Document-Specific Chunking)
Bu yöntem, metnin formatına özgü yapısal elemanları (başlıklar, listeler, kod blokları vb.) tanıyarak bölme işlemi yapar. Örneğin, bir Markdown dosyasını her bir başlığa (#, ##) göre, bir kod dosyasını her bir fonksiyona (def) veya sınıfa (class) göre parçalara ayırır. Balıkçıl'ın, yumuşak bir balık ile sert kabuklu bir kereviti parçalamak için farklı aletler ve teknikler kullanması gibi, bu yöntem de düz bir metin ile yapısal bir Markdown dosyası için farklı kurallar uygular.
- Artıları:
- Maksimum Anlamsal Bütünlük: Yapılandırılmış veriler için en isabetli ve mantıksal olarak en tutarlı parçaları sunar.
- Temiz ve Odaklı Parçalar: Elde edilen her parça, genellikle tek bir alt konuya odaklanmış olur.
- Eksileri:
- Genel Çözüm Değil: Her belge türü için ayrı bir ayrıştırma (parsing) mantığı yazmak gerekir.
Ne Zaman Kullanılır?
Elinizdeki verinin (HTML, Markdown, LaTeX, JSON, kod dosyaları gibi) net bir yapısı varsa ve bu yapıyı ayrıştırmak için zaman ayırmaya istekliyseniz, en kaliteli ve en mantıklı parçaları bu yöntemle elde edersiniz.
5. Anlamsal Parçalama (Semantic Chunking)
Bu teknikte metin, anlamsal benzerliklerine göre gruplanır. Art arda gelen cümlelerin anlamsal olarak ne kadar farklılaştığı ölçülür ve konunun belirgin şekilde değiştiği yerler yeni bir parçanın sınırı olarak kabul edilir. Analojimizde bu, Balıkçıl'ın balığı anatomik olarak değil, yağlı ve kaslı dokuların "anlamsal" olarak ayrıldığı sınırlara göre kesmesidir.
- Artıları:
- Yüksek Anlam Bütünlüğü: Parçalar, tek bir anlamsal konu etrafında kümelendiği için son derece tutarlıdır. Bu, arama sonuçlarının isabetliliğini artırır.
- Doğal Sınırlar: Metnin içeriğine göre dinamik olarak sınırlar belirlediği için, sabit kurallara göre daha doğal ve mantıklı parçalar oluşturur.
- Eksileri
- İşlem Maliyeti: Her cümlenin veya cümlenin bir bölümünün vektörünü hesaplamak, kural tabanlı yöntemlere göre daha yavaş ve işlem gücü açısından daha maliyetlidir.
- Eşik Değerine Bağımlılık: Performansı, "anlamsal farkın" ne kadar olacağına karar veren eşik değerinin doğru ayarlanmasına kritik derecede bağlıdır. Bu, deneme-yanılma gerektirebilir.
6. Sezgisel Parçalama (Agentic Chunking)
Metni kurallarla bölmek yerine, önce daha büyük ve yetenekli bir dil modeline (LLM) danışılır. Modele "Bu dokümanın ana mantıksal bölümleri nelerdir?" gibi bir soru sorularak, onun ürettiği üst düzey özete göre parçalama yapılır. Bu, Balıkçıl'ın içgüdülerine güvenerek veya nehrin akıntısı gibi daha üst düzey bir desene bakarak avını stratejik olarak nasıl böleceğine karar vermesine benzetilebilir.
- Artıları:
- Kavramsal Anlama: Bir LLM'in muhakeme gücünü kullanarak, metnin sadece cümle veya paragraflarını değil, ana fikirlerini ve kavramsal bölümlerini anlar. Bu, en mantıklı parçaları üretebilir.
- Yapısal Olmayan Metinlerde Başarı: Net başlıklara veya paragraflara sahip olmayan, karmaşık ve serbest metinlerde bile gizli yapıyı ortaya çıkarabilir.
- Eksileri:
- Yüksek Maliyet ve Yavaşlık: Her bir doküman için güçlü bir LLM'e API çağrısı yapmak, özellikle binlerce dokümanınız varsa, hem çok pahalı hem de çok yavaş bir işlemdir. Bu, en büyük dezavantajıdır.
- Tutarlılık ve Bağımlılık: Sonuçların kalitesi, tamamen danışılan LLM'in performansına ve tutarlılığına bağlıdır. Farklı modeller farklı sonuçlar verebilir.
7. Bağlamsal İşaretleme (Contextual Chunking)
Küçük bir parçanın, ait olduğu büyük belgedeki bağlamını kaybetmesi sorununu çözer. Her bir parça oluşturulduktan sonra, bir LLM kullanılarak o parçanın bütün içindeki yerini ve önemini özetleyen kısa bir "bağlamsal not" üretilir. Bu not, parçanın başına eklenerek birlikte vektöre dönüştürülür. Bu, Balıkçıl'ın kestiği her bir değerli lokmanın yanına, onun "bütünün hangi özel kısmından geldiğini" belirten bir işaret (örneğin özel bir tüy) bırakması gibidir.
- Artıları:
- Global Bağlamı Koruma: Bir parçanın, büyük resimdeki yerini unutmamasını sağlar. Bu, özellikle "iğneyle kuyu kazılan" hassas aramalarda isabet oranını ciddi şekilde artırır.
- Daha İyi Vektör Temsili: Eklenen bağlamsal özet, parçanın vektörünün daha zengin ve daha doğru bir anlamsal temsile sahip olmasını sağlar.
- Eksileri:
- Çok Yüksek İşlem Maliyeti: Bu yöntem, sadece her doküman için değil, oluşturulan her bir parça (chunk) için bir LLM çağrısı gerektirir. Bu da onu, ilk veri işleme aşamasında en maliyetli ve en yavaş yöntemlerden biri yapar.
- Artan Depolama Maliyeti: Her parçaya eklenen özetler, vektör veritabanınızda saklamanız gereken toplam veri miktarını ve dolayısıyla depolama maliyetini artırır.
Balıkçıl'ın Atölyesinden Notlar: Optimizasyonlar, Araçlar ve Türkçe'nin Cilveleri
Temel ve ileri seviye parçalama yöntemlerini anlatmaya çalıştık. Peki, gerçek dünya uygulamalarında bu işler tam olarak nasıl yürüyor? Hangi araçlar hayatımızı kolaylaştırır ve güzide dilimiz Türkçe'nin karşımıza çıkardığı zorluklar nelerdir? Gelin, atölyenin daha derinlerine inelim.
1. Aklınıza Takılabilecek Bir Soru: Chunking İçin LLM Kullanmak Mantıklı mı?
"Bir dakika," diyebilirsiniz, "biz zaten RAG sistemini daha verimli hale getirmek, yani LLM'i daha az yormak için chunking yapmıyor muyduk? Hazırlık aşamasında yine LLM kullanmak bir çelişki değil mi?" Bu, son derece yerinde bir sorudur. Cevap, iki süreçteki LLM kullanımının amacının, zamanlamasının ve ölçeğinin tamamen farklı olmasında yatar.
- "Mimar" LLM (Tek Seferlik Yatırım): "Agentic" veya "Contextual" chunking gibi yöntemlerde kullanılan LLM, bir mimar gibi çalışır. Bu işlem, dokümanlar sisteme sadece bir kez yüklenirken yapılır. LLM, tüm dokümanı analiz eder ve en mantıklı bölünme noktalarını belirler. Evet, bu tek seferlik işlem yavaş ve maliyetlidir. Ancak bu yatırımı en başta yaparak, gelecekte yapılacak binlerce sorguyu hızlı, ucuz ve isabetli hale getirirsiniz.
- "Sentezleyici" LLM (Her Sorguda Çalışan): RAG'in sonunda cevap üreten LLM ise, her kullanıcı sorusunda çalışır. Ancak bu model, dokümanın tamamını değil, sadece "Mimar" LLM'in akıllıca hazırladığı birkaç küçük ve alakalı parçayı görür. İş yükü çok daha az olduğu için bu işlem son derece hızlı ve ucuzdur.
Restoran Analojisiyle Özetlersek: Chunking'de LLM kullanmak, bir restoranın akşam servisi öncesi yaptığı "mise en place" (ön hazırlık) gibidir. Şef, sabahtan saatlerini harcayıp tüm malzemeleri doğrar ve hazırlar (yavaş ve maliyetli). Akşam sipariş geldiğinde ise o hazır malzemelerle yemeği dakikalar içinde çıkarır (hızlı ve verimli).
2. Yöntemler Hakkında Önemli Nüanslar
- Devasa Bağlam Pencereleri Chunking'i Öldürdü mü?
- GPT-4 Turbo (128K token) ve Claude 3 (200K token) gibi modellerin daha büyük bağlam pencereleri, küçük dokümanlar için chunking ihtiyacını azaltmış gibi görünebilir. Ancak yüzlerce sayfalık bir teknik doküman, bir kitap veya bir şirketin tüm bilgi tabanı söz konusu olduğunda, bu sınırlar bile yetersiz kalabilmektedir. Dolayısıyla chunking, büyük ölçekli RAG sistemleri için hala kritik ve vazgeçilmezdir.
- Anlamsal Parçalama Her Zaman Pahalı Değildir
- "Anlamsal Parçalama"nın işlem maliyetinin yüksek olabileceğini belirttik. Ancak bu, mutlak bir kural değildir.
all-MiniLM-L6-v2
gibi hafif ve son derece verimli "Sentence Transformers" modelleri kullanarak, bu işlemi çok daha düşük maliyetlerle ve yüksek hızda yapmak mümkündür. Yani, doğru alet seçimiyle bu teknik optimize edilebilir.
- "Anlamsal Parçalama"nın işlem maliyetinin yüksek olabileceğini belirttik. Ancak bu, mutlak bir kural değildir.
- Yapısal Ayrıştırmanın Otomasyonu
- "Her format için özel kod yazma" zorunluluğu, modern araçlarla büyük ölçüde azalıyor. Unstructured.io ve LlamaIndex'in sunduğu
LlamaParse
gibi kütüphaneler;PDF
,HTML
,Word
gibi karmaşık formatları otomatik olarak analiz edip, içindeki başlık, liste, tablo gibi yapısal elemanları tanıyarak akıllıca parçalara ayırabilir. Bu araçlar, Balıkçıl'ın farklı avlar için kullandığı "özel aletleri" otomatikleştiren birer "İsviçre çakısı" gibidir.
- "Her format için özel kod yazma" zorunluluğu, modern araçlarla büyük ölçüde azalıyor. Unstructured.io ve LlamaIndex'in sunduğu
3. İleri Seviye Optimizasyon Teknikleri
Hibrit Yaklaşımlar
En iyi sonuçlar genellikle tek bir yönteme bağlı kalmak yerine, yöntemleri birleştirmekten gelir. Örneğin, LangChain'in SemanticChunker
'ı gibi hibrit yaklaşımlar mevcuttur. Bu yöntem önce metni cümlelere ayırır, ardından anlamsal olarak benzer olan ardışık cümleleri birleştirerek anlam bütünlüğü yüksek parçalar oluşturur. Analojimizde bu, Balıkçıl'ın önce keskin çakmaktaşıyla balığı doğal hatlarından ayırıp, sonra dokusal hissiyatına göre bu parçalardan bazılarını tekrar birleştirmesi gibidir. Bu yaklaşıma bir başka somut örnek olarak, LlamaIndex
kütüphanesindeki SentenceWindowNodeParser
verilebilir; bu araç, her bir parçanın etrafına bağlam olarak önceki ve sonraki cümleleri otomatik olarak ekleyerek parça boyutu ve bağlam penceresi dengesini kurar.
Dinamik Parça Boyutu
Metnin karmaşıklığına veya yoğunluğuna göre parça boyutunu otomatik ayarlayan teknikler de geliştirilmektedir. Örneğin, metnin daha basit kısımlarında daha büyük, daha yoğun ve karmaşık kısımlarında ise daha küçük parçalar oluşturularak hem bağlam korunur hem de hassasiyet artırılır. Daha somut bir örnek vermek gerekirse, yoğun teknik formüllerin olduğu paragraflarda 256 token gibi daha küçük, akıcı anlatım paragraflarında ise 512 token gibi daha büyük parçaların kullanılması gibi adaptif kurallar tanımlanabilir. (Peki, metin yoğunluğu nasıl ölçülür? Bunun için kelime başına hece sayısı, özel karakter veya formül varlığı gibi basit metrikler kullanılabilir.)
4. Popüler Araçlar ve Kütüphaneler
LlamaIndex: SentenceSplitter
, TokenTextSplitter
gibi chunking için özelleşmiş ve optimize edilmiş birçok sınıf sunar.
LangChain: RecursiveCharacterTextSplitter
gibi popüler ve esnek bölücülerin yanı sıra, SemanticChunker gibi hibrit çözümler de barındırır.
Diğer Kütüphaneler: Spacy
ve NLTK
gibi doğal dil işleme kütüphaneleri, özellikle farklı dillerin (Türkçe dahil) dilbilgisi kurallarına uygun, daha akıllı cümle bölücüler sunar.
5. Türkçe Metinlerde Özel Zorluklar
Güzide dilimiz Türkçe, sondan eklemeli yapısı ve yazım kurallarıyla chunking sürecinde özel dikkat gerektirir:
- Agresif Eklemleme: Türkçe'deki kelimeler çok sayıda ek alabilir. Bazı basit tokenizasyon yöntemleri "kitabımı" gibi bir kelimeyi anlamsızca "kitap-ım-ı" gibi parçalara ayırabilir. Bu durum, özellikle anlamsal bütünlüğe dayanan chunking yöntemlerinde sorun yaratabilir.
- Noktalı Kısaltmalar: "Prof. Dr. vb." gibi kısaltmalar, basit cümle bölücülerin ("split by .") kafasını karıştırarak metni yanlış yerden bölmesine neden olabilir. Bu nedenle, chunking işleminden önce metne bir "ön işleme" (preprocessing) adımı uygulamak hayati önem taşır. Pratikte bu işlem için
Zemberek-NLP
veyaspacy-tr
gibi Türkçe'ye özel kütüphaneler kullanılabilir. Örneğin, metindeki "Prof." gibi bir kısaltma geçici olarak "[PROF]" gibi eşsiz bir ifadeyle değiştirilir, parçalama işlemi yapılır ve sonrasında bu ifade tekrar orijinal haline döndürülür. İşte basit bir Python kodu örneği:
# 1. Orijinal metni tanımla
metin = "Bu çalışma Prof. Dr. Ali Veli tarafından yapılmıştır."
print(f"Orijinal Metin: {metin}\n")
# 2. Kısaltmaları geçici, eşsiz ifadelerle değiştir
gecici_metin = metin.replace("Prof.", "[PROF]").replace("Dr.", "[DR]")
print(f"Geçici Metin (Placeholder'lar ile): {gecici_metin}\n")
# 3. Varsayımsal chunking işlemi: Metni noktalara göre ayıralım
parcalar = [parca for parca in gecici_metin.split('.') if parca]
print(f"Parçalar (Chunk'lar): {parcalar}\n")
# 4. Parçaları tekrar orijinal haline döndürme
orijinal_parcalar = []
for parca in parcalar:
orijinal_parca = parca.replace("[PROF]", "Prof.").replace("[DR]", "Dr.")
orijinal_parcalar.append(orijinal_parca)
print(f"Orijinal Haline Döndürülmüş Parçalar: {orijinal_parcalar}\n")
Bu Python kodu, bir ön işleme tekniğini göstermek için basitleştirilmiş bir örnektir. Tam bir chunking uygulaması, bu mantığı daha gelişmiş metin bölme fonksiyonlarıyla birleştirmeyi gerektirir.
Sonuç: Stratejik Bir İlk Adım
Bu yazıda, RAG sistemlerinin temel taşı diyebileceğimiz "chunking" işlemine değindik. Balıkçıl'ın alet çantasını açarak, basit bir nehir taşından gelişmiş sezgisel tekniklere kadar farklı yöntemlerin, farklı senaryolarda ne gibi avantajlar ve dezavantajlar sunduğunu incelemeye çalıştık.
Veriyi RAG sistemine nasıl sunduğunuz, sistemden alacağınız cevabın kalitesini doğrudan belirler. Chunking, "Garbage In, Garbage Out" prensibini, "Quality In, Quality Out" felsefesine dönüştürmenin ilk ve en kritik adımıdır. Doğru strateji, sadece teknik bir gereklilik değil, aynı zamanda daha isabetli, hızlı ve uygun maliyetli bir yapay zekâ çözümü inşa etmenin de anahtarıdır.
Aşağıda, bu yazıda ele aldığımız yöntemlerin karşılaştırmalı bir özet tablosunu bulabilirsiniz. Peki, bu stratejik lokmalar hazır olduğuna göre, sıradaki adım ne?
Serimizin bir sonraki yazısında, bu parçaların nasıl matematiksel birer "anlam kokusuna" büründüğünü, yani Embedding modellerinin dünyasını keşfedeceğiz. O zamana dek, görüşmek üzere.
Özet Tablosu: Yöntemlere Hızlı Bakış
Yöntem | Temel Prensip | En Güçlü Yanı | En Zayıf Yanı |
---|---|---|---|
Sabit Boyutlu | Metni önceden belirlenen token/karakter sayısına göre mekanik olarak böler. | Hız, basitlik, öngörülebilirlik | Anlam bütünlüğünü ciddi şekilde bozma riski (cümleler ortadan bölünebilir) |
Basit Cümle/Paragraf | Metni nokta (.), yeni satır (\n) gibi sabit sınırlayıcılara göre böler. | Sabit boyutludan daha iyi anlam koruması | Kırılganlık: Kısaltmalar ("Prof."), rakamlar ("5.5") veya özel karakterlerde hata yapar |
Özyinelemeli | Metni hiyerarşik ayraç listesine (ör: ["\n\n", "\n", ". "] ) göre adım adım böler. |
Yüksek anlam bütünlüğü + esneklik | Değişken parça boyutları (düzensiz çıktı) |
Belge Yapısına Göre | HTML/Markdown başlıkları, kod blokları gibi yapısal elemanları kullanarak böler. | Yapılandırılmış veride maksimum anlam bütünlüğü | Format bağımlılığı: Her belge türü için özel parser gerekir |
Anlamsal | Cümle benzerlik skorlarına göre konu değişimlerini tespit ederek böler. | Doğal anlamsal sınırlarda bölme | İşlem maliyeti (embedding hesaplama) + eşik değerinin hassas ayarı gerekliliği |
Sezgisel (Agentic) | Bir LLM'den metnin mantıksal bölümlerini tanımlamasını ister. | Kavramsal anlama (yapısal olmayan metinlerde bile) | Çok yüksek maliyet/yavaşlık (doküman başına LLM çağrısı) |
Bağlamsal | Her parçaya, ait olduğu büyük bağlamı özetleyen bir LLM notu ekler. | Global bağlam kaybını önlemede etkili | Aşırı işlem maliyeti (parça başına LLM çağrısı) + depolama ek yükü |
Yöntemlerin Karakter Analizi: Hangisi Ne Zaman Parıldar?
Bu kadar çok yöntem arasından doğru olanı seçmek, projenin ihtiyacını anlamaktan geçer. Her bir yöntemin kendine özgü bir kişiliği ve en iyi performans gösterdiği bir sahne vardır. Aşağıda, seçili bazı yöntemlerin hangi senaryolarda öne çıktığına dair bir karakter analizi bulacaksınız.
- Özyinelemeli Parçalama (Recursive): Bu, alet çantasındaki "İsviçre çakısıdır".
Nereden başlayacağınızı bilmiyorsanız veya elinizdeki metinlerin yapısı çeşitli ve düzensizse, bu yöntem genellikle en güvenli başlangıç noktasıdır. Esnekliği sayesinde, çoğu senaryoda "yeterince iyi" ve dengeli bir sonuç üretir; ne kaba kuvvetle ezer ne de aşırı detaya girerek yorar. - Belge Yapısına Göre Parçalama: Bu, "terzi işidir".
Elinizdeki veri; birHTML
, kod dosyası veya belirli bir şablona sahip bir rapor gibi net bir yapıya sahipse, bu yöntem rakipsizdir. Metnin mevcut yapısını bir "kumaş" gibi kullanarak, üzerine tam oturan, en kusursuz ve mantıklı kesimleri yapar. Standart bir çözüm yerine, malzemeye özel bir yaklaşım gerektiren durumlar için idealdir. - Anlamsal Parçalama: Bu, "gurme yaklaşımıdır".
Önceliğiniz hız veya maliyet değil de, metnin anlamsal ruhunu en saf haliyle yakalamaksa bu yöntem parıldar. Bir makaledeki alt konu geçişlerini, bir müşteri geri bildirimindeki duygu değişimlerini veya bir hikayedeki farklı temaları yakalamak gibi, metnin derin anlam katmanlarına odaklanan senaryolar için biçilmiş kaftandır. - Bağlamsal İşaretleme: Bu, "kütüphanecinin notudur".
Elinizde, her bir cümlenin bile ancak kitabın tamamı bilindiğinde tam anlam kazandığı, çok yoğun ve referanslarla dolu bir akademik makale veya hukuki bir metin varsa bu yöntem devreye girer. Her bir parçanın "küresel bağlamını" koruyarak, "iğneyle kuyu kazma" gerektiren en zorlu aramalarda bile isabetliliği en üst düzeye çıkarmayı hedefler.
Yorumlar