1

私は 100 万件のラベル付き文のデータセットを持っており、Maximum Entropy を通じてセンチメントを見つけるためにそれを使用しています。私は同じためにスタンフォード分類子を使用しています:-

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 には何もありません。 分類子の保存と読み込み 助けていただければ幸いです。

4

1 に答える 1

2

はい; これを行う最も簡単な方法は、Java のデフォルトのシリアライゼーション メカニズムを使用して分類子をシリアライズすることです。ここで役立つヘルパーは次のIOUtilsクラスです。

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

分類子を読み取るには:

Classifier<String, String> cl = IOUtils.readObjectFromFile(new File("/path/to/file");
于 2017-03-28T07:07:50.060 に答える