Gizli Dirichlet Tahsisinden elde edilen konuları kullanarak belgelerin kümelenmesi


9

Latent Dirichlet Tahsisini bir proje için kullanmak istiyorum ve Python'u gensim kütüphanesi ile kullanıyorum. Konuları bulduktan sonra, belgeleri k-means gibi bir algoritma kullanarak kümelemek istiyorum (İdeal olarak üst üste binen kümeler için iyi bir tane kullanmak istiyorum, böylece herhangi bir öneri memnuniyetle karşılanmaktadır). Konuları almayı başardım ama bunlar şu şekildedir:

0.041 * Bakan + 0.041 * Anahtar + 0.041 * anlar + 0.041 * tartışmalı + 0.041 * Başbakan

Bir kümeleme algoritması uygulamak ve yanlışsam beni düzeltmek için, her kelimeyi tfidf veya word2vec kullanarak sayı olarak göstermenin bir yolunu bulmam gerektiğine inanıyorum.

Bunu yapmak ve sonra uygun çarpımı yapmak için geri yerleştirmek için, örneğin bir listeden metin bilgilerini nasıl "şerit" olabilir hakkında herhangi bir fikrin var mı?

Örneğin, Bakan kelimesinin tfidf ağırlığı 0.042 ve benzeri ise, aynı konu içindeki başka bir kelime için gördüğüm şekilde şöyle bir şey hesaplamalıyım:

0,041 * 0,42 + ... + 0,041 * tfidf (Prime) ve sonuçları kümelemek için daha sonra kullanılacak bir sonuç elde edin.

Zaman ayırdığınız için teşekkür ederim.


1
Öğreticide açıklandığı gibi, belgeleri vektör olarak ifade edebilirsiniz. Bu vektörleri kümeleyin.
Emre

Dostum biliyorum ama koleksiyonumda LDA uyguladıktan sonra oluşturulan konulara göre kümelenmeliyim. Her bir konuyu her bir konuyla karşılaştırmak ve her bir dokümanın muhabir konusunu veya konularını bulmak için her konu bir vektör olarak temsil edilmelidir.
Swan87

Her kelimeyi bir vektör olarak temsil etmek zorunda değilsiniz. Sen tüm yeni sunum elde belgenin Öğrendiğiniz LDA dönüşümü uygulanarak bütünceye . LSI ile bir örnek için bu bağlantıya bakınız: radimrehurek.com/gensim/tut2.html önemli öğelerinden biri olan onlar [doc_bow] LSI ile tüm korpusuna öğrenilen LSI dönüşümü uygulamak nerede
Will Stanton

Yanıtlar:


4

LDA'nın bir konu listesi oluşturduğunu ve her bir belge için her konuya bir puan koyduğunu varsayarsak, belgeyi temsil edebilirsiniz ve puanları bir vektör olarak:

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

Her bir dokümanın puanlarını almak için dokümanı çalıştırabilirsiniz. eğitimli bir LDA modeli aracılığıyla bir kelime torbası olarak. Gensim belgelerinden:

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

Daha sonra, bu matriste k-araçlarını çalıştırabilirsiniz ve birbirine benzer belgeleri gruplandırmalıdır. K-araçları, varsayılan olarak, her bir belgeyi bir kümede sınıflandırdığını ima eden bir sabit kümeleme algoritmasıdır. Belgenin bir kümeye sığma olasılığını gösteren yumuşak kümeleme mekanizmalarını kullanabilirsiniz - buna bulanık k-ortalamaları denir . https://gist.github.com/mblondel/1451300 scikit öğrenmeyle nasıl yapabileceğinizi gösteren bir Python özüdür.

ps: 2'den fazla bağlantı gönderemiyorum


Bunu "n" için yapmaya çalıştım hiçbir belge konuların t nerede olduğunu söylemek. Bununla birlikte, x no'lu doküman için, tüm t konuları prob sadece bazı (t- no) konuları göstermez, burada 1 <= hayır <t. Denemeyi küçük belge boyutunda çalıştırdığımda olmaz. Eğer prob 0 ise hiç yazdırmıyor mu?
Manish Ranjan

0

Önceki cevabı tamamlayıcı olarak, sadece kmda'ları doğrudan lda konu-doc dağıtımından türetilen kompozisyon verileri üzerinde çalıştırmamalı, onları ilr veya clr gibi öklid uzayına yansıtmak için bazı kompozisyon veri dönüşümlerini kullanmalısınız.

( Örnek )

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.