Mallet HierarchicalLDATUI 为某些文件抛出 NullPointerException
Mallet HierarchicalLDATUI throws NullPointerException for certain files
这几天开始使用Mallet。我对 运行 分层主题模型特别感兴趣,例如 HLDA 或 HPAM。使用 cc.mallet.topics.tui.HierarchicalLDATUI
class 导入示例数据文件并 运行 它们时,我得到了结果,没有问题。
当运行与二战维基百科文章相同时,导入后出现以下错误:
$ 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 社区指出这一点。这不是我的代码,它是一个开源软件,是我在我的电脑上编译的。我错过了阅读整个代码以找出错误的时间和概述。
花了一些时间,但我找到了问题的答案,而且似乎太简单了。
HLDATUI 将文件视为文档,这意味着如果只有一个文件,则文档不足,程序会崩溃。这意味着一个人必须导入多个文件。
我个人情况的解决方法是写一个程序,将我要运行 HLDATUI上的.xml文件分割成多个小文件,然后导入并进行了分析。
这几天开始使用Mallet。我对 运行 分层主题模型特别感兴趣,例如 HLDA 或 HPAM。使用 cc.mallet.topics.tui.HierarchicalLDATUI
class 导入示例数据文件并 运行 它们时,我得到了结果,没有问题。
当运行与二战维基百科文章相同时,导入后出现以下错误:
$ 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 社区指出这一点。这不是我的代码,它是一个开源软件,是我在我的电脑上编译的。我错过了阅读整个代码以找出错误的时间和概述。
花了一些时间,但我找到了问题的答案,而且似乎太简单了。
HLDATUI 将文件视为文档,这意味着如果只有一个文件,则文档不足,程序会崩溃。这意味着一个人必须导入多个文件。
我个人情况的解决方法是写一个程序,将我要运行 HLDATUI上的.xml文件分割成多个小文件,然后导入并进行了分析。