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

Embedding Sürecini Hızlandırmak: Büyük Veri Setleriyle Etkili Çalışma Yöntemleri

08.06.2025 10:46


Önceki blog yazılarımızda chunk oluşturma ve vektör veritabanına aktarma

1. Embedding Modelini Yerel Olarak Kullanın

API tabanlı embedding (örn. OpenAI, HuggingFace API) yüksek doğruluk sunsa da, büyük veri setlerinde maliyetli ve yavaş


from sentence_transformers import SentenceTransformer

model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
embeddings = model.encode(list_of_chunks, batch_size=32, show_progress_bar=True)

Yerel çalıştırmada hem hız kontrolünüz olur, hem de eş zamanlı işleme yapabilirsiniz.

2. Batch İşleme Kullanın

Tek tek embedding yerine toplu işleme (batch encoding) kullanmak, GPU ve CPU’yu daha verimli kullanmanızı sağlar.


# Doğrudan list yerine batch olarak çalış
embeddings = model.encode(
    chunks,
    batch_size=64,
    show_progress_bar=True,
    normalize_embeddings=True
)

3. GPU Kullanın (Varsa)

Hugging Face modelleri otomatik olarak CUDA desteği ile çalışabilir.


import torch
device = "cuda" if torch.cuda.is_available() else "cpu"

model = SentenceTransformer("all-MiniLM-L6-v2", device=device)

Orta seviye bir GPU bile embedding süresini 10 kata kadar kısaltabilir.

4. Çok Büyük Dosyalar için Parça Parça Embedding

Örneğin 1 milyon satırlık bir CSV dosyanız varsa:


import pandas as pd

reader = pd.read_csv("veri.csv", chunksize=1000)
for chunk in reader:
    embeddings = model.encode(chunk["text"].tolist(), batch_size=32)
    # Kaydet → veritabanına, dosyaya veya Pinecone'a

5. Çoklu İş Parçacığı (Multiprocessing) veya Dask ile Dağıtım

Python’un concurrent.futures, joblib ya da dask gibi araçlarıyla embedding işlemini paralel yürütebilirsiniz.


from joblib import Parallel, delayed

results = Parallel(n_jobs=4)(
    delayed(model.encode)(text) for text in chunk_list
)

6. Embed Edilmiş Veriyi Tekrar Kullanın (Cache)

Eğer veri güncellenmiyorsa, embedding sonuçlarını JSON, pickle veya SQLite formatında kaydedip tekrar kullanabilirsiniz.


import pickle

with open("embeddings.pkl", "wb") as f:
    pickle.dump(embeddings, f)

Sonuç

Büyük veri setleriyle çalışırken işlem süresini kısaltmak, sadece sistem kaynaklarını değil, maliyet ve kullanıcı deneyimini de doğrudan etkiler. Bu yazıda paylaştığım yöntemler sayesinde:

  • Embedding süresini minimize edebilir,
  • Donanımınızı daha verimli kullanabilir,
  • Günlük veya saatlik güncellemeleri mümkün kılabilirsiniz.

🔗 Devam Edecek

Bir sonraki yazımızda bu embedding’lerin güncellenmesi, silinmesi ve versiyon yönetimi gibi **dinamik veri senkronizasyonu** konularına değineceğim.