Pengelompokan dokumen menggunakan topik yang berasal dari Latent Dirichlet Allocation

9

Saya ingin menggunakan Alokasi Dirichlet Laten untuk proyek dan saya menggunakan Python dengan perpustakaan gensim. Setelah menemukan topik saya ingin mengelompokkan dokumen menggunakan algoritma seperti k-means (Idealnya saya ingin menggunakan yang baik untuk tumpang tindih cluster sehingga rekomendasi pun disambut). Saya berhasil mendapatkan topik tetapi dalam bentuk:

0,041 * Menteri + 0,041 * Kunci + 0,041 * momen + 0,041 * kontroversial + 0,041 * Perdana

Untuk menerapkan algoritma pengelompokan, dan koreksi saya jika saya salah, saya yakin saya harus menemukan cara untuk mewakili setiap kata sebagai angka menggunakan tfidf atau word2vec.

Apakah Anda punya ide tentang bagaimana saya dapat "menghapus" informasi tekstual dari misalnya daftar, untuk melakukannya dan kemudian mengembalikannya untuk membuat perkalian yang sesuai?

Misalnya cara saya melihatnya jika kata Menteri memiliki bobot tfidf 0,042 dan seterusnya untuk kata lain dalam topik yang sama saya harus menghitung sesuatu seperti:

0,041 * 0,42 + ... + 0,041 * tfidf (Perdana) dan dapatkan hasil yang nantinya akan digunakan untuk mengelompokkan hasil.

Terima kasih atas waktu Anda.

Swan87
sumber
1
Seperti yang dijelaskan dalam tutorial , Anda dapat mengekspresikan dokumen sebagai vektor. Klaster vektor-vektor itu.
Emre
Saya tahu pasangan tetapi saya harus mengelompokkannya sesuai dengan topik yang dibuat setelah saya menerapkan LDA pada koleksi saya. Setiap topik harus direpresentasikan sebagai vektor untuk membandingkan setiap dokumen dengan setiap topik dan menemukan topik korespondensi atau topik untuk setiap dokumen.
Swan87
Anda tidak harus mewakili setiap kata sebagai vektor. Anda mendapatkan representasi baru untuk seluruh dokumen dengan menerapkan transformasi LDA yang Anda pelajari ke korpus . Untuk contoh dengan LSI, lihat tautan ini: radimrehurek.com/gensim/tut2.html Bagian kuncinya adalah di mana mereka menerapkan transformasi LSI terpelajar ke seluruh korpus dengan lsi [doc_bow]
Will Stanton

Jawaban:

4

Dengan asumsi bahwa LDA menghasilkan daftar topik dan memberikan skor terhadap setiap topik untuk setiap dokumen, Anda dapat mewakili dokumen dan skor itu sebagai vektor:

Document | Prime | Minister | Controversial | TopicN | ...
   1       0.041    0.042      0.041          ...
   2       0.052    0.011      0.042          ...

Untuk mendapatkan skor untuk setiap dokumen, Anda dapat menjalankan dokumen. sebagai kantong kata-kata, melalui model LDA yang terlatih. Dari dokumentasi gensim:

>>> lda = LdaModel(corpus, num_topics=100)  # train model
>>> print(lda[doc_bow]) # get topic probability distribution for a document

Kemudian, Anda bisa menjalankan k-means pada matriks ini dan harus mengelompokkan dokumen yang serupa. K-means secara default adalah algoritma pengelompokan keras yang menyiratkan bahwa itu mengklasifikasikan setiap dokumen menjadi satu kelompok. Anda bisa menggunakan mekanisme pengelompokan lunak yang akan memberi Anda skor probabilitas yang cocok dengan sebuah dokumen dalam sebuah kluster - ini disebut fuzzy k-means . https://gist.github.com/mblondel/1451300 adalah intisari Python yang menunjukkan bagaimana Anda dapat melakukannya dengan scikit belajar.

ps: Saya tidak dapat memposting lebih dari 2 tautan

Abu
sumber
Saya mencoba melakukan itu untuk "n" tidak ada dokumen yang mengatakan di mana topik t. Namun untuk mengatakan x tidak dari dokumen, semua topik t prob tidak muncul hanya beberapa (t- tidak) topik prob muncul, di mana 1 <= tidak <t. Itu tidak terjadi ketika saya menjalankan percobaan pada ukuran dokumen kecil. Apakah karena tidak mencetak sama sekali jika prob adalah 0?
Manish Ranjan
0

Sebagai pelengkap jawaban sebelumnya, Anda sebaiknya tidak hanya menjalankan kman secara langsung pada data komposisi yang berasal dari distribusi topik-dok lda, alih-alih menggunakan beberapa transformasi data komposisi untuk memproyeksikannya ke ruang euclidean seperti ilr atau clr.

( Contoh )

Anestis Fachantidis
sumber