Elektrik 1 Elektrik 2 Elektrik 3 Elektrik 4 Elektrik 5 Elektrik 6

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.