Thuật toán phân cụm văn bản


17

Tôi có một vấn đề về việc phân cụm số lượng lớn các câu thành các nhóm theo ý nghĩa của chúng. Điều này tương tự như một vấn đề khi bạn có rất nhiều câu và muốn nhóm chúng theo ý nghĩa của chúng.

Những thuật toán được đề xuất để làm điều này? Tôi không biết trước số cụm (và khi nhiều dữ liệu sắp tới cũng có thể thay đổi), những tính năng nào thường được sử dụng để thể hiện mỗi câu?

Bây giờ tôi đang thử các tính năng đơn giản nhất chỉ với danh sách các từ và khoảng cách giữa các câu được xác định là:

nhập mô tả hình ảnh ở đây

(A và B là các bộ từ tương ứng trong câu A và B)

Liệu nó có ý nghĩa gì không?

Tôi đang cố gắng áp dụng thuật toán Mean-Shift từ thư viện scikit vào khoảng cách này, vì nó không yêu cầu số lượng cụm trước.

Nếu bất cứ ai sẽ tư vấn phương pháp / cách tiếp cận tốt hơn cho vấn đề - nó sẽ được đánh giá rất cao vì tôi vẫn chưa quen với chủ đề này.

Câu trả lời:


13

Kiểm tra phần mềm nguồn mở của Tập đoàn Stanford NLP ( http://www-nlp.stanford.edu/software ), đặc biệt là Trình phân loại Stanford ( http://www-nlp.stanford.edu/software/ classifier.shtml ) . Phần mềm được viết bằng Java, có thể sẽ làm bạn thích thú, nhưng cũng có các ràng buộc cho một số ngôn ngữ khác. Lưu ý, việc cấp phép - nếu bạn có kế hoạch sử dụng mã của họ trong các sản phẩm thương mại, bạn phải có giấy phép thương mại.

Một bộ thư viện mã nguồn mở thú vị khác, IMHO phù hợp cho nhiệm vụ này và hơn thế nữa, là khung song song cho máy học GraphLab ( http://select.cs.cmu.edu/code/graphlab ), bao gồm thư viện phân cụm , thực hiện phân cụm khác nhau các thuật toán ( http://select.cs.cmu.edu/code/graphlab/clustering.html ). Nó đặc biệt phù hợp với khối lượng dữ liệu rất lớn (như bạn có), vì nó thực hiện MapReducemô hình và do đó, hỗ trợ xử lý song song đa lõiđa bộ xử lý .

Bạn rất có thể nhận thức được những điều sau đây, nhưng tôi sẽ đề cập đến nó chỉ trong trường hợp. Bộ công cụ ngôn ngữ tự nhiên (NLTK) cho Python( http://www.nltk.org ) chứa các mô-đun để phân cụm / phân loại / phân loại văn bản. Kiểm tra chương liên quan trong NLTK Book: http://www.nltk.org/book/ch06.html .

CẬP NHẬT:

Nói về các thuật toán , có vẻ như bạn đã thử hầu hết các thuật toán từ scikit-learn, chẳng hạn như được minh họa trong ví dụ trích xuất chủ đề này: http://scikit-learn.org/ sóng / auto_examples / apply / topics_extraction_with_nmf.html . Tuy nhiên, bạn có thể tìm thấy các thư viện hữu ích khác, thực hiện rất nhiều thuật toán phân cụm , bao gồm Hệ số ma trận không âm (NMF) . Một trong những thư viện như vậy là Python Matrix Factorization (PyMF) với trang chủ tại https://code.google.com.vn/p/pymf và mã nguồn tại https://github.com/nils-werner/pymf . Một thư viện khác, thậm chí thú vị hơn, cũng dựa trên Python, là NIMFA, trong đó thực hiện các thuật toán NMF khác nhau : http://nimfa.biolab.si . Đây là một bài viết nghiên cứu, mô tả NIMFA: http://jmlr.org/ con / volume13 / zitnik12a / zitnik12a.pdf . Đây là một ví dụ từ tài liệu của nó, trình bày giải pháp cho vấn đề xử lý văn bản rất giống nhau của phân cụm chủ đề : http://nimfa.biolab.si/nimfa.examples.document.html .


1
Cảm ơn rất nhiều cho phản ứng chi tiết như vậy. Tôi sẽ đi qua tất cả các đề xuất của bạn, rất nhiều công việc để thử và kiểm tra! Ngoài ra tôi đã thấy rằng công cụ carrot2 thực sự làm rất tốt công việc phân cụm dữ liệu văn bản không giám sát. Liên kết đăng bài để tham khảo trong tương lai http://project.carrot2.org/
Maxim Galushka

@MaximGalushka: Bạn rất hoan nghênh! Tôi tò mò muốn tìm hiểu về những phát hiện của bạn và tiến trình mà bạn sẽ đạt được cuối cùng. Hãy gửi bài ở đây hoặc kết nối trực tiếp với tôi.
Alexanderr Blekh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.