Получение словосочетания-матрицы из LDA-модели в Mallet
Я рассчитываю оценку модели LDA с помощью Mallet на Java и ищу термин-тема-матрица.
Расчет модели и получение темы-документа-матрицы идет хорошо:
ParallelTopicModel model = ...; //... estimating the model
int numTopics = model.getNumTopics();
int numDocs = model.getData().size();
// Getting the topic-probabilities
double[][] tmDist = new double[numDocs][];
for (int i = 0; i < numTopics; i++) {
tmDist[i] = model.getTopicProbabilities(i);
}
И теперь я могу получить только первые n слов:
Object[][] topWords = model.getTopWords(5);
for(int i = 0; i < topWords.length; i++){
for(int j = 0; j < topWords[i].length; j++){
System.out.print(topWords[i][j] + " ");
}
System.out.println();
}
Единственные ответы по этой проблеме, которые я нашел только вопросы / ответы по этой проблеме, касаются версии командной строки Mallet.
1 ответ
Этот фрагмент кода даст вам назначение темы всех слов для конкретного документа.
for (int topic = 0; topic < numTopics; topic++) {
Iterator<IDSorter> iterator = topicSortedWords.get(topic).iterator();
out = new Formatter(new StringBuilder(), Locale.US);
out.format("%d\t%.3f\t", topic, model.getTopicProbabilities(docID)[topic]);
int rank = 0;
while (iterator.hasNext() && rank < 5) {
IDSorter idCountPair = iterator.next();
out.format("%s (%.3f) ", dataAlphabet.lookupObject(idCountPair.getID()), idCountPair.getWeight());
rank++;
}
System.out.println(out);
}
System.out.println("\n");