Semantic Chunking
Anlamsal parçalama, komşu cümleler arasındaki gömme benzerliğini ölçerek konunun değiştiği yerlerden belgeleri böler; böylece her parçada tek bir fikir bulunur.
Anlamsal parçalama, geri getirmeyle zenginleştirilmiş üretim (RAG) ve arama için belgeleri sabit sayıda karakter veya token başına değil, komşu cümlelerin gömümlerini karşılaştırarak bulunan konu değişim noktalarında parçalara böler. Böylece her parça tek bir düşünceyi kapsar ve vektör veri tabanındaki tek vektörü bu düşünceyi iyi temsil eder. Geri getirilen parça, büyük dil modeline (LLM) bir bölümün sonu ile sonrakinin başı yerine tamamlanmış bir düşünce sunar.
Anlamsal Parçalama Nasıl Çalışır#
Greg Kamradt'ın metin bölme eğitimleriyle popülerleşen ve LangChain içindeki SemanticChunker olarak uygulanan yaygın algoritma dört adımdan oluşur. Metin cümlelere bölünür ve her cümle, gürültüyü azaltmak için çoğunlukla komşularıyla birlikte gruplanarak gömülür. Ardışık her cümle çifti arasındaki kosinüs benzerliği bir uzaklığa dönüştürülür. Bir eşik, uzaklığın olağan dışı derecede büyük olduğu yerlerde kırılma noktalarını belirler: LangChain varsayılan olarak belgedeki tüm uzaklıkların 95. yüzdeliğini kullanır; ayrıca standart sapma, çeyrekler arası aralık ve gradyan eşikleri de sunar. Kırılma noktaları arasındaki cümleler bir parça oluşturur. LlamaIndex içindeki anlamsal bölücü de aynı yüzdelik kırılma noktasını kullanır.
import numpy as np
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
sentences = [
"The XR-12 coolant pump circulates water through the press line.",
"Inspect the XR-12 pump seals for leaks every week.",
"A worn pump bearing grinds loudly before it fails.",
"The staff cafeteria now opens for breakfast at 7:00.",
"The cafeteria menu adds vegetarian lunches in May.",
]
# Her cümleyle sonraki cümle arasındaki kosinüs uzaklığı
embeddings = model.encode(sentences, normalize_embeddings=True)
distances = 1 - np.sum(embeddings[:-1] * embeddings[1:], axis=1)
# Uzaklığın 95. yüzdeliği aştığı yerde yeni parça başlat
threshold = np.percentile(distances, 95)
chunks = [[sentences[0]]]
for sentence, distance in zip(sentences[1:], distances):
if distance > threshold:
chunks.append([])
chunks[-1].append(sentence)
print(np.round(distances, 2))
print(*[" ".join(chunk) for chunk in chunks], sep="\n")Komşu cümleler arasındaki uzaklıklar 0.56, 0.64, 0.98 ve 0.62'dir. Bu nedenle tek kırılma noktası, pompa yatağından kafeteryaya geçişteki 0.98'lik sıçramadır; sonuçta XR-12 pompası hakkında üç cümlelik bir parça ve kafeterya hakkında iki cümlelik bir parça elde edilir.
Parçalama Stratejilerinin Karşılaştırması#
- Sabit boyutlu parçalama: Her N token'da bir, genellikle komşu parçalar arasında bir miktar örtüşme olacak şekilde böler. Hızlı ve öngörülebilirdir; konu sınırlarını dikkate almaz.
- Özyinelemeli bölme: Her parça boyut sınırına sığana kadar önce paragraf sonlarında, ardından satır sonlarında ve sonra cümlelerde böler. LangChain, genel metinler için özyinelemeli karakter bölücüsünü önerir.
- Yapıyı dikkate alan bölme: Başlıkları, Markdown bölümlerini, HTML öğelerini veya PDF sayfa düzenini izler.
- Anlamsal parçalama: Anlam değişimlerini izler; bunun bedeli, dizin oluşturma sırasında her cümlenin gömülmesi ve parça boyutlarının büyük ölçüde değişmesidir. Bu nedenle uygulamalarda minimum ve maksimum uzunluklar belirlenir.
- Geç parçalama ve bağlamsal geri getirme: Önceki bir parçada karşılığı bulunan zamir gibi, belgenin geri kalanındaki bağlamı içermeyen parçalar sorununu ele alır ve yukarıdaki sınır belirleme yöntemlerinden herhangi biriyle birlikte kullanılabilir.
Robotikteki eylem parçalama yalnızca ad bakımından benzerdir: Burada bir politika, gelecekteki motor komutlarının sıralı dizisini tek bir birim olarak tahmin eder.
Metin Dışında Anlamsal Parçalama#
Konuşmayı metne dönüştürme sistemlerinin dökümlerinde paragraf sonları bulunmaz; bu nedenle gömme tabanlı kırılma noktaları, bir toplantının veya podcast'in konu değiştirdiği yeri bulmanın yaygın bir yoludur. Video da içerik temelinde parçalanabilir. Böylece video anlama veya çok modlu RAG için her klip, gelişigüzel seçilmiş 10 saniyelik bir kesit yerine tek bir olayı gösterir. Ultralytics YOLO26, insan ve araç içeren sahneler için bu tür sınırlar sağlar: izleme kipi, algılanan her nesneye kareler boyunca kalıcı bir kimlik verir. Böylece bir işlem hattı, sahneye yeni bir kimlik girdiğinde klip açabilir ve izlenen tüm kimlikler sahneden çıktığında klibi kapatabilir.
Anlamsal Parçalama Geri Getirme Performansını Artırır mı?#
Transkriptlerde, kazınmış web sayfalarında ve birleştirilmiş notlarda olduğu gibi, ilgisiz konular başlık olmadan yan yana geldiğinde konu temelli sınırlar en çok önem kazanır. Anlamsal parçalar gömme modeline ve eşiğe de bağlıdır; dolayısıyla ikisinden biri değiştiğinde aynı belge farklı parçalara bölünür. Her ikisi de gerçek sorgulardaki duyarlık temelinde ayarlanmalıdır. Anlamsal Parçalama Hesaplama Maliyetine Değer mi? (2024) adlı çalışma, belge geri getirme, kanıt geri getirme ve geri getirme temelli yanıt üretme görevlerinde anlamsal parçalamayla sabit boyutlu parçalamayı karşılaştırdı ve anlamsal parçalamanın ek hesaplama maliyetinin sabit boyutlu parçalara kıyasla tutarlı kazanımlar sağlamadığını buldu.










