3

トピック表現を使用して、ユーザーとテキスト ドキュメント間の類似性を計算したいと考えています。つまり、各ドキュメントとユーザーは、トピック (神経科学、テクノロジーなど) のベクトルと、そのトピックがユーザー/ドキュメントにどの程度関連しているかによって表されます。

私の目標は、これらのベクトル間の類似性を計算して、類似したユーザー、記事、推奨記事を見つけることです。

Pearson Correlation を使用しようとしましたが、約 40k の記事に達し、ベクトルの長さが約 10k になると、メモリと時間がかかりすぎてしまいます。

私はnumpyを使用しています。

これを行うためのより良い方法を想像できますか? それとも(単一のマシン上で)避けられないのですか?

ありがとうございました

4

3 に答える 3

3

自分で作成するのではなく、 gensimを使用することをお勧めします。

于 2012-10-03T22:46:09.750 に答える
2

O(n^2)アイテムのペアの相関を計算するだけで、なぜ大量のメモリを消費することになるのか、よくわかりません。ウィキペディアの記事が指摘しているように、ピアソン相関を計算するには、 ここに画像の説明を入力

つまり、 を取得するにはcorr(X,Y)、一度に 2 つのベクトルしか必要ありません。データを一度に 1 ペアずつ処理する場合、メモリはまったく問題になりません。

すべてのベクトルを読み込んで行列因数分解を行う場合、それは別の話です。

O(n^2)計算時間については、これをアイテムのペアで比較する必要があるため、完全に理解しています。


Gensim は、妥当な時間枠内で単一の CPU/デスクトップ コンピューター上で適度なメモリ要件 (< 1 Gb) で実行できることが知られています。MacBook Pro、Intel Core i7 2.3GHz、16GB DDR3 RAM を使用して 8.2GB のデータセットで行った実験については、こちらを確認してください。あなたが持っているよりも大きなデータセットだと思います。


さらに大きなデータセットがある場合は、分散バージョンの gensim または map/reduce を試してみてください。

もう 1 つの方法は、局所性に依存するハッシュを試すことです。

于 2012-10-26T21:08:42.997 に答える
0

私のトリックは、ElasticSearch などの検索エンジンを使用することです。これは非常にうまく機能します。このようにして、すべての推奨システムの API を統合しました。詳細は次のとおりです。

  • コーパスによってトピック モデルをトレーニングします。各トピックは単語の配列であり、各単語には確率があり、最初の 6 つの最も可能性の高い単語をトピックの表現として使用します。
  • コーパス内の各ドキュメントについて、そのトピック分布を推測できます。分布は、各トピックの確率の配列です。
  • ドキュメントごとに、トピックの分布とトピックの表現を使用して偽のドキュメントを生成します。たとえば、偽のドキュメントのサイズは約 1024 ワードです。
  • ドキュメントごとに、トピックの分布とトピックの表現を使用してクエリを生成します。たとえば、クエリのサイズは約 128 ワードです。

以上で準備は完了です。同様の記事や他の記事のリストを取得したい場合は、検索を実行するだけです。

  • ドキュメントのクエリを取得し、偽のドキュメントでクエリによる検索を実行します。

この方法は非常に便利であることがわかりました。

于 2013-02-25T12:18:03.180 に答える