@Test public void baseline() throws Exception { run(new POSFeatureTemplate1(), 0, true); DEPNode[] nodes = null; AmbiguityClassMap map = new AmbiguityClassMap(); map.add(nodes); }
public void run(FeatureTemplate<POSNode, POSState<POSNode>> template, int type, boolean average) throws Exception { final String root = "/Users/jdchoi/Documents/Data/experiments/wsj/wsj-pos/"; TSVReader<POSNode> reader = new TSVReader<>(new POSIndex(0, 1)); List<String> trnFiles = FileUtils.getFileList(root + "trn/", "pos"); List<String> devFiles = FileUtils.getFileList(root + "dev/", "pos"); Collections.sort(trnFiles); Collections.sort(devFiles); // collect ambiguity classes AmbiguityClassMap map = new AmbiguityClassMap(); iterate(reader, trnFiles, nodes -> map.add(nodes)); map.expand(0.4); // collect training instances StringModel model = new StringModel(new MultinomialWeightVector(), false); POSTagger<POSNode> tagger = new POSTagger<>(model); tagger.setFlag(NLPFlag.TRAIN); tagger.setAmbiguityClassMap(map); tagger.setFeatureTemplate(template); iterate(reader, trnFiles, nodes -> tagger.process(nodes)); // map string into a vector space final int label_cutoff = 0; final int feature_cutoff = 0; model.vectorize(label_cutoff, feature_cutoff, false); // train the statistical model final double learning_rate = 0.02; final int epochs = 1; WeightVector weight = model.getWeightVector(); OnlineOptimizer sgd = null; switch (type) { case 0: sgd = new Perceptron(weight, average, learning_rate); break; case 1: sgd = new AdaGrad(weight, average, learning_rate); break; case 2: sgd = new LogisticRegression(weight, average, learning_rate); break; } Eval eval = new AccuracyEval(); tagger.setFlag(NLPFlag.EVALUATE); tagger.setEval(eval); DoubleIntPair best = new DoubleIntPair(-1, -1); double currScore; for (int i = 0; i < epochs; i++) { sgd.train(model.getInstanceList()); eval.clear(); iterate(reader, devFiles, nodes -> tagger.process(nodes)); currScore = eval.score(); System.out.printf("%4d: %5.2f\n", i, currScore); if (best.d < currScore) best.set(currScore, i); } System.out.printf("Best: %d - %5.2f\n", best.i, best.d); // System.out.println("Saving"); // ObjectOutputStream out = IOUtils.createObjectXZBufferedOutputStream("tmp"); // out.writeObject(tagger); // out.close(); // // System.out.println("Loading"); // ObjectInputStream in = IOUtils.createObjectXZBufferedInputStream("tmp"); // NLPComponent<POSNode,POSState<POSNode>> component = // (NLPComponent<POSNode,POSState<POSNode>>)in.readObject(); // eval.clear(); // component.setEval(eval); // component.setFlag(NLPFlag.EVALUATE); // // System.out.println("Decoding"); // iterate(reader, devFiles, nodes -> component.process(nodes)); // System.out.println(eval.score()); }