代码之家  ›  专栏  ›  技术社区  ›  MrDeal

Mallet HierarchyCallDatui为某些文件引发NullPointerException

  •  0
  • MrDeal  · 技术社区  · 7 年前

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

    在WW2上的Wikipedia文章上运行相同的操作时,导入后我会出现以下错误:

    $ 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 回复  |  直到 7 年前
        1
  •  0
  •   MrDeal    7 年前

    花了一段时间,但我找到了问题的答案,而且似乎太简单了。

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

    解决我个人情况的办法是,我将编写一个程序,该程序将拆分。我想在多个较小的文件中运行HLDATUI的xml文件,然后可以导入和分析这些文件。