1

我正在尝试以 n-gram(n=>1,2,3) 作为特征运行 Stanford-nlp 分类器的20 个新闻文本分类示例,但我继续出现内存不足错误。遵循我正在使用的属性和运行它的命令:

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

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

我试图通过将每篇文章的每个单词(在标记化之后)转换为唯一的整数 id 来减小数据的大小,方法是在内存中使用“单词,id”对保持哈希。这种方法设法减少了 25% 的大小,但仍然没有设法建立二元模型分类器。

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

干杯,迪米特里斯

4

1 回答 1

1

我不能说斯坦福-NLP 代码,但我可以笼统地回答有关 n-gram 特征的问题。如果你的词汇表中有v个项目,那么一个朴素的二元模型有v ^2 个参数(而一个三元模型有v ^3)。你应该做的是找到最具辨别力的二元组,并将它们用作特征,如果你确定你想要 n-gram 特征。查看各种特征选择方法来做到这一点。

于 2012-12-03T15:57:07.400 回答