在java中保存和加载训练有素的斯坦福分类器

时间:2017-03-28 06:22:25

标签: java twitter stanford-nlp text-classification maxent

我有一个100万标记句子的数据集,并用它来通过最大熵找到情绪。我正在使用斯坦福分类器: -

public class MaximumEntropy {

static ColumnDataClassifier cdc;

public static float calMaxEntropySentiment(String text) {
    initializeProperties();
    float sentiment = (getMaxEntropySentiment(text));
    return sentiment;
}

public static void initializeProperties() {
    cdc = new ColumnDataClassifier(
            "\\stanford-classifier-2016-10-31\\properties.prop");
}

public static int getMaxEntropySentiment(String tweet) {

    String filteredTweet = TwitterUtils.filterTweet(tweet);
    System.out.println("Reading training file");
    Classifier<String, String> cl = cdc.makeClassifier(cdc.readTrainingExamples(
            "\\stanford-classifier-2016-10-31\\labelled_sentences.txt"));

    Datum<String, String> d = cdc.makeDatumFromLine(filteredTweet);
    System.out.println(filteredTweet + "  ==>  " + cl.classOf(d) + " " + cl.scoresOf(d));
    // System.out.println("Class score is: " +
    // cl.scoresOf(d).getCount(cl.classOf(d)));
    if (cl.classOf(d) == "0") {
        return 0;
    } else {
        return 4;
    }
}
}

我的数据标记为0或1.现在,对于每条推文,正在读取整个数据集,并且考虑到数据集的大小需要花费大量时间。 我的问题是,有没有办法首先训练分类器,然后在找到推文的情绪时加载它。我认为这种方法将花费更少的时间。如果我错了,请纠正我。 以下链接提供了此功能,但JAVA API没有任何内容。 Saving and Loading Classifier 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

是;最简单的方法是使用Java的默认序列化机制来序列化分类器。这里有用的帮助是IOUtils类:

IOUtils.writeObjectToFile(classifier, "/path/to/file");

阅读分类器:

Classifier<String, String> cl = IOUtils.readObjectFromFile(new File("/path/to/file");