Chunking
- Türkçe karşılığı
- parçalama
- Okunuşu
- çanking
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
Chunking, uzun belgeleri embedding'e çevrilip saklanmadan önce küçük parçalara böler; böylece bir RAG sistemi yalnızca ilgili kısımları bulup modele iletebilir.
RAG'de chunking (parçalama) nedir?
Bir retrieval-augmented generation (RAG) sistemi koca bir kılavuzu dil modeline veremez; uzun bir belgenin tek bir embedding'i de pek çok konuyu tek bir vektörde bulanıklaştırır. Bu yüzden belgeler önce genellikle birkaç yüz token'lık chunk'lara bölünür. Her chunk kendi embedding'ini alır ve bir vektör veritabanında saklanır; soru geldiğinde sistem soruya en yakın birkaç chunk'ı getirir ve prompt'a ekler.
Nasıl böldüğünüz önemlidir. Sabit boyutlu chunking metni belirli sayıda token'da bir keser, çoğu zaman yüzde 10 ila 20 örtüşmeyle; böylece ortadan bölünen bir cümle en az bir chunk'ta bütün olarak yer alır. Yapıya duyarlı chunking ise başlıklar, paragraflar ve cümleler ya da kaynak koddaki fonksiyonlar gibi doğal sınırları tercih eder. İlk araştırmalar basit bir başlangıç noktası koydu: Dense Passage Retrieval ve ilk RAG makalesi Wikipedia'yı 100 kelimelik pasajlara böldü.
Chunk boyutu bir ödünleşimdir. Küçük chunk'lar bir soruyla tam olarak eşleşir ama onları açıklayan bağlamı kaybedebilir; büyük olanlar bağlamı korur ama eşleşmeyi seyreltir ve context window'u daha çabuk doldurur. Yaygın bir çözüm, her chunk'ı başlığı, bölümü ve kaynak adresi gibi meta verilerle saklamak ya da küçük chunk'ları bulup modele çevrelerindeki daha büyük bölümü vermektir. Seçim genellikle birkaç boyutu gerçek sorularla deneyerek yapılır.
Önemli noktalar
- Chunking belgeleri, tek tek embedding'e çevrilip getirilen pasajlara böler.
- Chunk'lar genellikle birkaç yüz token uzunluğundadır ve çoğu zaman biraz örtüşür.
- Başlıklarda, paragraflarda ya da cümlelerde bölmek fikirleri bütün tutar.
- Küçük chunk'lar tam eşleşir; büyük olanlar daha fazla bağlam taşır.
Örnek
def chunk(words, size=200, overlap=40):
"""Split a list of words into chunks of `size` words that share `overlap` words."""
step = size - overlap
return [words[i:i + size] for i in range(0, max(len(words) - overlap, 1), step)]
words = ("lorem " * 1000).split() # 1,000 words
chunks = chunk(words)
print(len(chunks)) # 6
print([len(c) for c in chunks]) # [200, 200, 200, 200, 200, 200]Sık sorulan sorular
Hangi chunk boyutunu kullanmalıyım?
Tek bir doğru cevap yok; belgelere ve sorulara bağlı. Küçük bir örtüşmeyle birkaç yüz token yaygın bir başlangıç noktasıdır. İki ya da üç boyutu gerçek sorulardan oluşan bir set üzerinde deneyin ve getirdiği chunk'lar soruları en iyi cevaplayanı seçin.
Neden bütün belgeyi prompt'a koymuyoruz?
Uzun prompt'lar daha pahalıdır, daha yavaş çalışır ve context window'u aşabilir; ayrıca modeller uzun bir bağlamın başındaki ve sonundaki bilgiyi ortasındakinden daha iyi kullanma eğilimindedir. Yalnızca ilgili chunk'ları getirmek prompt'u kısa ve odaklı tutar.
İlgili sayfalar
- RAGYapay Zekâ ve Makine Öğrenmesi, s. 38RAG, bir LLM'in soru anında getirilen ilgili belgelere dayanarak yanıt vermesini sağlayan ve yanıtları güncel, özel verilere dayandıran bir tekniktir.
- EmbeddingYapay Zekâ ve Makine Öğrenmesi, s. 18Embedding, metin, görüntü ya da başka verilerin anlamını vektör denen bir sayı listesiyle temsil eden ve benzer öğeleri birbirine yakın konumlandıran yapıdır.
- Vektör VeritabanıYapay Zekâ ve Makine Öğrenmesi, s. 47Vektör veritabanı, embedding'leri saklayıp bir sorguya en benzer vektörleri hızla bulmak için tasarlanmış, anlamsal arama ve RAG'in dayandığı veritabanıdır.
- Bağlam PenceresiYapay Zekâ ve Makine Öğrenmesi, s. 5Bağlam penceresi, bir LLM'nin prompt, konuşma geçmişi ve kendi yanıtı dahil aynı anda dikkate alabildiği, token cinsinden en fazla metin miktarıdır.
- TokenYapay Zekâ ve Makine Öğrenmesi, s. 43Token, bir LLM'nin okuduğu ve ürettiği temel metin birimidir; genellikle bir sözcük, sözcük parçası ya da noktalama işaretidir ve sayısal bir kimliğe eşlenir.
- Anlamsal AramaYapay Zekâ ve Makine Öğrenmesi, s. 2Anlamsal arama, sonuçları birebir anahtar kelimelere değil anlama göre, genellikle sorgu ve belge embedding'lerini karşılaştırarak bulan arama tekniğidir.
Kaynaklar
- Karpukhin et al.: Dense Passage Retrieval for Open-Domain Question Answering (2020)arxiv.org(yeni sekmede açılır)
- Lewis et al.: Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (2020)arxiv.org(yeni sekmede açılır)
- Liu et al.: Lost in the Middle: How Language Models Use Long Contexts (2023)arxiv.org(yeni sekmede açılır)
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin