私は現在、同様のアイテムをグループ化するアプリケーションを開発中です。アイテム(動画など)はユーザーが作成することができ、その属性も後で(新しいタグのように)変更または拡張することができます。ほとんどのコラボレーティブなフィルタリングの仕組みのようにユーザの嗜好に頼るのではなく、アイテムの属性(類似した長さ、類似の色、同様のタグのセットなど)に基づいてアイテムの類似性を比較したい。計算は、主に2つの目的で必要です。与えられたアイテムの類似アイテムを提案し、同様のアイテムのグループにクラスタリングする。コンテンツベースのアイテム推奨のアプローチ
これまでのアプリケーションは、非同期設計であり、このクラスタリングコンポーネントを可能な限りデカップリングしたいと考えています。新しいアイテムの作成または既存のアイテムの新しい属性の追加は、コンポーネントが消費できるイベントを公開することによって宣伝されます。
計算は、ベストエフォートと「スナップショット」を提供することができます。つまり、ある時点で最良の結果が得られますが、最終的に結果の品質は向上します。
これで、類似のアイテムとクラスタの両方を計算する適切なアルゴリズムを探しています。重要な制約にはスケーラビリティがあります。当初、アプリケーションは数千のアイテムを処理する必要がありましたが、それ以降のアイテムも可能です。もちろん、追加のノードで計算が実行されますが、アルゴリズム自体はスケーリングされます。アルゴリズムがデータの部分的な変更に対して何らかの種類のインクリメンタル・モードをサポートしているなら、それはいいかもしれません。
私の最初の考えは、それぞれのアイテムをお互いに比較し、数字の類似性を保存することは少し原油を鳴らします。また、すべての類似点を格納するためにn*(n-1)/2
のエントリが必要であり、変更または新しいアイテムは最終的にn
の類似度計算を引き起こします。
ありがとうございます!
UPDATE TLは、DR
は、私が欲しいものを明確にするために、ここに私の目標とシナリオは次のとおりです。
- ユーザーのエントリ(書類を考える)
- ユーザー編集エントリのメタデータ(と思う生成のタグ
私のシステムで提供する必要があります:
勧告として与えられたアイテムのようなエントリの- 一覧なエントリの
- クラスタ
両方の計算が基づくべきである:
- エントリのメタデータ/属性(すなわち
- したがって、2つのエントリの距離が適切なメトリックを使用して、同様のタグの使用は)
- ユーザvotings、好みや協調フィルタリングとは異なり、アクション()に基づいていません。ユーザーはエントリを作成し属性を変更することができますが、アイテムとその属性のみを考慮し、関連するユーザーは考慮しないでください(アイテムとユーザーが存在しないシステムと同様)。
理想的には、アルゴリズムがサポートする必要があります:エントリ
- 永続的な変更は、増分変更
- 規模
- 簡単な距離よりももっと良いものに類似したエントリ/クラスタを計算しますテーブル、(なぜならO(n²)空間の複雑さの)可能であれば
おそらく、「類似」という用語を測定と比較することで、項目の2つの側面がどれほど離れているかを比較して合計すると便利です。 OverallDistance =長さ距離+色分け+タグ距離 – k3b
これは有効な点、k3bです。 –