Bir n boyutlu özellik vektörü, ör. Her bir belge ile <1.00, 0.34, 0.22, ..., 0>
, ve sonra bir sorgu olarak başka bir özellik vektör sağlamak, sonuçları kosinüs benzerliği sırayla sıralanmış. Elastik Arama ile bu mümkün mü?Elastic Search'ü bir özellik vektörü ile sorgulamak mümkün mü?
cevap
Elastic Search'e özel bir cevabım yok çünkü hiç kullanmadım (Elastic aramalarının yapıldığı Lucene kullanıyorum). Ancak, sorunuza genel bir cevap vermeye çalışıyorum. Bir sorgu vektörü verilen en yakın vektörlerin aşağıdaki gibi tarif edilmesi için iki standart yol vardır.
K-d ağaç
Birinci yaklaşım en yakın komşu sorguları destekleyen bir veri yapısı sayesinde, örneğin, birlikte hafızada vektörleri depolamaktır k-d ağaçları. Bir k-d tree, ikili arama ağacının her bir seviyesinin, k k boyutlarından birinin iki parçaya bölünmesi anlamında bir genellemedir. Hafızadaki tüm noktaları yüklemek için yeterli alanınız varsa, kosinüs benzerlik değerlerine göre sıralanan vektörlerin bir listesini elde etmek için nearest neighbour search algorithm k-d ağaçlarına uygulamak mümkündür. Bu yöntemin bariz dezavantajı, bilgi edinmede sıklıkla karşılaşılan devasa puan kümeleriyle ölçeklenmemesidir.
Ters Kuantize Vektörler
İkinci yaklaşım ters nicemlenmiş vektörler kullanmaktır. Basit bir aralık tabanlı kuantizasyon, bir vektörün gerçek sayılarına sözde terim veya etiketlerini etiketlerine atar, böylece bunlar daha sonra Lucene tarafından indekslenebilir (veya bu konuda Elastik arama).
Örneğin, aralık [0.1, 0.2) ve böylece ... örnek vektör etiketi aralığında [0 A, 0.1), B atayabilir kayıt Daha sonra soru (J, D, C, .. A) olarak kodlanır. (çünkü [.9,1] J, [0.3,0.4] D ve benzeridir). Sonuç olarak, gerçek sayıların bir vektörü böylece bir dizgeye (bir belge olarak ele alınabilir) dönüştürülür ve dolayısıyla bir standart bilgi alma (IR) aracı ile indekslenir. Bir sorgu vektörü aynı zamanda sözde-terimlerden oluşan bir torbaya dönüştürülür ve dolayısıyla mevcut olana en benzer (kosinüs benzerliği veya başka bir ölçü olarak) koleksiyondaki diğer benzer vektörlerin bir kümesini hesaplayabilir.
Bu yöntemin ana avantajı, gerçek numaralı vektörlerin büyük koleksiyonu için iyi ölçeklendirilmesidir. Temel dezavantaj, hesaplanan benzerlik değerlerinin, gerçek kosinüs benzerliklerine (kuantizasyonda karşılaşılan kayıptan dolayı) sadece yaklaşık değerler olduğudur. Daha küçük bir kuantizasyon aralığı, artan indeks büyüklüğüne göre daha iyi performans sağlar.
- 1. Bir vektörü bir yapıda depolamak mümkün mü? C++
- 2. Std :: rc :: Rc ile bir özellik tipi kullanmak mümkün mü?
- 3. Android View'da bekleyen/bekleyen animasyonları sorgulamak mümkün mü?
- 4. Yalnızca belirli bir özellik için bağlamayı işlemek mümkün mü?
- 5. Sorgulamaya özel Elastic Search düğüm
- 6. TableRow.insertCell() ile bir TH oluşturmak mümkün mü?
- 7. SystemEvents ile Özel EventArgs kullanmak mümkün mü?
- 8. Linq ile nesnelere yansıma kullanmak mümkün mü?
- 9. skip_while` klonlamak mümkün mü?
- 10. Dinamik nesne yürütme özelliğinin özelliklerine özellik eklenmesi mümkün mü?
- 11. ? mümkün mü?
- 12. mümkün mü?
- 13. mümkün mü?
- 14. mümkün mü?
- 15. XmlWriter ile belleğe XML yazmak mümkün mü?
- 16. C# kullanarak OrientDB ile çalışmak mümkün mü?
- 17. Android'de sched_setaffinity ile yakınlık ayarlamak mümkün mü?
- 18. node.js ile masaüstü uygulamaları oluşturmak mümkün mü?
- 19. Cassandra'yı Node.js ile kullanmak mümkün mü?
- 20. Doküman dosyalarını Python ile düzenlemek mümkün mü?
- 21. pdfquery ile düzenli ifadeler kullanmak mümkün mü?
- 22. ImageImage'ı displayImage() ile ayarlamak mümkün mü?
- 23. Jbehave'ı testNG ile entegre etmek mümkün mü?
- 24. ClearCase ile Sürekli Entegrasyon mümkün mü?
- 25. HTTPListener ile HTTP2 kullanmak mümkün mü
- 26. nw.js ile konsol uygulaması oluşturmak mümkün mü?
- 27. xUnit ile Bağımlılık Enjeksiyonu kullanmak mümkün mü?
- 28. Qt ile cin kullanmak mümkün mü?
- 29. Bir sınıfa bir dize ile örnek vermek mümkün mü?
- 30. matellotlib ile zaman çizelgeleri çizmek mümkün mü?
Kuantize vektörler ile bulunan değerlerin kosinüs benzerliklerine yakınlıklar olduğu iddianızın aşırı derecede iyimser olduğuna dikkat edin. Spesifik olarak, bu "yaklaşık" 0.11'de 0.1'den 0.1'e kadar olan değer 0.99'tır. "A" nın "b" ye "b" den daha yakın olduğu söylenemez. Bunu düzeltmenin bir yolu yoksa, bu yaklaşım hiçbir şeyden çok daha kötüdür. Sahip olduğunuz uzaklık bilgisini aktif olarak yok edecektir. Lütfen, lütfen, lütfen bunu kimsenin uygulamamasına izin verin, başvurunuzu yok edersiniz. –
Ayrıca, "tersine çevrilmiş nicelenmiş vektörler" in bir şey olmadığını da belirtmek gerekir. Kelimenin tam anlamıyla bu terimin tamamı internette ortaya çıkıyor. Vektör Niceleme bir şeydir, ama kesinlikle bu cevapta belirtilenlerden değildir. –
Kuantizasyon, vektörleri her bir bileşene göre bulmanıza yardımcı olacaktır, yani 0.11'lik bir aralık boyutu kullandığınızı varsayarak, 0.11'in hücreye [0,1, 0,2] ait olacağını belirlersiniz. Ancak vektörlerin bileşenlerini kendileri saklayabilirsiniz. Bir sorgu noktası verildiğinde, kesin mesafeleri hesaplamak mümkündür. Vektörleri nicelleştirseniz bile, mesafe hesaplamalarında meydana gelen kuantizasyon hatası, eğer aralıklar yeterince küçükse, o zaman anlamlı olmayacaktır. – Debasis