2012-12-02 19 views
1

我試圖用n-grams(n => 1,2,3)作爲特徵運行Stanford-nlp分類器的20 news text classification example作爲特徵,但我繼續出現內存不足錯誤。繼我使用的屬性和命令運行它:Stanford-nlp分類器內存不足n-gram,n> 1

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

我不能給斯坦福NLP代碼說話,但我可以回答一般約正語法特徵。如果您的詞彙表中有v項目,那麼天真的bigram模型具有v^2參數(並且三元模型具有v^3)。你應該做的是找到最具判別力的bigrams,並將它們用作特徵,如果你確定需要n-gram特徵的話。看看各種feature selection方法來做到這一點。

+0

那是正確的。此外,還有Zipfs法則,我們可以跳過幾乎一半的特徵(單例),而不影響分類性能。 – ArisRe82