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.