Jestem zainteresowany zastosowaniem modelu tematycznego LDA przy użyciu Spark MLlib. Sprawdziłem kod i objaśnienia w here, ale nie mogłem znaleźć sposobu użycia tego modelu, aby znaleźć dystrybucję tematów w nowym niewidocznym dokumencie.Spark MLlib LDA, jak wnioskować o rozkładzie tematów nowego niewidocznego dokumentu?
Odpowiedz
Od wersji Spark 1.5 ta funkcja nie została zaimplementowana dla DistributedLDAModel
. Co masz zamiar trzeba zrobić, to przekształcić swój model do LocalLDAModel
stosując metodę toLocal
a następnie wywołać metodę topicDistributions(documents: RDD[(Long, Vector])
gdzie documents
są nowe (tj out-of-szkolenia) dokumenty, coś takiego:
newDocuments: RDD[(Long, Vector)] = ...
val topicDistributions = distLDA.toLocal.topicDistributions(newDocuments)
To będzie mniej dokładne niż algorytm EM, który sugeruje this paper, ale zadziała. Alternatywnie, możesz po prostu użyć nowego algorytmu szkolenia wariacyjnego EM online, który już daje LocalLDAModel
. Oprócz tego, że jest on szybszy, ten nowy algorytm jest również korzystniejszy ze względu na fakt, że w przeciwieństwie do starszego algorytmu EM do dopasowywania DistributedLDAModels
, optymalizuje parametry (alphas) Dirichleta wcześniej, niż zmiesza wagę dla dokumentów. Według Wallach, et. al., optymalizacja alfów jest bardzo ważna dla uzyskania dobrych tematów.
dzięki. odpowiedź jest bardzo przydatna! Jeśli to możliwe, czy można opracować więcej w jaki sposób wyodrębnić dane wyjściowe z sekcji Składniki tematów do bardziej reprezentowalnych wyników? – HappyCoding
Zaimplementowałem to i pokazałem, jak wydrukować tytułDystrybucje [tutaj] (https://gist.github.com/alex9311/774089d936eee505d7832c6df2eb597d) – alex9311
Czy coś zmieniono dla wersji 1.6? –