2011-07-25 20 views
2

オープンエンドのビットは、このタイプの状況にどのように接近しますか?重み付けされたタグを一番近い方法で一致させる

私は、ユーザーがカテゴリの一覧から任意の数の項目を選択するよう求められるシステムを構築しています。選択したカテゴリごとに、重要度の1〜100の値を割り当てるように求められます。私はこれらのユーザカテゴリを記述する最善の方法は重み付きタグだと思います。だから、私は本当にリンゴを楽しむように、50を得る、100を得るバナナを食べることを楽しむかもしれません。私は梅が嫌いです、それを選択しません。

システム内の特定のエンティティは、まったく同じように動作し、それぞれ独自のタグセットを持ちます。上記のシナリオでは、アイテムは「ファーム」であり、果物の各タイプの出力は重み付け値です。私が見つけたいのは、果物のユーザーの好み(たとえば)に最も適したファームです。

ユーザーA:[タグ1:100、タグ2:50、タグ4:10]

商品A:[タグ2:40、TAG3:20]

項目Bこれは次のように見えるかもしれ[タグ1:100、タグ2:50、タグ4:10]

項目C:[TAG3:20、タグ4:5]この状況で

、アイテムBは、明らかにユーザAのための完全な一致であります結果セットの先頭になります。私が本当に望んでいるのは、特定のユーザーに対して関連性の低いアイテムを注文できるシステムです。

私はSQLとNoSQL(redis)実装で解決策を試してみましたが、たびに大規模なデータセットを繰り返し、各項目の各タグに対して基本的な計算を行い、全体的な違いを計算しています。これがうまくいく間に、それは遅くなるでしょう。そして、「Items」の数千のシステムについて話しているなら、私はこれがかなり早く膝に運ばれると思います。

3つのエンティティ(Item、User、Category/Tag)に2つの多対多スタイルの関係がある場合、SQLで直接実装する方法は考えられません。私は、結合するテーブルUser-CategoryとItem-Categoryの重み付け値をSQLで比較して最終的な出力を生成する方法について頭を落とすことさえできません。

私は何を求めているのでしょうか、この考えにどのようにアプローチするかについてのいくつかのアイデアです。

乾杯 ジョン

答えて

1

問題はあなたが言及したようにタグ付けされたデータのためのデータ構造のさまざまな方法を使って解くことができるnearest neighbor問題に関連したルックスを解決しようとしています。私はSQLの人物ではありませんが、最近隣のアルゴリズムを検索すると、あなたが望むようなものが見つかるでしょう。

+0

非常にありがたいことに、そこを見ることは十分であり、最も近い隣のものが間違いなく正しい線に沿っているように見えます。 –

関連する問題