Yakın geçmişe kadar bilgisayarlar, verimli ama kelimesi kelimesine çalışan kütüphaneciler gibiydi. “dev robot savaşları” diye aradığınızda yalnızca bu kelimelerin birebir geçtiği başlıkları bulurlardı. “Kaiju Mech Warfare” gibi kusursuz bir eşleşme gözden kaçardı. Bilgisayarlar kelimeleri tanır ama müziği ıskalarlardı—anlam, nüans ve bağlamdan yoksundular. Bu, yıllarca en iyi seçeneğimiz olan anahtar kelime araması dönemiydi.
Sonra bir devrim geldi. Yapay zeka, insan beyninden ilham alarak yeni bir öğrenme yolu geliştirdi. Kelimeleri ezberlemek yerine aralarındaki ilişkileri kavramaya başladı. “kral”ın “erkek”le, “kraliçe”nin “kadın”la ilişkili olduğu anlaşıldı. “mutlu”, “neşeli” ve “coşkulu”nun aynı duygusal bölgede yer aldığını, “kasvetli”nin ise tamamen farklı bir alanda bulunduğunu fark etti.
Yapay zeka bunu nasıl başardı? Bir anlam haritası oluşturarak.
Vektör Arama Nedir? Anlam Haritası
Her kavramın—bir kelime, bir cümle, bir görsel, bir şarkı—bir yıldız olduğu uçsuz bucaksız, çok boyutlu bir galaksi hayal edin. Bu galakside, benzer anlamlara sahip yıldızlar kümelenir; ilgisiz olanlar ise ışık yılları kadar uzakta yer alır.
Bir vektör gömme, bu galaksideki bir yıldızın koordinatıdır. Bir kavramı bu anlam haritasında tam olarak konumlandıran bir sayı listesidir (ör. [0.12, -0.45, 0.89, ...]).
Vektör arama, bu haritada gezinme yeteneğidir ve devrim niteliğindedir. “Öksüz bir çocuğun aslında bir büyücü olduğunu keşfettiği bir film” dediğinizde, artık bu kelimeleri birebir aramıyoruz. Bunun yerine:
En yakın komşu yıldızları (film özetlerimizi) konumlandırıyoruz.
En yakın yıldızlar, anlamsal olarak en benzer sonuçları temsil eder. Yapay zekâ böylece kelimesi kelimesine çalışan bir kütüphaneciden, ne demek istediğinizi gerçekten anlayan bilge bir uzmana evrildi.
Bu Neden Bu Kadar Önemli?
Anahtar kelimeler yerine anlamla arama, sektörler genelinde modern yapay zekâ uygulamalarını besler. Bu yetenek şunları mümkün kılar:
Netflix’in izleme geçmişinizle benzer “havalara” sahip, tanımadığınız filmleri önermesini.
Spotify’ın, türü ya da dönemi fark etmeksizin favorileriniz gibi hissettiren şarkılardan çalma listeleri oluşturmasını.
Sohbet botları ve LLM’lerin sorularınızın ardındaki niyeti kavrayıp bağlama duyarlı, ilgili yanıtlar sunmasını.
E-ticaret sitelerinin yüklediğiniz görsellere görsel olarak benzer ürünleri göstermesini.
Vektör arama, insan niyetiyle dijital veriyi birbirine bağlayarak bilgiyle etkileşimimizi kökten değiştirir. Bu teknoloji, dijital sistemleri daha az mekanik, daha sezgisel iş ortakları gibi hissettirir.
Öğrenelim: MongoDB ile İlk Vektör Arama Uygulamanızı Geliştirin
Aramaların yeni sınırına hoş geldiniz! MongoDB, Atlas’ta Vektör Aramayı tanıttı. Bu sayede vektör gömmeleri (metin, görsel veya ses gibi) doğrudan MongoDB içinde saklayıp sorgulayabilirsiniz—ayrı bir vektör veritabanına örneğin Pinecone ya da Weaviate’e ihtiyaç yok.
Bu eğitimde Python ve MongoDB Atlas kullanarak basit ama güçlü bir ayakkabı öneri motoru geliştireceğiz. Metni anlamlı sayısal temsillere (vektörlere) nasıl dönüştüreceğinizi ve ardından Atlas’ın yerleşik Vektör Aramasıyla benzer kurgulara sahip filmleri nasıl bulacağınızı öğreneceksiniz.
Neler Öğreneceksiniz
Nasıl bağlanılır: Python’un pymongo kitaplığı ile MongoDB Atlas kümesine güvenli şekilde.
Nasıl belge oluşturulur ve eklenir: vektör gömmeleri içeren belgeler.
Nasıl vektör gömmeleri üretilir: metinden sentence-transformers kütüphanesiyle.
Nasıl bir Vektör Arama indeksi oluşturulur: MongoDB Atlas arayüzünde.
Nasıl bir anlamsal arama sorgusu çalıştırılır: $vectorSearch aşama hattını kullanarak.
Ücretsiz bir küme oluşturun. Bir kullanıcı oluşturup kullanıcı adı ve parolayı kopyalayın.
Kullanıcıyı oluşturduktan sonra Bağlantı yöntemi seçin’e tıklayın. Aşağıdaki ilk ekranı göreceksiniz. Sürücüler’e tıklayıp ikinci ekrana gidin. Sürücü olarak Python’ı ve uygun sürümü seçin. Bağlantı dizesini kopyalayın.
Şuraya gidin: Database Deployments → Browse Collections’a tıklayın → Yeni bir veritabanı oluşturun:
Veritabanı adı: vectorDemo
Koleksiyon adı: items
Vektör Arama’yı etkinleştirin:
MongoDB Atlas arayüzünde Vector Search Indexes bölümüne gidin → items için yeni bir indeks oluşturun.
Aşağıdaki parçadaki <username>, <password> ve <cluster-url> yer tutucularını değiştirin.
from pymongo import MongoClient
# Replace with your Atlas connection string
uri ="mongodb+srv://<username>:<password>@<cluster-url>/vectorDemo?retryWrites=true&w=majority"
client = MongoClient(uri)
db = client["vectorDemo"]
collection = db["items"]print("Connected to MongoDB Atlas")# Clear existing
collection.delete_many({})print("Cleared collection.")Altyapı:
Adım 3: Python ile gömmeler üretin
Metni gömmelere dönüştürmek için SentenceTransformers kullanacağız.
from sentence_transformers import SentenceTransformer
# Choose model: higher-quality for search -> "sentence-transformers/all-mpnet-base-v2" (768-d)# If you need faster/smaller: "all-MiniLM-L6-v2" (384-d)
MODEL_NAME ="sentence-transformers/all-mpnet-base-v2"# MODEL_NAME = "all-MiniLM-L6-v2"# Note: if you use all-mpnet-base-v2, your Atlas vector index must use numDimensions: 768# If you use all-MiniLM-L6-v2, index numDimensions: 384
model = SentenceTransformer(MODEL_NAME)defembed_text(text:str):return model.encode(text).tolist()Altyapı:
Adım 4: Gömme içeren örnek belgeleri ekleyin
Bazı ürün açıklamalarını gömmeleriyle birlikte MongoDB’de saklayalım.
# Each product includes name, description, list of features, use_cases and tags.
products =[# Marathon / long-distance running (explicit!){"name":"MarathonPro 3000","description":"Designed specifically for marathon and ultra distance running: maximum cushioning, breathable knit upper, responsive midsole and engineered heel support for long-run comfort.","features":["marathon","long-distance","max cushioning","breathable","support"],"category":"shoes","use_cases":["marathon","long-distance running","road running"],"tags":["running","endurance","comfort"]},{"name":"Enduro LongRun","description":"Lightweight long-run trainer optimized for marathon pacing with added cushioning, stable platform, and enhanced forefoot energy return for hours of comfortable running.","features":["long-run","lightweight","energy return","cushioning"],"category":"shoes","use_cases":["marathon","road running"],"tags":["running","marathon","comfort"]},# Road running / neutral{"name":"Red Road Runner","description":"Neutral road running shoe for daily training: breathable mesh, moderate cushioning and responsive ride; suitable for tempo runs and long easy runs.","features":["road running","breathable","moderate cushioning"],"category":"shoes","use_cases":["training","road running","tempo runs"],"tags":["running","training"]},# Trail running (explicit trail){"name":"TrailMaster RidgeGrip","description":"Trail-running shoe with aggressive outsole, rock plate for protection, waterproof upper, designed for technical trails and rugged terrain.","features":["trail","high grip","rock plate","waterproof"],"category":"shoes","use_cases":["trail running","hiking","off-road"],"tags":["trail","outdoors"]},# Tennis & court{"name":"CourtPro Tennis","description":"Court shoe with lateral support, non-marking sole and reinforced toe; built for tennis footwork and short intense bursts, not for long-distance running.","features":["court","lateral support","non-marking sole"],"category":"shoes","use_cases":["tennis","court sports"],"tags":["tennis","sport"]},# Formal{"name":"Oxford Leather Formal","description":"Classic leather formal shoe for office and events: polished leather, sturdy sole, refined silhouette.","features":["formal","leather","office"],"category":"shoes","use_cases":["formal wear","office"],"tags":["formal","leather"]},# Hiking{"name":"Alpine Trek Boots","description":"High-ankle hiking boots with waterproof membrane, ankle support and durable lugged outsole for mountain treks.","features":["hiking","waterproof","ankle support","lugged outsole"],"category":"shoes","use_cases":["hiking","trekking","outdoor"],"tags":["outdoors","hiking"]},# Casual sneakers{"name":"Classic Canvas Sneaker","description":"Casual everyday canvas sneaker with rubber sole, comfortable fit for daily wear and walking.","features":["casual","canvas","everyday"],"category":"shoes","use_cases":["casual","walking"],"tags":["casual"]},# Cross-trainer{"name":"CrossFit Trainer","description":"Stable cross-trainer shoe engineered for gym workouts, short sprints, and lateral movements; flexible yet supportive.","features":["cross-train","stable","gym"],"category":"shoes","use_cases":["gym","cross-training"],"tags":["training","gym"]},# Cleats{"name":"Pro Soccer Cleats","description":"Low-profile football/soccer cleats with studded outsole; optimized for grip on grass and agility.","features":["cleats","studs","agility"],"category":"shoes","use_cases":["soccer","football"],"tags":["sports","cleats"]}]# ---------- Create 'canonical_text' to improve embedding quality for better scoring ----------for p in products:# join features and others into one rich text blob
features =", ".join(p["features"])
uses =", ".join(p["use_cases"])
tags =", ".join(p["tags"])
canonical =f"{p['name']}. {p['description']}. Features: {features}. Use cases: {uses}. Tags: {tags}."
p["canonical_text"]= canonical
# ---------- Embed canonical_text----------print("Embedding items...")for p in products:
p["embedding"]= embed_text(p["canonical_text"])# ---------- Insert into MongoDB ----------
collection.insert_many(products)Altyapı:
insert_many kullanarak veritabanımıza tek bir, verimli toplu yazma işlemi gerçekleştiriyoruz.
query_text ="25k long running best shoes"
query_embedding = embed_text(query_text)
pipeline =[{"$vectorSearch":{"index":"vector_index",# Use the vector search index you created"path":"embedding","queryVector": query_embedding,"numCandidates":100,"limit":3}},{"$project":{"name":1,"description":1,"score":{"$meta":"vectorSearchScore"}}}]
results = collection.aggregate(pipeline)print(f"\nSearch results for: '{query_text}'\n")for r in results:print(f"- {r['name']} (score: {r['score']:.4f})")Altyapı:
$vectorSearchaşama hattını çözümleme:
$vectorSearch: Çekirdek operatördür. queryVector’ımızı tüm belgelerde indekslenmiş plot_embedding alanına karşı verimli biçimde karşılaştırır.
$project: Bu aşama çıktıyı yeniden şekillendirir. name ve description alanlarını dahil eder, gürültülü _id ve diğer alanları hariç tutar ve en önemlisi skor alanını $meta: "vectorSearchScore" ile ekler. 0 ile 1 arasındaki bu skor, sonucun sorgumuza ne kadar benzer olduğunu gösterir.
Beklenen çıktı
Her şey doğru şekilde ayarlandıysa aşağıdakine benzer bir çıktı göreceksiniz:
Search results for:'25k long running best shoes'- MarathonPro 3000(score:0.7980)- Red Road Runner (score:0.7479)- Enduro LongRun (score:0.7389)Altyapı:
“MarathonPro 3000”ın zirvede yer aldığına dikkat edin—tam da beklediğimiz gibi.
Tebrikler! Sıfırdan bir vektör arama uygulaması geliştirmeyi başardınız. Bir veritabanına nasıl bağlanacağınızı, veri oluşturup doğrulamayı, vektör gömmeleri üretmeyi ve bilgiyi gerçekten akıllı bir şekilde bulmak için MongoDB Atlas’ın gücünden yararlanmayı öğrendiniz. Veri etkileşiminin geleceğine hoş geldiniz.
Sonuç
Bu eğitimde şunları başarıyla öğrendiniz:
MongoDB Atlas’a bağlanmak: Python ve pymongo ile; bu, veritabanı odaklı uygulamaların temelini oluşturur.
Gömme oluşturmak: yüksek kaliteli all-mpnet-base-v2 gibi modellerle gerçekçi bir ürün katalogundan yalnızca metin gömmeleri üretip bunları uygun normalizasyonla MongoDB’ye kaydetmek.
Zengin, yapılandırılmış bir veri kümesi oluşturmak: gömme alakalılığını artıran canonical_text (ad, açıklama, özellikler, kullanım örnekleri, etiketler) kullanarak.
Vektör benzerlik aramaları yapmak: doğal dil sorgularına dayalı olarak anlamsal açıdan benzer ürünleri bulmak için MongoDB’nin $vectorSearch toplulaştırma aşamasını kullanarak.
Sonraki Adımlar (Kendiniz Deneyin)
Kullanıcı yorumlarını saklayın ve bir anlamsal arama motoru oluşturun.
farklı benzerlik ölçütleriyle (dotProduct, euclidean) deney yapın.
SSS
canonical_text neden yalnızca ürün açıklamasından daha zengin?⌄
canonical_text, gömmeler için daha iyi bağlam sağlamak üzere özellikleri, kullanım örneklerini ve etiketleri içerir—modelin kullanıcı niyetini vektör aramada daha doğru yakalamasına yardımcı olur.
Neden MiniLM veya CLIP yerine all-mpnet-base-v2’yi seçtim?⌄
all-mpnet-base-v2 (768 boyut) hafif (384 boyut) modellere kıyasla yalnızca metin benzerliği için daha güçlü anlamsal temsiller sunar. CLIP çoklu ortam görevlerinde üstün olsa da, yalnızca metin içeren nüanslı sorgularda daha az isabetlidir.
Bu yaklaşım büyük veri kümelerine ölçeklenebilir mi?⌄
Evet! MongoDB Atlas milyonlarca belge içeren vektör indekslerini destekler. Büyük ölçek için, indeks parametrelerini (ör. numCandidates) ayarlamak ve yeniden sıralamayı yalnızca ilk N sonuçta uygulamak performansı güçlü tutar.
Sırada çoklu ortam (metin + görsel) arama istersem ne olur?⌄
Çoklu ortam (CLIP veya açık kaynak alternatifler gibi) bir gömme modeline yükseltme yapabilir, gömmeleri normalize edip benzer şekilde saklayabilir ve ardından karma medya araması için aynı vektör arama + yeniden sıralama stratejisini kullanabilirsiniz.
Hangi model boyutunu kullanacağımı nasıl anlarım?⌄
Daha yüksek boyutlar (ör. 512, 768, 1024, 2056) genellikle daha iyi anlamsal yakalama sağlar ancak daha fazla depolama ve işlem gerektirir. Hız veya denemeler için küçük modelleri (384) kullanın, hassasiyet önemliyse 768’e yükseltin.
Vektör aramayı tam metin aramayla birleştirebilir miyim?⌄
Kesinlikle. MongoDB Atlas, $search aşamasını compound sorgularla—BM25 tam metin filtrelerini knnBeta veya $vectorSearch ile harmanlayarak—birleştirmenize olanak tanır; zengin hibrit arama deneyimleri sunar.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Yakın geçmişe kadar bilgisayarlar, verimli ama kelimesi kelimesine çalışan kütüphaneciler gibiydi. “dev robot savaşları” diye aradığınızda yalnızca bu kelimelerin birebir geçtiği başlıkları bulurlardı. “Kaiju Mech Warfare” gibi kusursuz bir eşleşme gözden kaçardı. Bilgisayarlar kelimeleri tanır ama müziği ıskalarlardı—anlam, nüans ve bağlamdan yoksundular. Bu, yıllarca en iyi seçeneğimiz olan anahtar kelime araması dönemiydi.
Sonra bir devrim geldi. Yapay zeka, insan beyninden ilham alarak yeni bir öğrenme yolu geliştirdi. Kelimeleri ezberlemek yerine aralarındaki ilişkileri kavramaya başladı. “kral”ın “erkek”le, “kraliçe”nin “kadın”la ilişkili olduğu anlaşıldı. “mutlu”, “neşeli” ve “coşkulu”nun aynı duygusal bölgede yer aldığını, “kasvetli”nin ise tamamen farklı bir alanda bulunduğunu fark etti.
Yapay zeka bunu nasıl başardı? Bir anlam haritası oluşturarak.
Vektör Arama Nedir? Anlam Haritası
Her kavramın—bir kelime, bir cümle, bir görsel, bir şarkı—bir yıldız olduğu uçsuz bucaksız, çok boyutlu bir galaksi hayal edin. Bu galakside, benzer anlamlara sahip yıldızlar kümelenir; ilgisiz olanlar ise ışık yılları kadar uzakta yer alır.
Bir vektör gömme, bu galaksideki bir yıldızın koordinatıdır. Bir kavramı bu anlam haritasında tam olarak konumlandıran bir sayı listesidir (ör. [0.12, -0.45, 0.89, ...]).
Vektör arama, bu haritada gezinme yeteneğidir ve devrim niteliğindedir. “Öksüz bir çocuğun aslında bir büyücü olduğunu keşfettiği bir film” dediğinizde, artık bu kelimeleri birebir aramıyoruz. Bunun yerine:
En yakın yıldızlar, anlamsal olarak en benzer sonuçları temsil eder. Yapay zekâ böylece kelimesi kelimesine çalışan bir kütüphaneciden, ne demek istediğinizi gerçekten anlayan bilge bir uzmana evrildi.
Bu Neden Bu Kadar Önemli?
Anahtar kelimeler yerine anlamla arama, sektörler genelinde modern yapay zekâ uygulamalarını besler. Bu yetenek şunları mümkün kılar:
Vektör arama, insan niyetiyle dijital veriyi birbirine bağlayarak bilgiyle etkileşimimizi kökten değiştirir. Bu teknoloji, dijital sistemleri daha az mekanik, daha sezgisel iş ortakları gibi hissettirir.
Öğrenelim: MongoDB ile İlk Vektör Arama Uygulamanızı Geliştirin
Aramaların yeni sınırına hoş geldiniz! MongoDB, Atlas’ta Vektör Aramayı tanıttı. Bu sayede vektör gömmeleri (metin, görsel veya ses gibi) doğrudan MongoDB içinde saklayıp sorgulayabilirsiniz—ayrı bir vektör veritabanına örneğin Pinecone ya da Weaviate’e ihtiyaç yok.
Bu eğitimde Python ve MongoDB Atlas kullanarak basit ama güçlü bir ayakkabı öneri motoru geliştireceğiz. Metni anlamlı sayısal temsillere (vektörlere) nasıl dönüştüreceğinizi ve ardından Atlas’ın yerleşik Vektör Aramasıyla benzer kurgulara sahip filmleri nasıl bulacağınızı öğreneceksiniz.
Neler Öğreneceksiniz
Önkoşullar
Adım 1: Bir MongoDB Atlas kümesi oluşturun
vectorDemoitemsitemsiçin yeni bir indeks oluşturun.Not: 768, sentence-transformers modeliyle kullanacağımız gömme boyutudur.
Indeks tanımını anlama:
"type": "vector": MongoDB Atlas’a bunun bir vektör indeksi olduğunu bildirir."path": "embedding": Kritik olarak, belgelerimizde vektörlerin bulunduğu alana işaret eder."numDimensions": 768: Bu değer, modelimizin ürettiği vektörlerin boyutuyla mutlaka eşleşmelidir."similarity": "cosine": Vektörlerin “yakınlığını” ölçmek için kullanılan algoritma. Metin tabanlı benzerlik için mükemmeldir.Adım 2: Python’ı MongoDB Atlas’a bağlayın
MongoDB Atlas bağlantı dizenizi alın:
<username>,<password>ve<cluster-url>yer tutucularını değiştirin.Adım 3: Python ile gömmeler üretin
Metni gömmelere dönüştürmek için SentenceTransformers kullanacağız.
Adım 4: Gömme içeren örnek belgeleri ekleyin
Bazı ürün açıklamalarını gömmeleriyle birlikte MongoDB’de saklayalım.
insert_many kullanarak veritabanımıza tek bir, verimli toplu yazma işlemi gerçekleştiriyoruz.
Adım 5: İlk vektör aramanızı gerçekleştirin
Şimdi en heyecanlı son adıma geldik! MongoDB’nin toplulaştırma (aggregation) çerçevesini ve
$vectorSearchoperatörünü kullanarak en iyi ayakkabı sorgusunu bulacağız.$vectorSearch
aşama hattınıçözümleme:$vectorSearch: Çekirdek operatördür. queryVector’ımızı tüm belgelerde indekslenmişplot_embeddingalanına karşı verimli biçimde karşılaştırır.$project: Bu aşama çıktıyı yeniden şekillendirir.namevedescriptionalanlarını dahil eder,gürültülü_idve diğer alanları hariç tutar ve en önemlisi skor alanını$meta: "vectorSearchScore"ile ekler. 0 ile 1 arasındaki bu skor, sonucun sorgumuza ne kadar benzer olduğunu gösterir.Beklenen çıktı
Her şey doğru şekilde ayarlandıysa aşağıdakine benzer bir çıktı göreceksiniz:
“MarathonPro 3000”ın zirvede yer aldığına dikkat edin—tam da beklediğimiz gibi.
Tebrikler! Sıfırdan bir vektör arama uygulaması geliştirmeyi başardınız. Bir veritabanına nasıl bağlanacağınızı, veri oluşturup doğrulamayı, vektör gömmeleri üretmeyi ve bilgiyi gerçekten akıllı bir şekilde bulmak için MongoDB Atlas’ın gücünden yararlanmayı öğrendiniz. Veri etkileşiminin geleceğine hoş geldiniz.
Sonuç
Bu eğitimde şunları başarıyla öğrendiniz:
Sonraki Adımlar (Kendiniz Deneyin)
farklı benzerlik ölçütleriyle (
dotProduct, euclidean) deney yapın.