मैं सोलर का उपयोग कर कोसाइन समानता एल्गोरिदम मॉडल करने के संभावित तरीकों में रूचि रखता हूं। मेरे पास वेक्टर हैं जिन्हें वेक्टर असाइन किया गया है, उदाहरण के लिए:क्या सोलर/लुसीन में कोसाइन समानता मॉडल करना संभव है?
items = [
{ id: 1, vector: [0,0,0,2,3,0,0] },
{ id: 2, vector: [0,1,0,1,5,0,0] },
{ id: 3, vector: [2,3,0,0,0,1,0] },
{ id: 4, vector: [1,2,4,6,5,0,0] }
]
और एक खोज वेक्टर जिस पर दूसरों को रैंक करने की आवश्यकता है।
वर्तमान में, मैं सभी वस्तुओं पर चलकर और उन्हें इनपुट वेक्टर के खिलाफ रैंक असाइन करके रूबी में मॉडलिंग कर रहा हूं। यहाँ मैं उपयोग कर रहा हूँ कोज्या समानता के कार्यान्वयन है:
module SimilarityCalculator
def self.get_similarity(vector1, vector2)
dp = dot_product(vector1, vector2)
nm = normalize(vector1) * normalize(vector2)
dp/nm
end
private
def self.dot_product(vector1, vector2)
sum = 0.0
vector1.each_with_index { |val, i| sum += val * vector2[i] }
sum
end
def self.normalize(vector)
Math.sqrt(vector.inject(0.0) { |m,o| m += o**2 })
end
end
फिर, एक स्थान पर रहीं सूची मैं की तरह कुछ करना होगा प्राप्त करने के लिए निम्नलिखित:
ranked = []
search_vector = [1,0,0,3,5,0,0]
items.each do |item|
rank = SimilarityCalculator.get_similarity(search_vector, item.vector)
{ id: item.id, rank: rank }
end
मैं के बारे में पता करने के लिए Solr पर्याप्त जानकारी नहीं है यह कैसे मॉडलिंग किया जाएगा या यहां तक कि अगर यह कर सकता है, लेकिन मैंने सोचा कि मैं इसे बाहर फेंक दूंगा।
http://stackoverflow.com/a/1849270/272861 – Mikos