Możliwość zastosowania algorytmów online na plikach big data w sklepie?

Chciałbym zastosować szybkie techniki redukcji wymiarów online, takie jak (online/mini-batch) Nauka słownika na dużych korpusach tekstowych. Moje dane wejściowe naturalnie nie mieszczą się w pamięci (dlatego chcę użyć algorytmu online), więc szukam implementacji, która może iterować nad plikiem, a nie ładować wszystko do pamięci. Czy można to zrobić ze sklepn ? czy istnieją alternatywy ?

Dzięki register

Author: Community, 2012-09-17

3 answers

Od Sklearn 0.13 istnieje implementacja HashingVectorizer .

EDIT: Oto pełnoprawny przykład takiej aplikacji

Zasadniczo ten przykład pokazuje, że można nauczyć się (np. klasyfikować tekst) na danych, które nie mieszczą się w pamięci głównej komputera (ale raczej na dysku / sieci / ...).

 7
Author: oDDsKooL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-25 12:37:25

Dla niektórych algorytmów obsługujących partial_fit, możliwe byłoby napisanie zewnętrznej pętli w skrypcie w celu dokonania poza rdzeniem klasyfikacji tekstu na dużą skalę. Istnieją jednak pewne brakujące elementy: czytnik zestawów danych, który iteruje nad danymi na dysku jako foldery plików płaskich lub serwer bazy danych SQL, lub magazyn NoSQL lub indeks Solr z przechowywanymi polami na przykład. Brakuje nam również wektoryzatora tekstu online.

Oto przykładowy szablon integracji, aby wyjaśnić, jak pasowałby razem.

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)

Klasa dataset reader jest specyficzna dla aplikacji i prawdopodobnie nigdy nie przejdzie do scikit-learn (może z wyjątkiem folderu płaskich plików tekstowych lub plików CSV, które nie wymagałyby dodania nowej zależności do biblioteki).

Część wektoryzatora tekstu jest bardziej problematyczna. Obecny vectorizer nie posiada metody partial_fit ze względu na sposób, w jaki budujemy słownictwo w pamięci (Python dict, który jest przycięty w zależności od max_df i min_df). Moglibyśmy zbudować jeden za pomocą zewnętrznego sklepu i upuść funkcje max_df i min_df.

Alternatywnie moglibyśmy zbudować HashingTextVectorizer, który wykorzystałby sztuczkę hashującą do porzucenia wymagań słownika. Żaden z nich nie istnieje w tej chwili (chociaż mamy już pewne elementy konstrukcyjne, takie jak wrapper murmurhash i pull request dla funkcji haszujących).

W międzyczasie radzę rzucić okiem na Vowpal Wabbit i może te pytony wiązania .

Edit: klasa sklearn.feature_extraction.FeatureHasher została połączona z główną gałęzią scikit-learn I będzie dostępna w następnym wydaniu (0.13). Zapoznaj się z dokumentacją ekstrakcji funkcji.

Edycja 2: 0.13 jest teraz dostępna zarówno z FeatureHasher, jak i HashingVectorizer, które mogą bezpośrednio radzić sobie z danymi tekstowymi.

Edit 3: jest teraz przykład uczenia się poza rdzeniem z zestawem danych Reuters w oficjalnej galerii przykładów projektu.

 25
Author: ogrisel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-24 18:33:00

Oprócz Vowpal Wabbit, gensim może być również interesujący - zawiera również utajoną alokację Dirichleta online.

 4
Author: Peter Prettenhofer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-18 11:52:55