ビッグテキストコーパスに(オンライン/ミニバッチ)辞書学習などの高速オンライン次元削減手法を適用したいと思います。私の入力データは当然メモリに収まりません(これがオンラインアルゴリズムを使用したい理由です)ので、すべてをメモリにロードするのではなく、ファイルを反復処理できる実装を探しています。sklearnでこれを行うことは可能ですか?代替案はありますか?
ありがとう登録
ビッグテキストコーパスに(オンライン/ミニバッチ)辞書学習などの高速オンライン次元削減手法を適用したいと思います。私の入力データは当然メモリに収まりません(これがオンラインアルゴリズムを使用したい理由です)ので、すべてをメモリにロードするのではなく、ファイルを反復処理できる実装を探しています。sklearnでこれを行うことは可能ですか?代替案はありますか?
ありがとう登録
をサポートする一部のアルゴリズム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:プロジェクトの公式サンプルギャラリーに、ロイターデータセットを使用したアウトオブコア学習の例があります。
Sklearn 0.13以降、HashingVectorizerの実装が実際にあります。
編集:これはそのようなアプリケーションの本格的な例です
基本的に、この例は、コンピューターのメインメモリ(ディスク/ネットワーク/ ...)に収まらないデータについて学習(テキストの分類など)できることを示しています。
Vowpal Wabbitに加えて、gensimも興味深いかもしれません-それはオンラインの潜在的ディリクレ割り当ても特徴としています。