2013-04-13 17 views
5

私は比較的大きなテキストベースのWeb分類問題に取り組んでいます。私はpythonでsklearnで多項式Naive Bayesクラシファイアを使用し、クロール用にscrapyフレームワーク。しかし、私はsklearn/pythonが何百万ものウェブサイトの分類を含む可能性のある問題に対して遅すぎるかもしれないと少し気にしています。私はすでにDMOZの数千のウェブサイトで分類器を訓練しました。 大規模なアプリケーション分類/スクラップ練習にsklearnとPythonを使用する

1)クローラはドメイン名に上陸し、サイト上の20のリンク(1つ以下の深さのもの)からテキストをスクレイプします。 (ここでトークン化された単語の数は、クローラのサンプル実行では数千から最大150Kまで変化するようです) 2)約50,000のフィーチャを持つsklearn multionmial NBクラシファイアを実行し、結果に応じてドメイン名を記録してください

私の質問は、Pythonベースのクラシファイアがこのような大規模アプリケーション用のタスクになるかどうかです。より高速な環境でクラシファイア(そしておそらくスクレーパーとワードトークナイザ)を書き直すべきですか?はいの場合、その環境は何か? コードの並列化に伴ってPythonで十分でしょうか? おかげ

答えて

5

インクリメンタルベクトル化とロードメモリ内のすべてのデータを先行し、あなたが持っているべきではありませんしなくても、モデルを学習するHashingVectorizerとインスタンスSGDClassifierためpartial_fit APIをサポートしている線形分類モジュールの一つ、PerceptronまたはPassiveAggresiveClassifierを使用します数十万(ハッシュ)の機能を持つ何億ものドキュメントのクラシファイアを学習する際の問題です。

しかし、パイプラインオブジェクトとマスターブランチのRandomizedSearchCVクラスを使用して、ベクタライザのメモリ(たとえば100kドキュメント)とグリッド検索に適した小さなサブサンプルを読み込む必要があります。同じRandomizedSearchCVまたはメモリに収まるより大きな事前ベクトル化されたデータセット(たとえば、数千万件のドキュメント)を使用して、正則化パラメータ(たとえば、PassiveAggressiveClassifierの場合はC、SGDClassifierの場合はC)を微調整することもできます。あなたは、データセットを分割し、独立して線形モデルを学び、その後、最終的なモデルを取得するためのモデルを平均化することができるよう

また

線形モデルは、(平均coef_と2つの線形モデルのintercept_)を平均化することができます。

3

numpy、scipy、およびsklearnに依存している場合、Pythonはボトルネックにはならず、これらのライブラリの最も重要な部分がC拡張として実装されます。

しかし、何百万ものサイトを削っているので、あなたは1台のマシンの能力に縛られます。 PiCloud [1]やAmazon Web Services(EC2)のようなサービスを使用して、多くのサーバーに作業負荷を分散することを検討します。

クラウドキュー[2]を使用してスクレイピングを実行する例があります。

[1] http://www.picloud.com

[2] http://blog.picloud.com/2013/04/03/introducing-queues-creating-a-pipeline-in-the-cloud/

関連する問題