5

これがばかげているなら申し訳ありませんが、私はちょうど私がショットを与えるべきだと思っていました。巨大なグラフ(たとえば、1,000億ノード)があるとします。Neo4Jは320億をサポートし、他はほぼ同じをサポートします。したがって、データベースにデータセット全体を同時に含めることはできないとしましょう。有向グラフ(ループなし)とノードの各セットが接続されている場合は、ページランクを実行できますか?次のノードセットへ(したがって、新しいリンクは逆方向に作成されず、新しいデータセットへの新しいリンクのみが作成されます)。

以前のページランクスコアを取得して新しいデータセットに適用する方法はありますか(最新のデータセットのページランクのみを考慮しますが、最後のセットのデータを取得するには前のセットのページランクが必要です)?

それは理にかなっていますか?もしそうなら、それは可能ですか?

4

1 に答える 1

5

1000 億 x 1000 億の行列の主固有ベクトルを計算する必要があります。非常にまばらでない限り、マシン内に収まりません。したがって、一度に行列のごく一部しか見ることができない場合、行列の主要な固有ベクトルを計算する方法が必要です。

固有ベクトルを計算する反復法では、各反復でいくつかのベクトルを保存するだけで済みます (それぞれに 1000 億の要素があります)。それらはあなたのマシンに収まるかもしれません (4 バイトの float では、ベクターごとに約 375GB が必要です)。ランキングの候補ベクトルを取得したら、チャンクでマトリックスを読み取ることにより、(非常にゆっくりと) 巨大なマトリックスをそれに適用できます (一度に 320 億行を表示できるため、必要なチャンクは 3 を少し超えるだけです)。このプロセスを繰り返すと、ページランクで使用される累乗法の基本が得られます。http://www.ams.org/samplings/feature-column/fcarc-pagerankおよびhttp://en.wikipedia.org/wiki/Power_iterationを参照

もちろん、ここでの制限要因は、マトリックスを調べる必要がある回数です。複数の候補ベクトルを保存し、いくつかのランダム化されたアルゴリズムを使用することで、データの読み取りを少なくして精度を高めることができることがわかりました。これは、応用数学の世界における現在の研究テーマです。詳細については、http://arxiv.org/abs/0909.4061、http://arxiv.org/abs/0909.4061、およびhttp://arxiv.org/abs/0809.2274を参照してください。ここで利用可能なコードがあります: http://code.google.com/p/redsvd/しかし、あなたが話しているデータサイズのためにその既製のものをそのまま使用することはできません.

これに対処する別の方法は、「インクリメンタル svd」を調べることです。これは、問題により適している可能性がありますが、もう少し複雑です。このメモを検討してください: http://www.cs.usask.ca/~spiteri/CSDA-06T0909e.pdfとこのフォーラム: https://mathoverflow.net/questions/32158/distributed-incremental-svd

于 2012-04-03T00:50:05.113 に答える