2013-04-13 13 views
5

Pracuję nad relatywnie dużym problemem z klasyfikacją sieciową tekstu i planuję użyć wielomianowego klasyfikatora Naive Bayes w sklearn w pytonie i schematu scrapy dla indeksowania . Jednakże jestem trochę zaniepokojony tym, że sklearn/python może być zbyt wolny dla problemu, który mógłby obejmować klasyfikację milionów stron internetowych. Szkoliłem już klasyfikatora na kilku tysiącach stron internetowych z DMOZ. Ramy badań są następujące:Używanie Sklearna i Pythona do dużego sklasyfikowania/skrobania aplikacji

1) Przeszukiwacz trafia na nazwę domeny i skreśla tekst z 20 linków w witrynie (o głębokości nie większej niż jeden). (Liczba skazanych słów w tym miejscu zdaje się wynosić od kilku tysięcy do nawet 150 000 w przypadku próbnego uruchomienia robota). 2) Uruchom sklearn multionmialny klasyfikator NB z około 50 000 funkcji i zapisz nazwę domeny w zależności od wyniku

Moje pytanie brzmi, czy klasyfikator oparty na Pythonie byłby w stanie wykonać zadanie dla tak dużej aplikacji, czy powinienem spróbować ponownie napisać klasyfikator (a może również skrobak i tokenizer) w szybszym środowisku? Jeśli tak, jakie może być to środowisko? A może Python wystarczy, jeśli towarzyszy mu równoległość kodu? Dzięki

Odpowiedz

5

użyć HashingVectorizer i jeden z liniowych modułów klasyfikacyjnych, które obsługuje partial_fit API na przykład SGDClassifier, Perceptron lub PassiveAggresiveClassifier aby stopniowo uczyć modelu bez wektoryzacji i załadować wszystkie dane w pamięci góry i nie powinien mieć każdy problem z uczeniem się klasyfikatora na setkach milionów dokumentów z setkami tysięcy (zakodowanych) funkcji.

Powinieneś jednak załadować małą próbkę, która mieści się w pamięci (na przykład dokumenty 100k) i wyszukać dobre parametry siatki dla wektorownika, używając obiektu Pipeline i klasy RandomizedSearchCV gałęzi głównej. Możesz także dostroić wartość parametru regularyzacji (np. C dla PassiveAggressiveClassifier lub alpha dla SGDClassifier), używając tego samego RandomizedSearchCV lub większego, pre-wektoryzowanego zestawu danych, który mieści się w pamięci (na przykład kilka milionów dokumentów).

również modele liniowe mogą być uśredniane (średnio coef_ i intercept_ z 2 modeli liniowych), dzięki czemu można podzielić zbiór danych, niezależnie nauczyć modeli liniowych, a następnie uśrednić modeli, aby uzyskać końcowy model.

3

Zasadniczo, jeśli polegasz na numpy, scipy i sklearn, Python nie będzie wąskim gardłem, ponieważ najbardziej krytyczne części tych bibliotek są implementowane jako rozszerzenia C.

Ale skoro drapiesz miliony stron, będziesz ograniczony możliwościami pojedynczego komputera. Rozważę użycie usługi takiej jak PiCloud [1] lub Amazon Web Services (EC2) w celu rozłożenia obciążenia na wiele serwerów.

Przykładem może być lejek do skrobania w Cloud Queues [2].

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

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

Powiązane problemy