В последние несколько дней я начал использовать Маллет. Меня особенно интересует использование иерархической тематической модели, такой как HLDA или HPAM. При импорте образцов файлов данных и запуске их с использованием класса cc.mallet.topics.tui.HierarchicalLDATUI
я получаю результаты, никаких проблем.
При запуске того же в статье Википедии о Второй мировой войне после импорта я получаю следующую ошибку:
$ 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. Это не мой код, это программное обеспечение с открытым исходным кодом, которое я скомпилировал на своем компьютере. Мне не хватает времени и обзора, чтобы прочитать весь код, чтобы отследить ошибку.