【问题标题】:Getting the word-topic-matrix from LDA-model in Mallet从 Mallet 中的 LDA-model 获取 word-topic-matrix
【发布时间】:2015-03-12 01:35:51
【问题描述】:

我正在用 Java 中的 Mallet 计算 LDA 的模型估计,并正在寻找 term-topic-matrix

计算模型并获得主题文档矩阵顺利:

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 的命令行版本。

【问题讨论】:

    标签: java matrix lda 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");
    

    【讨论】:

    • 感谢 Abhishek,但我已经知道这个例子 (mallet.cs.umass.edu/topics-devel.php)。我正在寻找一个由字母 x 术语 - 关系组成的数组/矩阵。
    • 不就是把上面这段代码的输出安排成矩阵的形式吗?抱歉,如果我没有正确理解您的问题。
    • 是的,你是对的,它只是作为矩阵的重新排列,填充空单元格(因为并非每个主题都包含完整的字母表),然后根据相对计数对其进行归一化。
    猜你喜欢
    • 2012-01-16
    • 2019-03-21
    • 2021-10-05
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2015-10-22
    相关资源
    最近更新 更多