Alibaba Cloud Elasticsearch ekibi, Alibaba DAMO Akademisi'nin Proxima vektör kitaplığına dayalı bir vektör arama motoru eklentisi olan aliyun-knn eklentisini geliştirdi. Bu eklenti; görsel arama, video parmak izleme, yüz tanıma, konuşma tanıma ve ürün önerisi gibi kullanım durumları için vektör aramayı hızlı bir şekilde uygulamanıza olanak tanır. Bu konuda aliyun-knn eklentisinin nasıl kullanılacağı açıklanmaktadır.
Bu kılavuz, eski Elasticsearch örneklerinde knn eklentisini kullanan müşteriler içindir.
Yeni vektör arama kullanım durumları için bir Elasticsearch örneği (sürüm 8.15 veya üzeri) satın almanızı ve motorun yerel vektör arama özelliklerini kullanmanızı öneririz.
Arka Plan
-
Kullanım durumları
Alibaba Cloud Elasticsearch vektör arama motoru; Pailitao, Görsel Arama, Qutoutiao için video parmak izi örnekleme, "Bunu Beğenebilirsiniz" önerileri, kişiselleştirilmiş arama ve çapraz medya arama dahil olmak üzere büyük ölçekli üretim uygulamalarında kanıtlanmış bir başarı geçmişine sahiptir.
-
Çalışma şekli
Alibaba Cloud Elasticsearch'teki vektör arama özelliği, Elasticsearch uzantı mekanizması üzerine oluşturulmuş bir eklentidir. Eklenti, yerel Elasticsearch sürümleriyle tamamen uyumludur ve bu sayede öğrenme sürecini kolaylaştırır. Vektör dizinleri gerçek zamanlı artımlı yazmayı ve neredeyse gerçek zamanlı (NRT) sorgulamayı destekler. Ayrıca çoklu çoğaltma desteği ve hata kurtarma dahil olmak üzere Elasticsearch'ün tüm yerel dağıtılmış yeteneklerini sağlar.
NotAlibaba Cloud Elasticsearch vektör arama eklentisi, OSS anlık görüntüsü veya DataWorks kullanılarak veri geçişini desteklemez. Logstash kullanmanızı öneririz.
-
Algoritmalar
Vektör arama motoru, Hiyerarşik Gezinilebilir Küçük Dünya (HNSW) ve doğrusal algoritmaları destekler. Bu algoritmalar, tek bir makinede bellekte tutulan küçük veri kümelerine sahip kullanım durumları için uygundur. Aşağıdaki tabloda bu iki algoritmanın performansı karşılaştırılmaktadır.
Tablo 1. HNSW ve doğrusal algoritmaların performans karşılaştırması
Bu tablodaki veriler bir Alibaba Cloud Elasticsearch V6.7.0 ortamında ölçülmüştür. Test ortamı aşağıdaki gibi yapılandırılmıştır:
Örnek yapılandırması: Her biri 16 çekirdekli, 64 GB bellekli ve 100 GB SSD bulut diskli iki veri düğümü.
Veri kümesi: SIFT 128 boyutlu float vektörleri.
Toplam veri: 20 milyon kayıt.
Dizin yapılandırması: Varsayılan parametreler.
Performans ölçümü
HNSW
Doğrusal
İlk 10 hatırlama oranı
%98,6
%100
İlk 50 hatırlama oranı
%97,9
%100
İlk 100 hatırlama oranı
%97,4
%100
Gecikme süresi (p99)
0 sn
0,934 sn
Gecikme süresi (p90)
0,018 sn
0,305 snNotBu tabloda p, yüzdelik dilimi ifade eder. Örneğin, Gecikme süresi (p99), sorguların %99'unun döndürüldüğü süredir.
Önkoşullar
-
aliyun-knn eklentisinin kurulum yöntemi, Alibaba Cloud Elasticsearch kümenizin sürümüne ve çekirdek sürümüne bağlı olarak değişir. Ayrıntılar için aşağıdaki tabloya bakın.
Elasticsearch sürümü
Çekirdek sürümü
Açıklama
6.7.0
1.2.0'dan önce
-
Eklentiler sayfasında aliyun-knn eklentisini manuel olarak yüklemeniz gerekir. Daha fazla bilgi için bkz. Varsayılan eklentileri yükleme veya kaldırma.
-
Komut dosyası tabanlı arama ve dizin önceden ısıtma gibi özellikler desteklenmez. Bu özelliklere ihtiyacınız varsa, Alibaba Cloud Elasticsearch çekirdek sürümüne sahip bir küme kullanın. Daha fazla bilgi için bkz. Çekirdek sürümü sürüm notları.
-
Bir vektör dizini oluşturduğunuzda yalnızca varsayılan
SquaredEuclideanuzaklık ölçümü desteklenir.distance_methodparametresini kullanarak bir uzaklık ölçümü belirtemezsiniz.
6.8
Yok
7.4
Yok
7.7
Yok
6.7.0
1.2.0 veya üzeri
-
aliyun-knn eklentisi, varsayılan olarak yüklü olan apack eklentisine entegre edilmiştir. aliyun-knn eklentisini yüklemek veya kaldırmak için apack eklentisini yönetmeniz gerekir. Daha fazla bilgi için bkz. apack eklentisinin fiziksel çoğaltma özelliğini kullanma.
-
Komut dosyası tabanlı arama, dizin önceden ısıtma ve genişletilmiş işlevler gibi gelişmiş özellikleri kullanmak için çekirdek sürümünü 1.3.0 veya üzeri bir sürüme yükseltmeniz gerekir. Talimatlar için bkz. Sürümleri yükseltme.
-
Bir vektör dizini oluştururken eşleme ayrıştırma hatası oluşursa, çekirdek sürümünü 1.3.0 veya üzeri bir sürüme yükseltip tekrar deneyin.
7.10.0
1.4.0 veya üzeri
-
aliyun-knn eklentisi, varsayılan olarak yüklü olan apack eklentisine entegre edilmiştir. aliyun-knn eklentisini yüklemek veya kaldırmak için apack eklentisini yönetmeniz gerekir. Daha fazla bilgi için bkz. apack eklentisinin fiziksel çoğaltma özelliğini kullanma.
-
Küçük çekirdek sürümü 1.4.0 veya üzeriyse, apack eklentisi en son sürümdedir ve güncelleme gerektirmez. Eklenti sürümünü kontrol etmek için GET _cat/plugins?v komutunu çalıştırın.
Diğer sürümler
Yok
Vektör arama desteklenmez.
NotÇekirdek sürümü ile apack eklentisi sürümü farklıdır. apack eklentisi sürümünü kontrol etmek için GET _cat/plugins?v komutunu çalıştırın.
-
-
Dizininizi planlayın.
Algoritma
Kullanım durumları
Bellekte
Diğer
hnsw
-
Tek makineli küçük veri kümeleri.
-
Düşük gecikme süresi gereksinimleri.
-
Yüksek hatırlama oranı gereksinimleri.
Evet
-
hnsw algoritması "bir komşunun komşusu da büyük olasılıkla komşudur" fikrine dayanır. Bu algoritmanın uzaklık ölçümü üçgen eşitsizliğini (bir üçgenin iki kenarının toplamı üçüncü kenardan büyüktür) sağlamalıdır. Örneğin, iç çarpım vektör uzayları üçgen eşitsizliğini sağlamaz ve hnsw arama yöntemini kullanmak için Öklid veya küresel uzaylara dönüştürülmelidir.
-
Verileri yazdıktan sonra, sorgu gecikme süresini azaltmak için yoğun olmayan saatlerde düzenli olarak forceMerge çalıştırın.
linear
-
Brute-force (kaba kuvvet) arama.
-
%100 hatırlama oranı.
-
Gecikme süresi veri hacmiyle birlikte artar.
-
Temel karşılaştırmalar için kullanın.
Evet
Yok.
-
-
Kümenizi planlayın.
Parametre
Açıklama
Veri düğümü teknik özellikleri (Zorunlu)
16 çekirdek 64 GB veya daha yüksek.
Notaliyun-knn eklentisi ile dizin oluşturma kaynak açısından yoğundur. Düşük teknik özelliklere sahip kümeler darboğaz olabilir ve kararlılığı etkileyebilir. 16 çekirdek 64 GB veya daha yüksek teknik özelliklere sahip bir küme kullanın.
Düğüm türü
Kümenin özel master düğümleri olmalıdır.
Küme yığın dışı belleği
Kümedeki vektör verilerinin toplam boyutunun iki katından fazla.
Örnek: Bir dizin, bir adet 960 boyutlu float alanı ve 400 belge içerir. Bir float 4 bayt kapladığından, vektör verileri için kullanılan bellek şu şekilde hesaplanır: 960 × 400 × 4 = 1,5 MB. Bu nedenle, yığın dışı bellek 3 MB'tan (1,5 MB × 2) fazla olmalıdır.
Not-
force merge işlemi gerçekleştirirseniz, hem eski hem de yeni veriler aynı anda belleğe yüklenir. Bu durumda, yukarıdaki formül kullanılarak hesaplanan değeri iki katına çıkarmalısınız.
-
64 GB veya daha fazla belleğe sahip kümeler için yığın dışı bellek boyutu yaklaşık olarak toplam bellek eksi 32 GB'a eşittir (yığın dışı bellek ≈ toplam bellek - 32 GB).
Yazma aktarım hızı
Vektör dizini oluşturma CPU açısından yoğun bir görevdir. 16 çekirdek 64 GB'lık bir veri düğümü için, düğüm başına peak yazma aktarım hızını 5.000 tps ile sınırlayın.
Ayrıca, bir vektör sorgusu sırasında tüm dizin dosyaları sistem belleğine yüklenir. Bu nedenle, iş sorgularını sunarken büyük hacimli yazmalardan kaçının. Bu, bellek baskısından kaynaklanan parça yeniden başlatmalarını önlemeye yardımcı olur.
NotBu değerler tahminidir. Planınızı gerçek iş yükünüz temelinde yapın, önceden yük testleri çalıştırın ve yeterli bellek sağlayın.
-
Sınırlamalar
aliyun-knn eklentisi, paylaşılan esnek depolama özelliği etkinleştirilmiş 6.7 sürümü örneklerde desteklenmez.
aliyun-knn eklentisini yüklemek için Alibaba Cloud Elasticsearch örneğinizin veri düğümlerinin 16 çekirdek 64 GB veya daha büyük olması gerekir. Düğümleriniz bu gereksinimi karşılamıyorsa, teknik özelliklerini yükseltmeniz gerekir. Daha fazla bilgi için bkz. Bir kümenin yapılandırmasını yükseltme.
aliyun-knn eklentisi, fiziksel çoğaltma özelliği gibi bazı gelişmiş AliES çekirdek özellikleriyle uyumlu değildir. Bu özellik etkinleştirilirse, eklentiyi kullanmadan önce devre dışı bırakmanız gerekir. Talimatlar için bkz. apack eklentisinin fiziksel çoğaltma özelliğini kullanma.
aliyun-knn eklentisini kullanan örneklerde veri geçişi için OSS anlık görüntülerini veya DataWorks'ü kullanamazsınız. Bunun yerine Logstash kullanmanızı öneririz.
Vektör dizini oluşturma
-
Elasticsearch kümenizin Kibana konsolunda oturum açın.
Talimatlar için bkz. Kibana konsolunda oturum açma.
NotBuradaki örnekler Elasticsearch V6.7.0 kullanmaktadır. Diğer sürümlerde işlemler biraz farklılık gösterebilir.
Sol gezinme menüsünde, seçeneğini belirleyin.
-
Console sekmesinde, bir vektör dizini oluşturmak için aşağıdaki komutu çalıştırın.
PUT test { "settings": { "index.codec": "proxima", "index.vector.algorithm": "hnsw" }, "mappings": { "_doc": { "properties": { "feature": { "type": "proxima_vector", "dim": 2, "vector_type": "float", "distance_method": "SquaredEuclidean" } } } } }NotVektör dizinine Elasticsearch tarafından desteklenen diğer alan türlerini ekleyebilirsiniz.
Vektör dizinini oluştururken bir eşleme ayrıştırma hatası oluşursa:
"type": "mapper_parsing_exception", "reason": "Mapping definition for [feature] has unsupported parameters: [distance_method : SquaredEuclidean]", çekirdeği en son sürüme yükseltin ve tekrar deneyin.
Tür
Parametre
Varsayılan
Açıklama
setting
index.codec
proxima
Alt katmanda bir proxima kNN dizininin oluşturulup oluşturulmayacağını belirtir. Geçerli değerler:
-
proxima (Önerilen): Vektör aramayı desteklemek için alt katmanda bir proxima kNN dizini oluşturulur.
-
null: Bir proxima kNN dizini oluşturmaz. Bunun yerine yalnızca bir ileri dizin oluşturur. Bu durumda, proxima_vector türündeki alanlar yalnızca komut dosyası tabanlı aramayı destekler ve hnsw veya linear aramayı desteklemez.
NotSorgu gecikme süresinin birincil endişe olmadığı büyük veri kümeleri için bu parametreyi kaldırabilir veya null olarak ayarlayabilirsiniz. Bu, komut dosyası tabanlı arama kullanarak kNN vektör sorguları gerçekleştirmenize olanak tanır. Komut dosyası tabanlı arama, örneğiniz V6.7.0 ve apack eklentisi sürümü 1.2.1 veya üzeri ise ya da örneğiniz V7.10.0 ve apack eklentisi sürümü 1.4.0 veya üzeri ise desteklenir.
index.vector.algorithm
hnsw
Vektör arama algoritması. Geçerli değerler:
-
hnsw: HNSW algoritması.
-
linear: Doğrusal algoritma.
index.vector.general.builder.offline_mode
false
kNN dizinini oluşturmak için çevrimdışı optimizasyon modunun kullanılıp kullanılmayacağını belirtir. Geçerli değerler:
-
false: Çevrimdışı optimizasyon modunu devre dışı bırakır.
-
true: Çevrimdışı optimizasyon modunu etkinleştirir. Bu mod, yazma sırasında parça parçalanmasını azaltır ve yazma aktarım hızını artırır.
Not-
Çevrimdışı optimizasyon modunu etkinleştirmek için örneğinizin V6.7.0 ve apack eklentisi sürümü 1.2.1 veya üzeri ya da V7.10.0 ve apack eklentisi sürümü 1.4.0 veya üzeri olması gerekir. Çevrimdışı optimizasyon modunda oluşturulan dizinler komut dosyası tabanlı veri aramayı desteklemez.
-
Tam veri kümesinin tek seferlik toplu içe aktarmaları için çevrimdışı optimizasyon modunun etkinleştirilmesini öneririz.
mapping
type
proxima_vector
Vektör alanı türü. Örneğin, feature alanını proxima_vector olarak ayarlamak, feature öğesinin bir vektör alanı olduğunu belirtir.
dim
2
Vektör boyutu. Bu parametre zorunludur. Değer 1 ile 2048 arasında bir tamsayı olmalıdır.
vector_type
float
Vektörün veri türü. Geçerli değerler:
-
float: Kayan nokta.
-
short: Kısa tamsayı.
-
binary: İkili.
binary türü için vektör verileri işaretsiz 32 bitlik tamsayılar (uint32) dizisi olarak temsil edilmeli ve dim değeri 32'nin katı olmalıdır.
Örneğin, iş verileriniz 64 bitlik ikili değer 1000100100100101111000001001111101000011010010011010011010000100 ise, yazılan vector [-1994006369, 1128900228] şeklindedir.
NotÜç vektör veri türünün tümü, örneğiniz V6.7.0 ve apack eklentisi sürümü 1.2.1 veya üzeri ya da V7.10.0 ve apack eklentisi sürümü 1.4.0 veya üzeri ise desteklenir. Daha önceki sürümler yalnızca float türünü destekler.
distance_method
SquaredEuclidean
Uzaklık fonksiyonu. Geçerli değerler:
-
SquaredEuclidean: Öklid uzaklığı (karekökü alınmamış).
-
InnerProduct: İç çarpım.
-
Cosine: Kosinüs benzerliği.
-
Hamming: Hamming uzaklığı (yalnızca binary türü için).
Not-
Dört uzaklık fonksiyonunun tümü, örneğiniz V6.7.0 ve apack eklentisi sürümü 1.2.1 veya üzeri ya da V7.10.0 ve apack eklentisi sürümü 1.4.0 veya üzeri ise desteklenir. Daha önceki sürümler yalnızca varsayılan SquaredEuclidean fonksiyonunu destekler.
distance_methodparametresini kullanarak diğer uzaklık fonksiyonlarını belirtemezsiniz. -
Uzaklık fonksiyonları hakkında daha fazla bilgi için bkz. Uzaklık fonksiyonları.
-
Hammingfonksiyonu özel bir uygulamaya sahip olduğundan,hnswveyalineardizinleri kullanılırken standartknnsorguları desteklenmez. Yalnızca script_score ile uyumlu komut dosyası tabanlı sorgular desteklenir. Sorgu ifadelerinin belirli iş gereksinimleriniz için uygun olduğundan emin olmak üzere bunları farklı senaryolarda test etmeniz gerekir.
Notapack eklentisi sürümünü kontrol etmek için GET /_cat/plugins?v komutunu çalıştırabilirsiniz. Sürüm gereksinimleri karşılamıyorsa, yükseltme talep etmek için destek talebi gönderebilirsiniz.
kNN vektör araması ayrıca gelişmiş sorgu parametreleri de sağlar. Daha fazla bilgi için bkz. Gelişmiş parametreler.
-
Bir belge eklemek için aşağıdaki komutu çalıştırın.
POST test/_doc { "feature": [1.0, 2.0] }NotBinary dışındaki tüm dizi türleri için dizi uzunluğu dim ile eşleşmelidir. Binary türü için vektör verileri işaretsiz 32 bitlik tamsayılar (uint32) dizisine dönüştürülmeli ve dim 32'nin tam katı olmalıdır.
Vektör arama
-
Standart arama
Standart bir arama gerçekleştirmek için aşağıdaki komutu çalıştırın.
GET test/_search { "query": { "hnsw": { "feature": { "vector": [1.5, 2.5], "size": 10 } } } }Aşağıdaki tabloda yaygın parametreler açıklanmaktadır.
Parametre
Açıklama
hnsw
Vektör arama algoritması. Bu, dizini oluştururken belirtilen algorithm ile eşleşmelidir.
vector
Sorgu vektörü. Dizinin uzunluğu, dizini oluştururken mapping içinde belirtilen dim ile aynı olmalıdır.
size
Döndürülecek belge sayısını belirtir.
Not-
Bir vektör aramasındaki size parametresi, yerleşik Elasticsearch size parametresinden farklıdır. İlki, kNN eklentisi tarafından döndürülen belge sayısını kontrol ederken, ikincisi tüm sorgu tarafından döndürülen toplam belge sayısını kontrol eder. Bir sorgu çalıştırdığınızda, sistem önce vektör arama size parametresini kullanarak belirtilen sayıda en iyi belgeyi alır. Ardından, nihai belge kümesini döndürmeden önce sonuçlara yerleşik Elasticsearch size parametresini uygular.
-
Varsayılan olarak 10 olan yerleşik Elasticsearch size parametresi ile aynı değere vektör arama size parametresini ayarlamanızı öneririz.
NotkNN vektör araması ayrıca gelişmiş sorgu parametreleri de sağlar. Daha fazla bilgi için bkz. Gelişmiş parametreler.
-
-
Komut dosyası sorgusu
Vektör komut dosyası sorguları yalnızca script_score ile kullanılabilir. Örneğin, döndürülen her belgeyi
1/(1+l2Squared(params.queryVector, doc['feature']))formülüne göre puanlamak için script_score kullanabilirsiniz. Aşağıdaki komut bir örneği göstermektedir.GET test/_search { "query": { "match_all": {} }, "rescore": { "query": { "rescore_query": { "function_score": { "functions": [{ "script_score": { "script": { "source": "1/(1+l2Squared(params.queryVector, doc['feature'])) ", "params": { "queryVector": [2.0, 2.0] } } } }] } } } } }kNN vektör komut dosyası sorgusu, X-Pack tarafından sağlanan işlevleri desteklemez. Yalnızca aşağıdaki işlevler desteklenir:
İşlev
Açıklama
l2Squared(float[] queryVector, DocValues docValues)Öklid uzaklık işlevi.
hamming(float[] queryVector, DocValues docValues)Hamming uzaklık işlevi.
-
cosineSimilarity(float[] queryVector, DocValues docValues) -
cosine(float[] queryVector, DocValues docValues)
Kosinüs benzerliği işlevi.
NotAlibaba Cloud Elasticsearch V6.7 için
cosineSimilarity(float[] queryVector, DocValues docValues)işlevini kullanın. V7.10 içincosine(float[] queryVector, DocValues docValues)işlevini kullanın.NotKomut dosyası sorgusu özelliğini kullanmak için kurulumunuz aşağıdaki gereksinimlerden birini karşılamalıdır: apack eklentisi V1.2.1 veya üzeri ile küme sürümü 6.7.0 ya da apack eklentisi V1.4.0 veya üzeri ile küme sürümü 7.10.0. apack eklentisi sürümünü kontrol etmek için GET /_cat/plugins?v komutunu çalıştırabilirsiniz. Sürüm gereksinimleri karşılamıyorsa, yükseltme talep etmek için destek talebi gönderebilirsiniz.
-
İşlev parametreleri:
float[] queryVector: Sorgu vektörü.
DocValues docValues: Belge vektörü.
Çevrimdışı optimizasyon modu ile oluşturulan dizinler için vektör komut dosyası sorguları desteklenmez (
index.vector.builder.offlineMode = true).
-
-
Dizin önceden ısıtma
Bir kNN dizini tam bellek içi arama gerçekleştirir; bu durum, dizin ilk yüklendiğinde soğuk başlangıçtan kaynaklanan yüksek sorgu gecikme süresine neden olabilir. kNN eklentisinin dizin önceden ısıtma özelliği, bir dizini arama isteklerini sunmadan önce yerel belleğe önceden yükleyerek bunu önler ve soğuk başlangıç gecikme süresini önemli ölçüde azaltır.
-
Tüm vektör dizinlerini önceden ısıtın.
POST _vector/warmup -
Belirli bir vektör dizinini önceden ısıtın.
POST _vector/{indexName}/warmup
NotDizin önceden ısıtma özelliğini kullanmak için kurulumunuz aşağıdaki gereksinimlerden birini karşılamalıdır: apack eklentisi V1.2.1 veya üzeri ile küme sürümü 6.7.0 ya da apack eklentisi V1.4.0 veya üzeri ile küme sürümü 7.10.0. apack eklentisi sürümünü kontrol etmek için GET _cat/plugins?v komutunu çalıştırabilirsiniz. Sürüm gereksinimleri karşılamıyorsa, yükseltme talep etmek için destek talebi gönderebilirsiniz.
Kümeniz çok sayıda büyük vektör dizini içeriyorsa ancak uygulamanız yalnızca bunların bir alt kümesinde vektör aramaları gerçekleştiriyorsa, bellek içi arama performansını artırmak için yalnızca bu belirli dizinleri önceden ısıtın.
-
Vektör puanlama
Vektör arama, doğrudan arama sıralamasını etkileyen bir uzaklık ölçümü işlevine dayalı birleşik bir puanlama formülü kullanır.
Puanlama formülü:
score = 1 / (vektör uzaklık işlevi + 1)
Varsayılan olarak, vektör puanlama mekanizması kare Öklid uzaklığını kullanır.
Uygulamada, vektör verilerinizi optimize edebilir ve vektörler arasındaki mesafeyi belirlemek için sorgu puanından geriye doğru çalışarak puanlamayı iyileştirebilirsiniz.
Uzaklık ölçüm işlevleri
Farklı uzaklık ölçüm işlevleri farklı puanlama mekanizmaları kullanır. Aşağıdaki tabloda aliyun-knn eklentisi tarafından desteklenen uzaklık ölçüm işlevleri ayrıntılı olarak açıklanmaktadır.
|
Uzaklık işlevi |
Açıklama |
Puanlama formülü |
En uygun olduğu durumlar |
Örnek |
|
SquaredEuclidean (Kare Öklid uzaklığı) |
Öklid uzaklığı, çok boyutlu bir uzayda iki nokta arasındaki düz çizgi mesafesidir. 2B ve 3B uzayda fiziksel mesafeye karşılık gelir. |
İki n boyutlu vektör için, A = [A1, A2, ..., An] ve B = [B1, B2, ..., Bn]:
Not
Varsayılan olarak, vektör puanlama kare Öklid uzaklığını kullanır. |
Öklid uzaklığı, vektör bileşenlerinin değerlerindeki mutlak farkı yansıtır. Farkların büyüklüğünün önemli olduğu analizler için en iyisidir; örneğin, davranış metriklerine göre kullanıcı değerindeki benzerlik veya varyansın analiz edilmesi. |
[0,0] ve [1,2] 2B vektörleri için kare Öklid uzaklığı (1-0)² + (2-0)² = 5'tir. |
|
Cosine (kosinüs benzerliği) |
Kosinüs benzerliği, iki vektör arasındaki açı kosinüsünü hesaplayarak iki vektör arasındaki benzerliği değerlendirir. |
İki n boyutlu vektör için, A = [A1, A2, ..., An] ve B = [B1, B2, ..., Bn]:
|
Kosinüs benzerliği, vektörlerin büyüklüğünden ziyade yönüne odaklanır ve mutlak değerlere karşı duyarsızdır. Farklı kullanıcılar arasında derecelendirme ölçeklerindeki tutarsızlıkları düzeltebildiğinden, içerik derecelendirmelerine dayalı olarak kullanıcı ilgisini karşılaştırmak için idealdir. |
[1,1] ve [1,0] 2B vektörleri için kosinüs benzerliği 0,707'dir. |
|
InnerProduct (iç çarpım) |
İç çarpım, ayrıca nokta çarpımı olarak da bilinir ve tek bir skaler değer üretmek için iki reel sayı vektörünü birleştiren bir işlemdir. |
İki n boyutlu vektör için, A = [A1, A2, ..., An] ve B = [B1, B2, ..., Bn]:
|
İç çarpım, iki vektörün hem açısını hem de büyüklüğünü dikkate alır. Vektörler normalize edildiğinde, iç çarpım kosinüs benzerliğine eşdeğerdir. |
[1,1] ve [1,5] 2B vektörleri için iç çarpım (11) + (15) = 6'dır. |
|
Hamming (yalnızca binary vektörler için) |
Bilgi teorisinde, eşit uzunluktaki iki dize arasındaki Hamming uzaklığı, karşılık gelen karakterlerin farklı olduğu konumların sayısıdır. |
İki n bitlik binary dize, x ve y için:
|
Genellikle veri iletimlerinde hata algılama ve düzeltme için kullanılır; burada iki binary kelime arasındaki farklı bitlerin sayısı sayılarak iletim hatası tahmin edilir. |
Örneğin, 1011101 ve 1001001 arasındaki Hamming uzaklığı 2'dir. Not
aliyun-knn eklentisini kullanırken, binary vektör verileri işaretsiz 32 bitlik tamsayılar (uint32) dizisi olarak temsil edilmeli ve |
Birden çok uzaklık ölçüm işlevi kullanmak için kümenizin aşağıdaki gereksinimlerden birini karşıladığından emin olun: apack eklentisi V1.2.1 veya üzeri ile küme sürümü 6.7.0 ya da apack eklentisi V1.4.0 veya üzeri ile küme sürümü 7.10.0. apack eklentisi sürümünüzü kontrol etmek için GET _cat/plugins?v komutunu çalıştırabilirsiniz. Sürüm gereksinimleri karşılanmıyorsa, desteklenen tek kNN uzaklık ölçüm işlevi SquaredEuclidean'dir. Diğer uzaklık işlevlerini kullanmanız gerekiyorsa, eklenti yükseltmesi talep etmek için destek talebi gönderebilirsiniz.
Uzaklık ölçüm işlevini, dizin mapping içindeki distance_method parametresini kullanarak belirtebilirsiniz.
Devre kesici parametreleri
|
|
|
|
|
|
|
|
|
|
|
|
Vektör devre kesici parametreleri küme yapılandırmasının bir parçasıdır. Ayarları görüntülemek için GET _cluster/settings komutunu çalıştırın. Devre kesici eşiklerini değiştirmeyin.
Gelişmiş parametreler
Tablo 2. Oluşturma parametreleri (hnsw)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0. katman ve üst katmanlar dahil olmak üzere HNSW grafiğindeki toplam katman sayısı. Örneğin, scaling_factor değeri 30 olan 10 milyon belge için katman sayısı ceil(log₃₀(10.000.000)) olup 5'tir. Bu parametrenin etkinlik üzerinde küçük bir etkisi vardır. Başlangıç değeri olarak 6 önerilir. |
|
|
|
|
|
Yukarıdaki parametreler dizin settings içinde yapılandırılmalı ve yalnızca hnsw algoritması tarafından desteklenir.
Tablo 3. Arama parametreleri (hnsw)
|
|
|
|
|
|
|
|
Örnek sorgu:
GET test/_search
{
"query": {
"hnsw": {
"feature": {
"vector": [1.5, 2.5],
"size": 10,
"ef": 100
}
}
}
}
SSS
-
S: Bir sorgunun hatırlama oranını nasıl değerlendiririm?
Y: Aynı yapılandırmalara sahip iki dizin oluşturun; biri HNSW algoritmasını, diğeri doğrusal arama algoritmasını kullansın. Bir istemciden her iki dizine de aynı vektör verilerini gönderin. Dizinler yenilendikten sonra, her ikisinden de belge kimliklerini almak için aynı sorgu vektörünü kullanın. Hatırlama oranı, her iki dizinden elde edilen kesişen belge kimliklerinin sayısının, doğrusal arama dizininden elde edilen toplam kimlik sayısına bölünmesiyle hesaplanır.
-
S: Küme yazma işlemleri sırasında bir
circuitBreakingExceptionhatası oluşursa ne yapmalıyım?Y: Bu hata, yığın dışı bellek kullanımının indices.breaker.vector.native.indexing.limit (varsayılan olarak %70) tarafından belirtilen eşiği aştığını ve yazma işlemlerinde devre kesmeyi tetiklediğini gösterir. Devre kesici, arka plan dizin oluşturma tamamlandıktan ve bellek serbest bırakıldıktan sonra genellikle otomatik olarak sıfırlanır. İstemcinize bir yeniden deneme mekanizması eklemenizi öneririz.
-
S: Yazma işlemleri durduktan sonra CPU kullanımı neden yüksek kalıyor?
Y: Vektör dizini oluşturma, yenileme veya flush aşamaları sırasında gerçekleşir. Yazma trafiği durduktan sonra bile, vektör dizinini oluşturmaya yönelik arka plan görevleri çalışmaya devam edebilir. Bu görevler, son yenileme döngüsü tamamlandıktan sonra hesaplama kaynaklarını serbest bırakır.
-
S: aliyun-knn eklentisi ile sorgulama yaparken aşağıdaki hatayı alıyorum:
class_cast_exception: class org.apache.lucene.index.SoftDeletesDirectoryReaderWrapper$SoftDeletesFilterCodecReader cannot be cast to class org.apache.lucene.index.SegmentReader (org.apache.lucene.index.SoftDeletesDirectoryReaderWrapper$SoftDeletesFilterCodecReader and org.apache.lucene.index.SegmentReader are in unnamed module of loader 'app'). Ne yapmalıyım?Y: Dizin için fiziksel çoğaltma özelliğini devre dışı bırakın. Daha fazla bilgi için bkz. apack eklentisinin fiziksel çoğaltma özelliğini kullanma.
-
S: aliyun-knn eklentisi ile vektör araması yavaşsa veya bellekle ilgili devre kesme oluşursa ne yapabilirim?
Y: aliyun-knn eklentisi, bellek içi vektörleri kullanarak vektör araması gerçekleştirir; bu, bellek açısından yoğun bir işlemdir. Büyük dizinler, belleğe yüklendiğinde yavaş performansa neden olabilir veya devre kesmeyi tetikleyebilir. En iyi uygulama olarak, dizin veri boyutunuzu mevcut makine belleğinin yarısı ile sınırlayın. Veri hacmini azaltamıyorsanız ve bellek yetersiz kalıyorsa, küme yapılandırmasını yükseltin.
-
S: kNN senaryolarında,
must_not existssorgusu boş 'feature' alanına sahip belgeleri filtreleyemiyor. Bu verileri filtrelemek için sorguyu nasıl yazabilirim?Y: kNN verilerinin depolama mekanizması benzersizdir ve belirli DSL sorgularıyla uyumsuz olabilir. Bunun yerine verileri filtrelemek için aşağıdaki komut dosyasını kullanabilirsiniz.
GET jx-similar-product-v1/_search { "query": { "bool": { "must": { "script": { "script": { "source": "doc['feature'].empty", "lang": "painless" } } } } } }
