Stanford-nlp分类器对n-gram的记忆力不足,n> 1

时间:2012-12-02 21:50:45

标签: memory machine-learning stanford-nlp

我正在尝试使用n-gram(n => 1,2,3)作为功能运行Stanford-nlp分类器的20 news text classification example,但我继续出现内存不足错误。按照我使用的属性和运行它的命令:

2.useSplitWordNGrams=true
2.maxWordNGramLeng=3               
2.minWordNGramLeng=1               

java -mx1800m -cp $STANFORD_CLASSIFIER_JAR edu.stanford.nlp.classify.ColumnDataClassifier \
   -trainFile 20news-devtrain.txt -testFile 20news-devtest.txt \
   -2.useSplitWords -2.splitWordsRegexp "\\s+" -prop 20news1.prop

对于unigrams,程序按预期运行。问题是我只有4G内存可用,我想知道是否有可能加载像这样的内存这么少的大型模型。

我试图通过将每篇文章的每个单词(在标记化之后)翻译成唯一的整数id来减少数据的大小,方法是在内存中使用“word,id”对保持散列。该方法设法将大小减小25%,但stil没有设法构建二元模型分类器。

我想在非常大的数据(网页)上使用stanford-nlp,所以我真的需要知道我是否可以使用合理数量的内存来运行它。任何想法将不胜感激!!

干杯, 迪米瑞斯

1 个答案:

答案 0 :(得分:1)

我不能说Stanford-NLP代码,但我可以回答一般关于n-gram的特性。如果您的词汇表中包含 v 项,则天真的二元模型具有 v ^ 2参数(并且三元模型具有 v ^ 3) 。如果您确定需要n-gram功能,那么您应该做的是找到最具辨别力的双字母组,并将它们用作功能。查看各种feature selection方法来执行此操作。