pyspark LDA получи слова в темах - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь запустить LDA.Я не применяю это к словам и документам, но сообщениям об ошибках и причине ошибки.каждая строка является ошибкой, а каждый столбец - причиной ошибки.Ячейка равна 1, если причина ошибки была активной, и 0, если причина ошибки не была активной.Теперь я пытаюсь получить для каждой созданной темы (здесь эквивалентно шаблону ошибки) имена причин ошибок (а не только индекс).Код, который у меня есть до сих пор и который, кажется, работает:

# VectorAssembler combines all columns into one vector
assembler = VectorAssembler(
    inputCols=list(set(df.columns) - {'error_ID'}),
    outputCol="features")
lda_input = assembler.transform(df)

# Train LDA model
lda = LDA(k=5, maxIter=10, featuresCol= "features")
model = lda.fit(lda_input)

# A model with higher log-likelihood and lower perplexity is considered to be good.
ll = model.logLikelihood(lda_input)
lp = model.logPerplexity(lda_input)
print("The lower bound on the log likelihood of the entire corpus: " + str(ll))
print("The upper bound on perplexity: " + str(lp))

# Describe topics.
topics = model.describeTopics(7)
print("The topics described by their top-weighted terms:")
topics.show(truncate=False)

# Shows the result
transformed = model.transform(lda_input)
print(transformed.show(truncate=False))

Мои выводы:

enter image description here for each row На основе https://spark.apache.org/docs/latest/mllib-clustering.html#latent-dirichlet-allocation-lda Я добавил ту часть, которая не работает:

 topics = model.topicsMatrix()
    for topic in range(10):
        print("Topic " + str(topic) + ":")
        for word in range(0, model.vocabSize()): 
            print(" " + str(topics[word][topic]))

Как мне теперь получить главные причины ошибок / найти столбцы, соответствующие индексам терминов?

1 Ответ

0 голосов
/ 02 апреля 2019

Чтобы перебрать DenseMatrix, вам нужно преобразовать его в массив.Это не должно давать ошибку.Однако я не уверен насчет распечатанного результата, так как он зависит от ваших данных.

topn_words = 10
num_topics = 10

topics = model.topicsMatrix().toArray()
for topic in range(num_topics):
    print("Topic " + str(topic) + ":")
    for word in range(0, topn_words): 
        print(" " + str(topics[word][topic]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...