Chunk’lardan Vektör Veritabanına: Bilginin Aranabilir Hale Gelme Süreci
08.06.2025 10:45
Önceki yazımızda belgelerin chunk edilme sürecine odaklanmıştık. Bu yazıda ise, o chunk’ların vektör veritabanına nasıl eklendiğini ve doğal dilde sorgularla nasıl eşleştirildiğini adım adım açıklayacağız.
1. Embedding: Chunk’ları Sayılara Dönüştürmek
Chunk’lar metin tabanlı olduğu için doğrudan kıyaslanamaz. Bu nedenle her bir metin, bir vektör (sayısal gösterim) haline getirilir. Bu işleme embedding denir.
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("all-MiniLM-L6-v2")
chunk = "Madde 12 - Serbest tüketici limiti..."
vector = model.encode(chunk)
Bu işlem sonucunda, örneğin 384 boyutlu bir vektör elde edilir.
2. Vektör Veritabanına Kaydetmek (Pinecone Örneği)
Oluşturulan embedding vektörleri, hızlı arama ve benzerlik karşılaştırması için vektör veritabanına (örneğin Pinecone) eklenir.
import pinecone
pinecone.init(api_key="...", environment="gcp-starter")
index = pinecone.Index("mevzuat-index")
index.upsert([
{"id": "madde-12", "values": vector.tolist(), "metadata": {
"kaynak": "EPTHY",
"madde": "12"
}}
])
Bu örnekte metadata
ile madde numarası, kaynak yönetmelik gibi bilgiler de kayıt altına alınır.
3. Sorguyu Embedding’e Dönüştür ve Arama Yap
Kullanıcının yazdığı doğal dildeki sorgu da aynı embedding modelinden geçirilerek bir vektöre dönüştürülür. Ardından bu vektör ile veritabanındaki diğer vektörler karşılaştırılır.
query = "Serbest tüketici limiti nedir?"
query_vector = model.encode(query)
results = index.query(vector=query_vector.tolist(), top_k=3, include_metadata=True)
4. Sonuçları LLM’e Aktar ve Yanıt Oluştur
Elde edilen en benzer chunk’lar, büyük dil modeline prompt olarak verilir. LLM bu bağlamı kullanarak soruya yanıt üretir.
context = "\n\n".join([match["metadata"]["kaynak"] + ": " + match["id"] for match in results["matches"]])
prompt = f"""
Aşağıda bazı mevzuat parçaları verilmiştir. Sadece bu bilgilere dayanarak soruyu yanıtlayınız.
Soru: {query}
Belgeler: {context}
"""
# LLM çağrısı yapılır (örnek OpenAI)
Sonuç
Bu süreç, belgeleri sadece depolamaktan öteye taşıyarak onları aktif bilgi kaynaklarına dönüştürür. Chunk → Embedding → Vektör Veritabanı → Sorgu → Cevap zinciri sayesinde, kullanıcılar doğal dille yazdıkları sorulara doğrudan ve alakalı yanıtlar alabilir.
🔗 Devam Edecek
Bir sonraki blog yazımızda, embedding sürecinin nasıl hızlandırılabileceği ve büyük veri setleriyle nasıl çalışılabileceğini paylaşacağım.