Late Chunking
Geç parçalama, uzun bağlamlı bir modelle belgenin tamamını gömer, ardından her parça için belirteç vektörlerinin havuzlamasını yapar; böylece her parça gömmesi belge bağlamını korur.
Geç parçalara ayırma, uzun bağlamlı bir gömme modelinin önce belgenin tamamını kodladığı, ardından ortaya çıkan belirteç vektörlerinin parça sınırlarında bölünüp her parça için ortalamasının alınarak tek bir gömme üretildiği bir belge parçalama yöntemidir. Ortalama alınırken her belirteç belgenin tamamını zaten görmüş olur; bu nedenle "değiştirilmesi gerekiyor" diyen bir parça, "bu" sözcüğünün neye gönderme yaptığını taşımaya devam eder. Jina AI'daki araştırmacılar bu yöntemi, ek eğitim gerektirmeden mevcut gömme modellerine uyguladıkları 2024 tarihli Geç Parçalama: Uzun Bağlamlı Gömme Modelleriyle Bağlamsal Parça Gömmeleri makalesinde tanıttı.
Parça Gömmeleri Bağlamı Neden Kaybeder?#
Getirim artırılmış üretim (RAG) sistemleri, her vektörün odaklı tek bir bölümü temsil etmesi ve getirilen metnin modelin bağlam penceresine sığması için belgeleri parçalara ayırır. Geleneksel parçalama, her parçayı tek başına gömer; bu da önceki metinle olan her bağlantıyı koparır. Bir kılavuzdan art arda gelen şu iki cümleyi ele alalım: "XR-12 pompası, soğutucuyu pres hattında dolaştırır." ve "10.000 çalışma saatinden sonra değiştirilmesi gerekir." İkinci cümle tek başına gömüldüğünde XR-12 pompasından hiç söz etmez; bu nedenle pompanın değiştirilmesiyle ilgili bir soru, yanıtı içermesine rağmen vektör aramasında bu cümleyle zayıf eşleşir.
Geç Parçalama Nasıl Çalışır#
Belgenin tamamı belirteçlere dönüştürülür ve her parçanın belirteç aralığı kaydedilir; sınırlar, sabit boyutlu parçalama veya anlamsal parçalama dâhil olmak üzere herhangi bir bölücüden gelebilir. Ardından belirteç dizisinin tamamı, öz dikkatin her belirteçteki bilgiyi diğer tüm belirteçlere aktardığı transformatör gömme modelinden geçirilir. Son olarak her aralıktaki belirteç vektörlerinin ortalaması alınarak o parçanın gömmesi oluşturulur. Jina'nın jina-embeddings-v2 modellerindeki 8.192 belirteç sınırı gibi modelin giriş sınırını aşan belgeler, makalenin uzun geç parçalama adını verdiği örtüşen makro parçalara kodlanır.
Aşağıdaki örnekte, küçük bir Sentence Transformers modeliyle pompa cümlesi her iki yöntemle de gömülüyor ve her sürümün soruyla benzerliği karşılaştırılıyor:
import torch
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
chunks = [
"The XR-12 pump circulates coolant through the press line.",
"It must be replaced after 10,000 operating hours.",
]
query = model.encode("When should the XR-12 pump be replaced?", convert_to_tensor=True)
# Geleneksel parçalama: ikinci parçayı tek başına göm
naive = model.encode(chunks[1], convert_to_tensor=True)
# Geç parçalama: belgenin tamamını kodla, sonra yalnızca ikinci parçanın belirteçlerinin ortalamasını al
tokens = model.encode(" ".join(chunks), output_value="token_embeddings")
start = len(model.tokenizer(chunks[0])["input_ids"]) - 1 # [CLS] + 1. parçanın belirteçleri
late = tokens[start:-1].mean(dim=0) # son [SEP] belirtecini çıkar
for name, emb in [("naive", naive), ("late", late)]:
print(name, round(torch.cosine_similarity(query, emb, dim=0).item(), 3))Bağımsız olarak gömülen parçanın soruyla benzerlik puanı 0,382; aynı cümlenin geç parçalanmış sürümünün puanıysa 0,62'dir. Bunun nedeni, ortalama alınmadan önce belirteçlerinin "XR-12 pompası" ifadesine dikkat yöneltmiş olmasıdır.
Nesne algılama da 2015'te aynı değişimi yaşadı. R-CNN, evrişimli bir ağı her kırpılmış bölge önerisi üzerinde ayrı ayrı çalıştırdı; Fast R-CNN ise ağı görüntünün tamamında bir kez çalıştırıp her bölgeyi ortak özellik haritalarından havuzladı. VGG16 omurgasıyla bu yaklaşım, test zamanı algılamayı 213 kat hızlandırdı. Ultralytics YOLO26 da omurgasını görüntünün tamamında bir kez çalıştırıp tüm kutuları bu ortak özelliklerden tahmin eder; böylece hiçbir algılama yalıtılmış bir kırpmadan hesaplanmaz.
Geç Parçalama ve İlgili Yöntemler#
- Bağlamsal getirim: Dizine eklemeden önce her parçanın başına LLM tarafından yazılmış bir not ekler. Parça başına bir LLM çağrısı gerektirir ve eklenen bağlam metin olduğundan anahtar sözcük aramasına da yardımcı olur.
- ColBERT geç etkileşimi: Her belirteç için bir vektör tutar ve arama sırasında bunları sorguyla karşılaştırır. Geç parçalama, her parçayı tek vektöre indirger; böylece sonuç tüm standart vektör dizinlerine sığar.
- Parça örtüşmesi: Komşu parçalar arasında birkaç cümleyi yineler. Yalnızca yakındaki bağlamı korur ve dizini büyütür.
- Yeniden sıralayıcılar: İlk aramadan sonra getirilen adayları daha güçlü bir modelle yeniden sıralar ve geç parçalamayla birlikte iyi çalışır.
Geç Parçalama Ne Zaman Yararlıdır?#
Parçaların zamirlere, bir kez tanımlanan kısaltmalara ve rapor ya da kılavuz gibi anlatılara bağlı olduğu durumlarda kazanımlar en büyüktür; ürün başlıkları gibi kısa ve kendi başına yeterli kayıtlardaysa en küçüktür. Bu yöntem, belirteçlerin ortalamasını alan ve belirteç düzeyindeki çıktılarına erişilebilen bir gömme modeli gerektirir; ayrıca belgenin herhangi bir bölümü değiştiğinde belgenin tamamı yeniden kodlanmalıdır. Geç parçalamadan elde edilen parça vektörleri, herhangi bir değişiklik yapılmadan sıradan bir vektör veritabanına eklenir. Jina'nın gömme API'si, art arda gelen parça listesini tek belge olarak gömen late_chunking parametresiyle bu yöntemi kullanıma sunar.










