23

ビッグテキストコーパスに(オンライン/ミニバッチ)辞書学習などの高速オンライン次元削減手法を適用したいと思います。私の入力データは当然メモリに収まりません(これがオンラインアルゴリズムを使用したい理由です)ので、すべてをメモリにロードするのではなく、ファイルを反復処理できる実装を探しています。sklearnでこれを行うことは可能ですか?代替案はありますか?

ありがとう登録

4

3 に答える 3

25

をサポートする一部のアルゴリズムpartial_fitでは、スクリプトに外部ループを記述して、コア外の大規模なテキスト分類を行うことができます。ただし、欠落している要素がいくつかあります。たとえば、フラットファイルまたはSQLデータベースサーバーのフォルダーとしてディスク上のデータを反復処理するデータセットリーダー、NoSQLストアまたは格納されたフィールドを持つSolrインデックスなどです。また、オンラインテキストベクトライザーもありません。

これは、どのように組み合わせるかを説明するためのサンプル統合テンプレートです。

import numpy as np
from sklearn.linear_model import Perceptron

from mymodule import SomeTextDocumentVectorizer
from mymodule import DataSetReader

dataset_reader = DataSetReader('/path/to/raw/data')

expected_classes = dataset_reader.get_all_classes()  # need to know the possible classes ahead of time

feature_extractor = SomeTextDocumentVectorizer()
classifier = Perceptron()

dataset_reader = DataSetReader('/path/to/raw/data')

for i, (documents, labels) in enumerate(dataset_reader.iter_chunks()):

    vectors = feature_extractor.transform(documents)
    classifier.partial_fit(vectors, labels, classes=expected_classes)

    if i % 100 == 0:
        # dump model to be able to monitor quality and later analyse convergence externally
        joblib.dump(classifier, 'model_%04d.pkl' % i)

データセットリーダークラスはアプリケーション固有であり、おそらくscikit-learnに組み込まれることはありません(ライブラリに新しい依存関係を追加する必要のないフラットテキストファイルまたはCSVファイルのフォルダーを除く)。

テキストベクトライザーの部分はもっと問題があります。partial_fit現在のベクトライザーには、メモリ内の語彙(max_dfとmin_dfに応じてトリミングされるpython dict)を構築する方法のため、メソッドがありません。外部ストアを使用してビルドし、max_dfおよびmin_df機能を削除することもできます。

または、ハッシュトリックを使用して辞書の要件を削除するHashingTextVectorizerを作成することもできます。現時点ではそれらは存在しません(ただし、マーマーハッシュラッパーやハッシュ機能のプルリクエストなどのビルディングブロックはすでにいくつかあります)。

それまでの間、 VowpalWabbitとおそらくそれらのpythonバインディングを確認することをお勧めします。

編集:クラスsklearn.feature_extraction.FeatureHasherはscikit-learnのマスターブランチにマージされており、次のリリース(0.13)で利用できるようになります。特徴抽出に関するドキュメントをご覧ください。

編集2: 0.13が両方FeatureHasherでリリースされHashingVectorizer、テキストデータを直接処理できるようになりました。

編集3:プロジェクトの公式サンプルギャラリーに、ロイターデータセットを使用したアウトオブコア学習の例があります。

于 2012-09-17T14:00:45.720 に答える
7

Sklearn 0.13以降、HashingVectorizerの実装が実際にあります。

編集:これはそのようなアプリケーションの本格的な例です

基本的に、この例は、コンピューターのメインメモリ(ディスク/ネットワーク/ ...)に収まらないデータについて学習(テキストの分類など)できることを示しています。

于 2013-05-22T08:41:26.290 に答える
4

Vowpal Wabbitに加えて、gensimも興味深いかもしれません-それはオンラインの潜在的ディリクレ割り当ても特徴としています。

于 2012-09-18T11:52:55.733 に答える