Akıllı uygulamalar geliştirmek için MongoDB'nin Vektör Aramasını nasıl kurup kullanacağınızı öğrenin. Bu pratik rehber, vektör indekslemeyi, sorgu en iyi uygulamalarını ve gerçek dünya örneklerini kapsar.
Vektör indeksleme, modern uygulamalar geliştirmek için güçlü bir araç haline geldi. Yüksek boyutlu veriler üzerinde hızlı ve verimli benzerlik aramaları yapmanıza olanak tanır; bu tür veriler sıklıkla vektör gömlemeleri olarak anılır. Bu yetenek artık MongoDB'ye sorunsuz bir şekilde entegre edildi ve geliştiricilerin doğrudan veritabanları içinde sofistike özellikler oluşturmasını sağlıyor.
Bu makale, MongoDB'de vektör indekslemeyi kurma ve kullanma konusunda pratik bir rehberdir. İlk indeksinizi oluşturmaktan karmaşık sorgular çalıştırmaya kadar süreci adım adım ele alacağız. Ayrıca en iyi uygulamaları öğrenecek ve bir e-ticaret mağazası için ürün öneri sistemi kurmaya yönelik gerçek bir örneği inceleyeceksiniz.
Vektör İndeksleme Nedir?
Özünde, vektör indeksleme benzerlik aramalarını hızlandırmak için vektör gömlemelerini düzenleme tekniğidir. Sayısal değerler (sayılar veya dizgeler gibi) üzerinde çalışan geleneksel indekslerin aksine, bir vektör indeksi çok boyutlu bir uzayda "komşu" vektörleri bulmak için optimize edilmiştir.
Vektör gömlemeleri; metin, görseller ve ses dahil karmaşık verilerin sayısal temsilleridir. Örneğin, bir ürün açıklaması bir vektöre dönüştürülebilir ve benzer ürünler, uzayda birbirine daha yakın vektörlere sahip olur. Bu yakınlık, aşağıdakiler gibi güçlü uygulamalara olanak tanır:
Anlamsal arama: Sadece anahtar kelime eşleşmeleriyle değil, sorgunun anlamına göre ürün bulma.
Öneri sistemleri: Kullanıcıların tercihleri doğrultusunda ürün veya içerik önerme.
Görüntü tanıma: Büyük bir veritabanından benzer görselleri belirleme.
MongoDB'de vektör indekslemeyi kurma
Başlamak için bir MongoDB Atlas kümesine ihtiyacınız olacak. Vektör arama, bulut tabanlı bir özelliktir. Bu özelliği MongoDB Atlas'ta veya ücretsiz Community edition üzerinde deneyebilirsiniz. Bu makalede MongoDB Atlas'ı kullanacağız.
Adım 1: Bir MongoDB Atlas kümesi oluşturun
MongoDB Atlas'ta yeni bir küme oluşturun. Ücretsiz M0 katmanı test amaçları için yeterlidir.
Adım 2: Bir koleksiyon oluşturun ve veri ekleyin
Önce kümenize MongoDB Shell (mongosh) veya tercih ettiğiniz sürücüyle bağlanın. Ardından products adında yeni bir koleksiyon oluşturun ve bir vektör alanı içeren dökümanlar ekleyin. Her döküman bir ürünü temsil etmeli ve ürünün vektör gösterimini tutacak bir embedding alanı içermelidir.
Aşağıda, verinin nasıl görünebileceğini göstermek için rastgele üretilmiş vektörlere sahip üç farklı ürün dökümanı içeren daha kapsamlı bir örnek bulunmaktadır. Gerçek bir senaryoda, bunları bir yapay zeka modeli tarafından oluşturulan gömlemelerle değiştirirsiniz.
db.products.insertMany([
{
"name": "Wireless Noise-Canceling Headphones",
"category": "Electronics",
"description": "Premium over-ear headphones with active noise cancellation and a 30-hour battery life.",
"price": 249.99,
"embedding": [0.012, 0.054, 0.089, -0.031, 0.067, 0.021, -0.045, 0.098, 0.011, -0.076, 0.033, -0.015, -0.087, 0.059, 0.009, 0.042]
},
{
"name": "Smart Coffee Maker",
"category": "Home Goods",
"description": "Programmable coffee machine that can be controlled from your smartphone. Brews up to 12 cups.",
"price": 129.99,
"embedding": [0.056, 0.023, 0.011, 0.078, -0.029, 0.041, 0.087, -0.019, 0.065, 0.002, -0.093, 0.018, 0.057, -0.041, 0.022, 0.064]
},
{
"name": "Ultra-light Backpack",
"category": "Travel",
"description": "Durable and lightweight backpack with multiple compartments, perfect for hiking or daily commutes.",
"price": 79.99,
"embedding": [-0.072, 0.034, 0.019, 0.068, -0.055, 0.081, 0.004, -0.025, 0.039, 0.016, -0.044, 0.062, 0.008, 0.071, -0.013, 0.053]
}
]);Altyapı:
Her döküman bir name, category, description ve price alanlarının yanı sıra kritik öneme sahip embedding alanını içerir. Embedding, ürün açıklamasının anlamsal karşılığını temsil eden sabit boyutlu bir sayı dizisidir. Bu dizinin boyutu yani boyutsallık, gömlemeleri oluşturan modele bağlıdır. Bu örnekte boyut sayısı 128'dir.
Bu veri, anlamsal arama ve ürün önerilerini etkinleştirmek için üzerine vektör indeksimizi kuracağımız veridir.
Adım 3: Bir vektör indeksi oluşturun
Gömlemeleri içeren verileri bir koleksiyona aldıktan sonra sıradaki adım bir vektör indeksi oluşturmaktır. Bu indeks, hızlı ve verimli benzerlik aramalarını etkinleştirmek için kritik öneme sahiptir. Aşağıdaki komut, createSearchIndex kullanarak embedding alanı üzerinde bir vektör indeksi oluşturur.
Indeks yapılandırması, definition nesnesinin fields dizisinde tanımlanır. Bu yapı, MongoDB Atlas'ın vektörlerinizi yüksek hızda getirme için nasıl düzenlediğinin planıdır.
Vektör indekslemenin temel parametreleri şunlardır:
path: Dökümanlarınızda vektör dizisini tutan alanın tam adını belirtir; bu örnekte "embedding" alanıdır.
numDimensions: En kritik parametredir. Gömleme modelinizin ürettiği vektör dizisindeki eleman sayısıyla tam olarak eşleşmelidir (ör. 128, 768, 1536).
similarity: Arama sırasında iki vektör arasındaki "yakınlığı" hesaplamak için kullanılan matematiksel metriği tanımlar.
cosine genellikle anlamsal arama için önerilir; vektörler arasındaki açıyı ölçerek anlamsal yönü öne çıkarır.
Diğer seçenekler arasında euclidean (doğrusal mesafe) ve dotProduct bulunur.
İsteğe bağlı performans parametreleri
Gelişmiş performans ayarlaması için, MongoDB Atlas depolama ve belleği optimize etmek üzere isteğe bağlı parametreler belirtmenize izin verir:
quantization: Vektörlerinizi sıkıştırmak için kullanılır; bu da indeks boyutunu ve bellek ayak izini önemli ölçüde azaltır.
scalar veya binary belirtilerek vektörler kuantize edilebilir; bu da az miktarda geri çağırma kaybını, depolama ve hızda büyük kazanımlarla değiş tokuş eder.
Vektör Arama Sorguları Gerçekleştirme
Indeks oluşturulduktan sonra benzerlik sorguları yapmak için $vectorSearch aşamasını kullanabilirsiniz.
Hadi bir sorgu vektörüne en benzer ürünleri bulalım. Bu sorgu genellikle bir kullanıcının arama girdisinden üretilir.
// A sample query vector, generated from a user's search for "wireless audio device"
const queryVector = [0.11, 0.22, 0.33, ...];
db.products.aggregate([
{
"$vectorSearch": {
"queryVector": queryVector,
"path": "embedding",
"numCandidates": 100, // Number of documents to scan
"limit": 5 // Number of results to return
}
},
{
"$project": {
"name": 1,
"description": 1,
"_id": 0
}
}
]);Altyapı:
queryVector: Aradığınız vektör.
path: Vektör gömlemelerini içeren alanın adı.
numCandidates: Indekste taranacak aday döküman sayısı. Daha yüksek değer doğruluğu artırır, ancak gecikmeyi yükseltir.
limit: Döndürülecek en iyi sonuç sayısı.
$project aşaması isteğe bağlıdır ancak çıktıyı şekillendirmek ve sonuçtan vektör verisini hariç tutmak için kullanışlıdır.
Vektör İndeksleme için En İyi Uygulamalar
Vektör indeksinizi en iyi performans için ayarlarken, doğruluk ve hız arasında denge kurmanız gerekir. Esas olan, indeksin parametrelerini özgül veri kümeniz ve performans hedeflerinize göre ayarlamaktır.
Doğru benzerlik metriğini seçme
Metriğin seçimi temeldir; çünkü iki vektörün ne kadar "benzer" olduğunu tanımlar. Alanlar hakkında daha fazla bilgi edinmek için MongoDB dokümanlarına başvurabilirsiniz.
cosine: Özellikle metinlerle anlamsal benzerlik için en iyisidir. Vektörlerin uzunluğunu yok sayarak aralarındaki açıyı ölçer. Bu, vektör uzunluğunun anlamlı olmadığı modeller için kritiktir.
euclidean: İki vektör arasındaki doğrusal mesafeyi ölçer. Vektörlerin büyüklüğü (uzunluğu) anlam açısından önemliyse kullanın; örneğin daha büyük bir değerin daha güçlü bir özelliği ifade ettiği veri türlerinde.
dotProduct: İki vektörün noktasal çarpımını hesaplar. Bu metrik sıklıkla öneri sistemlerinde kullanılır. Vektör gömlemeleri uzunluğu 1 olacak şekilde normalize edildiğinde, noktasal çarpım işlevsel olarak kosinüs benzerliğine eşdeğerdir.
Gömleme boyutlarını yönetme
dimensions parametresi kritik önemdedir ve gömleme modelinizin çıktısıyla tam olarak eşleşmelidir. Yaygın bir hata, modelin çıktısıyla uyuşmayan bir sayı seçmektir. Daha yüksek boyut sayısına sahip bir model daha fazla ayrıntı yakalayabilir; ancak daha büyük bir indeks ve potansiyel olarak daha yavaş sorgularla sonuçlanır. Modelinizin boyutsallığını doğrulamak için her zaman dokümantasyonunu kontrol edin (örneğin OpenAI'nin text-embedding-ada-002 modeli 1536 boyut üretir).
İndeks ayarı
numCandidates ve numLists parametreleri, hız ve doğruluk arasında denge kurmak için önemlidir. İyi bir başlama noktası, düşük bir numCandidates değeriyle başlayıp, tatmin edici doğruluğa ulaşana kadar artırmaktır. Veri kümeniz için en uygun noktayı bulmak amacıyla ivf indeksleri için farklı numLists değerleriyle de deneyebilirsiniz.
Örnek kullanım durumu: Basit bir öneri sistemi oluşturma
Bu kavramları pratik bir örneğe uygulayalım: bir e-ticaret ürün öneri sistemi.
Adım 1: Gömlemelerle birlikte ürün verilerini depolayın
Önce ürün adlarını, kategorilerini ve her biri için bir vektör gömlemesini saklayacağız. Gömleme, ürünün açıklamasından veya özelliklerinden üretilebilir.
Adım 2: embedding alanı üzerinde bir vektör indeksi oluşturun
db.products.createSearchIndex({
"name": "vector_index",
"definition": {
"mappings": {
"fields": [
{
"type": "vector",
"path": "embedding", // The field containing the vectors
"numDimensions": 128, // The correct field name is 'numDimensions'
"similarity": "cosine" // The correct field name is 'similarity'
// Index algorithm (like HNSW) is managed automatically by Atlas
}
]
}
}
});Altyapı:
Adım 3: Benzer ürünleri sorgulayın
Şimdi, Smart Speaker'a benzer ürünleri bulalım. Sorgu vektörü olarak Smart Speaker'ın gömlemesini kullanacağız.
Bu sorgu, vektör gömlemeleri Smart Speaker'ın gömlemesine en yakın olan ilk üç ürünü döndürerek, Wireless Earbuds gibi benzer öğeleri etkili biçimde önerecektir.
Sonuç
MongoDB'nin vektör arama yetenekleri, akıllı ve kişiselleştirilmiş uygulamalar geliştirmek için yeni olanakların kilidini açıyor. Vektör indekslemeyi doğrudan veritabanına entegre ederek MongoDB, mimariyi basitleştirir; veriyi yönetmeyi ve hızlı benzerlik aramaları yapmayı kolaylaştırır.
Vektör aramanın gücüyle basit anahtar kelime eşleşmelerinin ötesine geçebilir ve verinizin bağlamını ve anlamını kavrayan özellikler oluşturabilirsiniz. MongoDB Atlas'ın ücretsiz katmanını denemeye başlamanızı ve vektör indekslemenin uygulamalarınızı nasıl geliştirebileceğini keşfetmenizi öneririz.
SSS
Vektör gömlemesi nedir ve vektör arama için neden gereklidir?⌄
Bir vektör gömlemesi, metin veya görsel gibi verilerin sayısal temsilidir. Vektör arama için gereklidir; çünkü veritabanının, öğelerin vektörleri arasındaki mesafeyi hesaplayarak anlamsal benzerliği ölçmesine olanak tanır ve basit anahtar kelime eşleşmelerinin ötesine geçer.
Vektör Aramayı kullanmak için belirli bir MongoDB sürümüne ihtiyaç var mı?⌄
Evet. Vektör arama, MongoDB'nin bulut barındırmalı sürümü olan MongoDB Atlas'ın entegre bir özelliğidir. Veritabanının community veya şirket içi sürümlerinde mevcut değildir.
Vektör gömlemelerini kendim mi üretmeliyim?⌄
Evet, verilerinize ait vektör gömlemelerini MongoDB'ye kaydedip bir vektör indeksi oluşturmadan önce kendiniz üretmeniz gerekir. MongoDB bu gömlemeleri sizin için üretmez. Genellikle metin, görsel veya diğer verilerinizi sayısal vektörlere dönüştürmek için OpenAI, Hugging Face veya Google AI gibi bir platformdan üçüncü taraf bir hizmet veya önceden eğitilmiş bir model kullanırsınız.
Vektör aramayı diğer MongoDB sorgularıyla birleştirebilir miyim?⌄
Evet, yapabilirsiniz. Vektör arama bir toplulaştırma aşamasıdır ($vectorSearch); bu da onu daha büyük bir MongoDB toplulaştırma hattı içinde kullanabileceğiniz anlamına gelir. Bu sayede filtreleme, sıralama ve veri zenginleştirme gibi işlemleri tek bir işlemde gerçekleştiren sofistike sorgular oluşturmak için $match, $project, $limit ve $lookup gibi güçlü aşamalarla vektör aramayı birleştirebilirsiniz. Bu yetenek hibrit arama olarak bilinir ve gerçek dünya uygulamaları için esastır.
IVF ve HNSW indeks türleri arasındaki fark nedir?⌄
Hem IVF hem de HNSW, yaklaşık en yakın komşu (ANN) araması için kullanılan algoritmalardır. Temel fark, veriyi nasıl yapılandırdıklarında yatar.
Karen, ölçeklenebilir veri platformları kurma tutkusu olan bir Veri Mühendisidir. Terraform ile altyapı otomasyonu konusunda deneyime sahiptir ve öğrendiklerini blog yazıları ve eğitimlerde paylaşmaktan heyecan duyar. Karen bir topluluk geliştiricisidir ve veri profesyonelleri arasında bağlantılar kurmaya tutkuyla bağlıdır.
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!
Vektör indeksleme, modern uygulamalar geliştirmek için güçlü bir araç haline geldi. Yüksek boyutlu veriler üzerinde hızlı ve verimli benzerlik aramaları yapmanıza olanak tanır; bu tür veriler sıklıkla vektör gömlemeleri olarak anılır. Bu yetenek artık MongoDB'ye sorunsuz bir şekilde entegre edildi ve geliştiricilerin doğrudan veritabanları içinde sofistike özellikler oluşturmasını sağlıyor.
Bu makale, MongoDB'de vektör indekslemeyi kurma ve kullanma konusunda pratik bir rehberdir. İlk indeksinizi oluşturmaktan karmaşık sorgular çalıştırmaya kadar süreci adım adım ele alacağız. Ayrıca en iyi uygulamaları öğrenecek ve bir e-ticaret mağazası için ürün öneri sistemi kurmaya yönelik gerçek bir örneği inceleyeceksiniz.
Vektör İndeksleme Nedir?
Özünde, vektör indeksleme benzerlik aramalarını hızlandırmak için vektör gömlemelerini düzenleme tekniğidir. Sayısal değerler (sayılar veya dizgeler gibi) üzerinde çalışan geleneksel indekslerin aksine, bir vektör indeksi çok boyutlu bir uzayda "komşu" vektörleri bulmak için optimize edilmiştir.
Vektör gömlemeleri; metin, görseller ve ses dahil karmaşık verilerin sayısal temsilleridir. Örneğin, bir ürün açıklaması bir vektöre dönüştürülebilir ve benzer ürünler, uzayda birbirine daha yakın vektörlere sahip olur. Bu yakınlık, aşağıdakiler gibi güçlü uygulamalara olanak tanır:
MongoDB'de vektör indekslemeyi kurma
Başlamak için bir MongoDB Atlas kümesine ihtiyacınız olacak. Vektör arama, bulut tabanlı bir özelliktir. Bu özelliği MongoDB Atlas'ta veya ücretsiz Community edition üzerinde deneyebilirsiniz. Bu makalede MongoDB Atlas'ı kullanacağız.
Adım 1: Bir MongoDB Atlas kümesi oluşturun
MongoDB Atlas'ta yeni bir küme oluşturun. Ücretsiz M0 katmanı test amaçları için yeterlidir.
Adım 2: Bir koleksiyon oluşturun ve veri ekleyin
Önce kümenize MongoDB Shell (mongosh) veya tercih ettiğiniz sürücüyle bağlanın. Ardından products adında yeni bir koleksiyon oluşturun ve bir vektör alanı içeren dökümanlar ekleyin. Her döküman bir ürünü temsil etmeli ve ürünün vektör gösterimini tutacak bir embedding alanı içermelidir.
Aşağıda, verinin nasıl görünebileceğini göstermek için rastgele üretilmiş vektörlere sahip üç farklı ürün dökümanı içeren daha kapsamlı bir örnek bulunmaktadır. Gerçek bir senaryoda, bunları bir yapay zeka modeli tarafından oluşturulan gömlemelerle değiştirirsiniz.
Her döküman bir name, category, description ve price alanlarının yanı sıra kritik öneme sahip embedding alanını içerir. Embedding, ürün açıklamasının anlamsal karşılığını temsil eden sabit boyutlu bir sayı dizisidir. Bu dizinin boyutu yani boyutsallık, gömlemeleri oluşturan modele bağlıdır. Bu örnekte boyut sayısı 128'dir.
Bu veri, anlamsal arama ve ürün önerilerini etkinleştirmek için üzerine vektör indeksimizi kuracağımız veridir.
Adım 3: Bir vektör indeksi oluşturun
Gömlemeleri içeren verileri bir koleksiyona aldıktan sonra sıradaki adım bir vektör indeksi oluşturmaktır. Bu indeks, hızlı ve verimli benzerlik aramalarını etkinleştirmek için kritik öneme sahiptir. Aşağıdaki komut, createSearchIndex kullanarak embedding alanı üzerinde bir vektör indeksi oluşturur.
Yapılandırmayı anlama
Indeks yapılandırması, definition nesnesinin fields dizisinde tanımlanır. Bu yapı, MongoDB Atlas'ın vektörlerinizi yüksek hızda getirme için nasıl düzenlediğinin planıdır.
Vektör indekslemenin temel parametreleri şunlardır:
İsteğe bağlı performans parametreleri
Gelişmiş performans ayarlaması için, MongoDB Atlas depolama ve belleği optimize etmek üzere isteğe bağlı parametreler belirtmenize izin verir:
Vektör Arama Sorguları Gerçekleştirme
Indeks oluşturulduktan sonra benzerlik sorguları yapmak için $vectorSearch aşamasını kullanabilirsiniz.
Hadi bir sorgu vektörüne en benzer ürünleri bulalım. Bu sorgu genellikle bir kullanıcının arama girdisinden üretilir.
$project aşaması isteğe bağlıdır ancak çıktıyı şekillendirmek ve sonuçtan vektör verisini hariç tutmak için kullanışlıdır.
Vektör İndeksleme için En İyi Uygulamalar
Vektör indeksinizi en iyi performans için ayarlarken, doğruluk ve hız arasında denge kurmanız gerekir. Esas olan, indeksin parametrelerini özgül veri kümeniz ve performans hedeflerinize göre ayarlamaktır.
Doğru benzerlik metriğini seçme
Metriğin seçimi temeldir; çünkü iki vektörün ne kadar "benzer" olduğunu tanımlar. Alanlar hakkında daha fazla bilgi edinmek için MongoDB dokümanlarına başvurabilirsiniz.
Gömleme boyutlarını yönetme
dimensions parametresi kritik önemdedir ve gömleme modelinizin çıktısıyla tam olarak eşleşmelidir. Yaygın bir hata, modelin çıktısıyla uyuşmayan bir sayı seçmektir. Daha yüksek boyut sayısına sahip bir model daha fazla ayrıntı yakalayabilir; ancak daha büyük bir indeks ve potansiyel olarak daha yavaş sorgularla sonuçlanır. Modelinizin boyutsallığını doğrulamak için her zaman dokümantasyonunu kontrol edin (örneğin OpenAI'nin text-embedding-ada-002 modeli 1536 boyut üretir).
İndeks ayarı
numCandidates ve numLists parametreleri, hız ve doğruluk arasında denge kurmak için önemlidir. İyi bir başlama noktası, düşük bir numCandidates değeriyle başlayıp, tatmin edici doğruluğa ulaşana kadar artırmaktır. Veri kümeniz için en uygun noktayı bulmak amacıyla ivf indeksleri için farklı numLists değerleriyle de deneyebilirsiniz.
Örnek kullanım durumu: Basit bir öneri sistemi oluşturma
Bu kavramları pratik bir örneğe uygulayalım: bir e-ticaret ürün öneri sistemi.
Adım 1: Gömlemelerle birlikte ürün verilerini depolayın
Önce ürün adlarını, kategorilerini ve her biri için bir vektör gömlemesini saklayacağız. Gömleme, ürünün açıklamasından veya özelliklerinden üretilebilir.
Adım 2: embedding alanı üzerinde bir vektör indeksi oluşturun
Adım 3: Benzer ürünleri sorgulayın
Şimdi, Smart Speaker'a benzer ürünleri bulalım. Sorgu vektörü olarak Smart Speaker'ın gömlemesini kullanacağız.
Bu sorgu, vektör gömlemeleri Smart Speaker'ın gömlemesine en yakın olan ilk üç ürünü döndürerek, Wireless Earbuds gibi benzer öğeleri etkili biçimde önerecektir.
Sonuç
MongoDB'nin vektör arama yetenekleri, akıllı ve kişiselleştirilmiş uygulamalar geliştirmek için yeni olanakların kilidini açıyor. Vektör indekslemeyi doğrudan veritabanına entegre ederek MongoDB, mimariyi basitleştirir; veriyi yönetmeyi ve hızlı benzerlik aramaları yapmayı kolaylaştırır.
Vektör aramanın gücüyle basit anahtar kelime eşleşmelerinin ötesine geçebilir ve verinizin bağlamını ve anlamını kavrayan özellikler oluşturabilirsiniz. MongoDB Atlas'ın ücretsiz katmanını denemeye başlamanızı ve vektör indekslemenin uygulamalarınızı nasıl geliştirebileceğini keşfetmenizi öneririz.