web-dev-qa-db-ja.com

大規模データセットのTFIDF

約800万のニュース記事があるコーパスがあり、それらのTFIDF表現をスパースマトリックスとして取得する必要があります。私はscikit-learnを使用して比較的少ないサンプル数でこれを行うことができましたが、入力マトリックスを最初にメモリに読み込むため、このような巨大なデータセットには使用できないと考えています。これは高価なプロセスです。

大きなデータセットのTFIDFベクトルを抽出する最良の方法は何でしょうか?

30
apurva.nandan

Gensimには効率的な tf-idfモデル があり、一度にすべてをメモリに保持する必要はありません。

コーパスは単に反復可能である必要があるため、コーパス全体を一度にメモリに格納する必要はありません。

make_wiki script は、コメントによるとラップトップで約50メートルでWikipediaを実行します。

HashingVectorizerを使用して小さなcsr_matrixをテキストデータから削除し、TfidfTransformerを使用します。 8M行と数万列の疎行列を格納することはそれほど大したことではありません。別のオプションは、TF-IDFをまったく使用しないことです。これは、TF-IDFがなくてもシステムが適切に機能する場合です。

実際には、データセットのサブサンプリングが必要になる場合があります。システムは、利用可能なすべてのデータの10%から学習するだけで、同じように動作する場合があります。これは経験的な質問であり、どの戦略があなたのタスクに最適かを前もって伝える方法はありません。必要だと確信するまで(つまり、明確な上昇傾向を示す学習曲線を見るまで)、8Mドキュメントへのスケーリングについて心配することはありません。

以下は例として今朝取り組んでいたものです。システムのパフォーマンスは、ドキュメントを追加するにつれて向上する傾向にあることがわかりますが、すでにほとんど違いがないと思われる段階にあります。トレーニングにかかる​​時間を考えると、500ファイルでトレーニングすることは私の時間の価値があるとは思いません。

11
mbatchkarov