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
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 / ...).
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.
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.
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