私はSolrを使ってコサイン類似度アルゴリズムをモデル化する方法に興味があります。私はベクトルを割り当てられたアイテムを持っています。例えば、Solr/Luceneでコサインの類似性をモデル化することは可能ですか?
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