Mallet HierarchicalLDATUI为某些文件

时间:2018-01-16 19:10:34

标签: java mallet

在过去的几天里,我开始使用Mallet。我特别感兴趣的是运行分层主题模型,如HLDA或HPAM。导入示例数据文件并使用cc.mallet.topics.tui.HierarchicalLDATUI类运行它时,我得到结果,没有问题。

在WW2上的维基百科文章中运行相同内容时,导入后我收到以下错误:

$ bin/mallet run cc.mallet.topics.tui.HierarchicalLDATUI --input ww2.mallet
    Exception in thread "main" java.lang.NullPointerException 
    at cc.mallet.topics.HierarchicalLDA$NCRPNode.dropPath(HierarchicalLDA.java:637)
    at cc.mallet.topics.HierarchicalLDA.samplePath(HierarchicalLDA.java:164)
    at cc.mallet.topics.HierarchicalLDA.estimate(HierarchicalLDA.java:133)
    at cc.mallet.topics.tui.HierarchicalLDATUI.main(HierarchicalLDATUI.java:109)

我导入了这样的数据:

$ bin/mallet import-dir --input ww2Wiki --output ww2.mallet --keep-sequence TRUE --skip-html TRUE --remove-stopwords TRUE

为了让您的生活更轻松,请参阅HierarchicalLDA.java中出现错误的代码(第627-640行)

public void dropPath() {
    NCRPNode node = this;
    node.customers--;
    if (node.customers == 0) {
        node.parent.remove(node);
    }
    for (int l = 1; l < numLevels; l++) {
        node = node.parent;
        node.customers--;
        if (node.customers == 0) {
            node.parent.remove(node); //line 637 (producing the error)
        }
    }
}

看起来,在NCRP实现期间,它尝试删除null节点时发生错误。我不知道为什么这会发生在某些文件中,而不会发生在其他文件中。

我检查了它是否是与cc.mallet.topics.HierarchicalPAM上运行相同文件的文件相关的一般问题,并且文件正常工作,HPAM产生合理的结果。其他文件在HLDA实现中有效,所以我认为这不是代码本身。

此时我无能为力。有没有人遇到并解决过这个问题?

谢谢!

PS:我觉得我必须为Java社区指出这一点。这不是我的代码,它是一个开源软件,我在我的电脑上编译。我缺少时间和概述来阅读整个代码以追踪错误。

1 个答案:

答案 0 :(得分:0)

花了一段时间,但我找到了问题的答案,看起来太简单了。

HLDATUI将文件视为文档,这意味着如果只有一个文件,则文档不足,程序崩溃。这意味着必须导入多个文件。

我个人情况的解决方案是,我将编写一个程序,将我想运行HLDATUI的.xml文件拆分为多个较小的文件,然后可以导入和分析。