Я заинтересован в применении моделирования темы LDA, используя Spark MLlib. Я проверил код и объяснения в здесь, но я не смог найти, как использовать модель, чтобы найти распределение тем в новом невидимом документ.
Spark MLlib LDA, как определить распределение тем нового невидимого документа?
Ответ 1
Начиная с Spark 1.5 эта функция не была реализована для DistributedLDAModel
. Что вам нужно сделать, так это преобразовать вашу модель в LocalLDAModel
с помощью метода toLocal
, а затем вызвать метод topicDistributions(documents: RDD[(Long, Vector])
, где documents
- это новые (т.е. внеучебные) документы, что-то например:
newDocuments: RDD[(Long, Vector)] = ...
val topicDistributions = distLDA.toLocal.topicDistributions(newDocuments)
Это будет менее точным, чем алгоритм EM, который этот документ предлагает, но он будет работать. В качестве альтернативы вы можете просто использовать новый онлайн-вариационный алгоритм обучения EM, который уже приводит к LocalLDAModel
. В дополнение к тому, чтобы быть быстрее, этот новый алгоритм также предпочтительнее из-за того, что он, в отличие от старого алгоритма EM для подгонки DistributedLDAModels
, оптимизирует параметры (альфа) Дирихле перед темой смешивания весов для документов. Согласно Wallach, et. al., оптимизация альфов очень важна для получения хороших тем.