0

問題:
特定のユーザーの「興味」を他のすべてのユーザーの興味と比較して、そのユーザーに最も適合するトップ 10 を提案したいと考えています。ユーザー間の無向加重グラフを作成しています。ここで、加重 = 2 人のユーザー間の一致スコアです。

私はすでに N 人のユーザーのセットを持っています: S. S の任意のユーザー U に対して、私は一連の興味 I を持っています。長い間 (1 週間?) 後、一連の興味を持つ新しいユーザー U を作成し、それをに追加しますS. この新しいユーザーのグラフを生成するために、新しいユーザーの関心セット I を、S 内のすべてのユーザーの関心セットと繰り返し比較しています。問題は、この「すべてのユーザー」の部分にあります。

興味を比較する機能について話しましょう。一連の関心 I に対する関心は文字列です。WikipediaMiner を使用して 2 つの文字列/興味を比較しています (ウィキペディアのリンクを使用して、2 つの文字列がどれほど密接に関連しているかを推測します。例: ビリー ジーン & スリラー ==> 高い一致、ブラッド ピット & ジャマイカ ==> 低い一致何とか何とか)。これについても質問しました(現在使用しているソリューションよりも優れたソリューションがあるかどうかを確認するため.

したがって、上記の関数には無視できない時間がかかり、合計すると、数千 (おそらく数百万) のユーザーとその何百もの関心を比較すると、膨大な時間がかかります。100,000 ユーザーの場合、この方法で短時間 (<30 秒) に 100,000 ユーザーの比較を行う余裕はありません。しかし、私は 30 秒以内に上位 10 件の推奨事項を提示しなければなりません。これはおそらく暫定的な推奨事項であり、次の 1 分程度でそれを改善し、改善された推奨事項を計算します。1 人のユーザーと N 人のユーザーを順番に単純に比較するのは遅すぎます。

質問:
状況を改善したり、問題を解決したりするために使用できるアルゴリズム、方法、またはツールを提案してください。

4

3 に答える 3

2

以下のことの結果は、利益間の相互関係の性質に依存するため、問題を解決するためのアプローチしか考えられませんでした。

=>ステップ:1 あなたのタイトルが言うように.興味を頂点として、それらの間の重み付けされた一致をエッジとして、無向重み付けグラフを構築します。

=>ステップ:2 - 関心を集めます。(最も複雑)

K-means は一般的に使用されるクラスタリング アルゴリズムですが、K 次元ベクトル空間に基づいて機能します。K-means がどのように機能するかについては、wiki を参照してください。すべてのクラスターの合計(各ポイントの距離^ 2の合計、つまりクラスターの中心)を最小化します。あなたの場合、利用可能な次元はありません。そこで、2 つの頂点間の距離、より高い一致 => より短い距離、またはその逆 (wiki-miner によって提供されるさまざまな一致レベルとは何ですか?) について、何らかのルールを作成することによって、そこに適用される最小化ロジックを適用できるかどうか試してみてください。選択したセットで最も接続された頂点と言うようにクラスターの平均を選択しました。

「ペアカウンティング F メジャー」はニーズに合っているように思えます (加重グラフ)。利用可能な他のオプションを確認してください。

(注: 適切なクラスタリング アルゴリズムが見つかり、距離ルール、クラスター数などの適切なキャリブレーションが見つかるまで、この手順を変更し続けます。)

=>Step:3 - クラスターを評価する

ここからは、ニーズに合わせていくつかのことを調整するようなものです. クラスターを調べ、再評価します: クラスターの数、クラスター間距離、クラスター内の頂点間の距離、クラスターのサイズ、時間\精度のトレードオフ (最終比較 - クラスターなしで結果を照合) 後藤: この評価までステップ 2満足です。

=>step:4 - 新しい興味を調べる

すべてのクラスターを反復処理し、各クラスターの接続性を計算し、高い接続性に基づいてクラスターを並べ替え、並べ替えられたクラスターの上位 x% について、高度に接続された興味を並べ替えて除外します。

=>ステップ:5 - ユーザーの照合

ステップ 4 で取得した興味を使用してすべてのユーザーのセットを逆引きし、両方のユーザーのすべての興味を比較して、スコアを生成します。

=>ステップ:6 - 上記とは別に、トラフィックなどに基づいて、複数のシステム\プロセッサに負荷を分散できます (複数のマシンをクラスタ マシン n クラスタに使用できます)。

この問題のアプリケーションは何ですか?予想されるトラフィックは何ですか?


新しい興味と「クラスター内の一連の興味」の間の接続を見つけるための別のソリューション C. Wiki-Miner は、一連の wiki ドキュメントで実行されます。これを UNIVERSE と呼びましょう。

1: 各クラスターに対して、UNIVERSE から「関連性の高いドキュメントのセット」(私はそれを HRDC と呼んでいます) をフェッチして維持します (インデックス、lucene が便利な場合があります)。したがって、「N」個のクラスターを取得した場合、「N」個の HRDC があります。

2:新たな興味が湧いたら、HRDCごとに「クラスタとのつながり」=「HRDCでの興味のヒット率/UNIVERSEでの興味のヒット率」を求める。

3:「クラスターとの接続性」をソートし、高度に接続されたクラスターを選択します。

4:クラスター内のすべての頂点を、新しい関心のある頂点または高度に接続された頂点 (ページ ランキングを使用) と比較します。

于 2013-01-10T21:15:50.570 に答える
1

1 つの欠点は、アルゴリズムの複雑さを間違ったものに基づいていることです。本当の問題は、各固有の関心を他のすべての固有の関心 (およびその関心) と比較する必要があることです。

すべての興味が一意である場合は、おそらく何もできません。ただし、重複する関心が多数ある場合は、次の方法でアルゴリズムを高速化できます。

  1. 各関心を、その関心を持つユーザーに関連付けるグラフを作成します。高速なルックアップを可能にするような方法で。

  2. 各関心事項が他の関心事項とどのように関連しているかを示すグラフを作成します。これも高速なルックアップが可能な方法で行います。

したがって、新しいユーザーが追加されると、その関心は他のすべての関心と比較され、グラフに保存されます。次に、その情報を使用して、同様の関心を持つユーザーのリストを作成できます。そのユーザーのリストを何らかの方法でフィルタリングして、上位 10 位まで下げる必要があります。

最後に、そのユーザーとその関心をユーザーと関心のグラフに追加します。これは最後に行われるため、最も密接に一致する興味を持つユーザーはユーザー自身ではありません。

注: 次のようにできる統計的な近道があるかもしれません: A は B に関連し、B は C に関連し、C は D に関連し、したがって A は B、C、および D に関連します。ただし、これらの種類のショートカットを使用するには、比較関数がどのように機能するかをよりよく理解する必要がある可能性がありますが、これは私の専門知識を少し超えています。

おおよその解決策:

先ほど言い忘れましたが、ユーザーや興味を比較するときに見ているのは、高次元の「最近傍検索」です。つまり、正確な解の場合、線形検索は一般にデータ構造よりもうまく機能します。したがって、より速く必要な場合は、おそらく近似が最適な方法です。

おおよその解決策をすばやく取得するには (どれだけ近いかを保証することなく)、どのユーザーが新しいユーザーに似ている可能性が高いかをすばやく判断できるデータ構造が必要です。

その構造を構築する 1 つの方法:

  1. ランダムに 300 人のユーザーを選びます。これらは、300 クラスターのシード ユーザーになります。理想的には、関連性が最も低い 300 人のユーザーを使用しますが、それはおそらく実用的ではありません。それでも、シードのないユーザーが他のユーザーと密接に関連していることを確認するのが賢明かもしれません (比較対象の合計または平均として)。他のユーザー)。
  2. 次に、クラスタは、代表的なユーザーが最もよく一致するクラスタに参加する各ユーザーによって埋められます。
  3. 次に、そのクラスターから最も関連性の高い上位 10 人のユーザーを選択することで、トップ トンを決定できます。

クラスターの数とクラスターごとのユーザー数が常に sqrt(ユーザー数) にかなり近いことを確認すると、クラスター内のポイントのみをチェックすることで、O(sqrt(N)) で公正な近似値が得られます。追加のクラスターにユーザーを含め、各クラスターの代表的なユーザーを確認することで、その概算を改善できます。チェックするクラスターが多いほど、O(N) と正確な解に近づきます。ただし、現在の解が正確な解にどれだけ近いかを言う方法はおそらくないでしょう。合計 log(sqrt(N)) クラスター以上をチェックした後、リターンが減少し始める可能性があります。これにより、O(sqrt(N) log(sqrt(N))) になります。

于 2013-01-08T21:09:46.563 に答える
0

いくつかの考え...

正確にはグラフ理論のソリューションではありません。

利害の有限集合を仮定します。各ユーザーに対して、各関心がユーザーがその関心を持っているかどうかを表すビットであるビットシーケンスを維持します。新しいユーザーの場合、単純にビット シーケンスを既存のユーザーのビット シーケンスで乗算し、その結果のビット数を見つけます。これにより、ユーザーの関心がどれだけ一致しているかがわかります。

于 2013-01-10T07:40:49.667 に答える