Algoritma untuk pengelompokan teks

17

Saya memiliki masalah mengelompokkan kalimat dalam jumlah besar ke dalam kelompok dengan artinya. Ini mirip dengan masalah ketika Anda memiliki banyak kalimat dan ingin mengelompokkannya berdasarkan artinya.

Algoritma apa yang disarankan untuk melakukan ini? Saya tidak tahu jumlah cluster di muka (dan karena semakin banyak data yang datang, cluster juga dapat berubah), fitur apa yang biasanya digunakan untuk mewakili setiap kalimat?

Saya sedang mencoba fitur paling sederhana dengan daftar kata dan jarak antara kalimat yang didefinisikan sebagai:

masukkan deskripsi gambar di sini

(A dan B adalah kumpulan kata yang sesuai dalam kalimat A dan B)

Apakah ini masuk akal?

Saya mencoba menerapkan algoritma Mean-Shift dari pustaka scikit ke jarak ini, karena tidak memerlukan jumlah cluster di muka.

Jika ada yang akan menyarankan metode / pendekatan yang lebih baik untuk masalah ini - itu akan sangat dihargai karena saya masih baru dalam topik ini.

Maxim Galushka
sumber

Jawaban:

13

Periksa perangkat lunak sumber terbuka Stanford NLP Group ( http://www-nlp.stanford.edu/software ), khususnya, Stanford Classifier ( http://www-nlp.stanford.edu/software/classifier.shtml ) . Perangkat lunak ini ditulis Java, yang kemungkinan akan menyenangkan Anda, tetapi juga memiliki ikatan untuk beberapa bahasa lain. Catatan, lisensi - jika Anda berencana untuk menggunakan kode mereka dalam produk komersial, Anda harus memperoleh lisensi komersial.

Satu set perpustakaan open source yang menarik, IMHO cocok untuk tugas ini dan banyak lagi, adalah kerangka paralel untuk pembelajaran mesin GraphLab ( http://select.cs.cmu.edu/code/graphlab ), yang mencakup perpustakaan pengelompokan , menerapkan berbagai pengelompokan algoritma ( http://select.cs.cmu.edu/code/graphlab/clustering.html ). Ini sangat cocok untuk volume data yang sangat besar (seperti yang Anda miliki), karena mengimplementasikan MapReducemodel dan, dengan demikian, mendukung pemrosesan paralel multicore dan multiprosesor .

Anda kemungkinan besar menyadari hal-hal berikut, tetapi saya akan menyebutkannya untuk berjaga-jaga. Natural Language Toolkit (NLTK) untuk Python( http://www.nltk.org ) berisi modul untuk pengelompokan / klasifikasi / pengelompokan teks. Periksa bab yang relevan di NLTK Book: http://www.nltk.org/book/ch06.html .

MEMPERBARUI:

Berbicara tentang algoritma , tampaknya Anda telah mencoba sebagian besar dari scikit-learn, seperti diilustrasikan dalam contoh ekstraksi topik ini: http://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf.html . Namun, Anda mungkin menemukan perpustakaan lain yang bermanfaat, yang menerapkan berbagai algoritma pengelompokan , termasuk Non-Negative Matrix Factorization (NMF) . Salah satu perpustakaan tersebut adalah Python Matrix Factorization (PyMF) dengan beranda di https://code.google.com/p/pymf dan kode sumber di https://github.com/nils-werner/pymf . Pustaka lain, yang bahkan lebih menarik, juga berbasis Python, adalah NIMFA, yang mengimplementasikan berbagai algoritma NMF : http://nimfa.biolab.si . Berikut makalah penelitian, yang menjelaskan NIMFA: http://jmlr.org/papers/volume13/zitnik12a/zitnik12a.pdf . Berikut adalah contoh dari dokumentasinya, yang menghadirkan solusi untuk masalah pemrosesan teks yang sangat mirip dari pengelompokan topik : http://nimfa.biolab.si/nimfa.examples.documents.html .

Aleksandr Blekh
sumber
1
Terima kasih banyak atas tanggapan terinci seperti itu. Saya akan memeriksa semua saran Anda, banyak pekerjaan untuk dicoba dan diuji! Juga saya telah menemukan bahwa alat carrot2 benar-benar melakukan pekerjaan yang baik pada pengelompokan data tekstual yang tidak diawasi. Tautan
pengeposan
@ MaximGalushka: Terima kasih kembali! Saya ingin tahu tentang temuan Anda dan kemajuan yang akan Anda capai pada akhirnya. Jangan ragu untuk memposting di sini atau terhubung langsung dengan saya.
Aleksandr Blekh