2013-04-13 33 views
5

Tôi đang làm việc trên một vấn đề phân loại web dựa trên văn bản tương đối lớn và tôi đang lập kế hoạch sử dụng trình phân loại đa thức Naive Bayes trong sklearn trong python và . Tuy nhiên, tôi hơi lo ngại rằng sklearn/python có thể quá chậm đối với một vấn đề có thể liên quan đến phân loại hàng triệu trang web. Tôi đã đào tạo trình phân loại trên hàng nghìn trang web từ DMOZ. Khung nghiên cứu như sau:Sử dụng sklearn và Python để thực hiện phân loại ứng dụng lớn/bài tập cạo râu

1) Trình thu thập thông tin trên một tên miền và loại bỏ văn bản từ 20 liên kết trên trang web (độ sâu không lớn hơn một). (Số lượng từ được mã hóa ở đây có vẻ khác nhau giữa vài nghìn đến tối đa 150K để chạy mẫu trình thu thập thông tin) 2) Chạy bộ phân loại NB multionmial skulearn với khoảng 50.000 tính năng và ghi lại tên miền tùy thuộc vào kết quả

Câu hỏi của tôi là liệu trình phân loại dựa trên Python có thể thực hiện nhiệm vụ cho một ứng dụng quy mô lớn hay tôi nên thử viết lại trình phân loại (và có thể cả trình gỡ rối và từ) trong môi trường nhanh hơn? Nếu có thì môi trường đó có thể là gì? Hoặc có lẽ Python là đủ nếu đi kèm với một số song song của mã? Cảm ơn

Trả lời

5

Sử dụng HashingVectorizer và một trong những module phân loại tuyến tính hỗ trợ API partial_fit ví dụ SGDClassifier, Perceptron hoặc PassiveAggresiveClassifier để từng bước tìm hiểu những mô hình mà không cần phải vectorize và tải tất cả các dữ liệu trong bộ nhớ trước và bạn không nên có bất kỳ vấn đề nào trong việc tìm hiểu một trình phân loại trên hàng trăm triệu tài liệu với hàng trăm nghìn tính năng. Tuy nhiên, bạn nên tải một mẫu phụ nhỏ phù hợp với bộ nhớ (ví dụ: 100k tài liệu) và tham số tìm kiếm lưới tốt cho vectorizer bằng cách sử dụng đối tượng Pipeline và lớp RandomizedSearchCV của nhánh chính. Bạn cũng có thể tinh chỉnh giá trị của thông số chuẩn hóa (ví dụ: C cho PassiveAggressiveClassifier hoặc alpha cho SGDClassifier) ​​bằng cách sử dụng cùng một số liệu RandomizedSearchCV hoặc lớn hơn, được vector hóa phù hợp với bộ nhớ (ví dụ: một vài triệu tài liệu).

Mô hình tuyến tính cũng có thể được tính trung bình (trung bình coef_intercept_ của 2 mô hình tuyến tính) để bạn có thể phân chia tập dữ liệu, tìm hiểu mô hình tuyến tính một cách độc lập và trung bình các mô hình để có được mô hình cuối cùng.

3

Về cơ bản, nếu bạn dựa vào một cách sần sùi, scipy và sklearn, Python sẽ không phải là nút cổ chai vì hầu hết các phần quan trọng của các thư viện đó được triển khai dưới dạng phần mở rộng C.

Nhưng, vì bạn đang cạo hàng triệu trang web, bạn sẽ bị ràng buộc bởi khả năng của máy tính duy nhất của mình. Tôi sẽ xem xét sử dụng một dịch vụ như PiCloud [1] hoặc Amazon Web Services (EC2) để phân phối khối lượng công việc của bạn trên nhiều máy chủ.

Ví dụ sẽ là phễu mẩu tin lưu niệm của bạn thông qua Hàng đợi trên đám mây [2].

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

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

Các vấn đề liên quan