/** * Generates a string representing the specified event. * @param event The event for which a string representation is needed. * @return A string representing the specified event. */ public static String toLine(Event event) { StringBuilder sb = new StringBuilder(); sb.append(event.getOutcome()); String[] context = event.getContext(); for (int ci = 0,cl = context.length; ci < cl; ci++) { sb.append(" ").append(context[ci]); } sb.append(System.getProperty("line.separator")); return sb.toString(); }
protected List<ComparableEvent> index(ObjectStream<Event> events, Map<String, Integer> predicateIndex) throws IOException { Map<String, Integer> omap = new HashMap<>(); List<ComparableEvent> eventsToCompare = new ArrayList<>(); Event ev; while ((ev = events.read()) != null) { omap.putIfAbsent(ev.getOutcome(), omap.size()); int[] cons = Arrays.stream(ev.getContext()) .map(pred -> predicateIndex.get(pred)) .filter(Objects::nonNull) .mapToInt(i -> i).toArray(); // drop events with no active features if (cons.length > 0) { int ocID = omap.get(ev.getOutcome()); eventsToCompare.add(new ComparableEvent(ocID, cons, ev.getValues())); } else { display("Dropped event " + ev.getOutcome() + ":" + Arrays.asList(ev.getContext()) + "\n"); } } outcomeLabels = toIndexedStringArray(omap); predLabels = toIndexedStringArray(predicateIndex); return eventsToCompare; }
eventCount++; eventStore.writeUTF(ev.getOutcome());
private void trainingStats(MutableContext[] params) throws IOException { int numCorrect = 0; int oei = 0; sequenceStream.reset(); Sequence sequence; while ((sequence = sequenceStream.read()) != null) { Event[] taggerEvents = sequenceStream.updateContext(sequence, new PerceptronModel(params,predLabels,outcomeLabels)); for (int ei = 0; ei < taggerEvents.length; ei++, oei++) { int max = omap.get(taggerEvents[ei].getOutcome()); if (max == outcomeList[oei]) { numCorrect ++; } } } display(". (" + numCorrect + "/" + numEvents + ") " + ((double) numCorrect / numEvents) + "\n"); } }
boolean update = false; for (int ei = 0; ei < events.length; ei++, oei++) { if (!taggerEvents[ei].getOutcome().equals(events[ei].getOutcome())) { update = true; String[] contextStrings = events[ei].getContext(); float[] values = events[ei].getValues(); int oi = omap.get(events[ei].getOutcome()); for (int ci = 0; ci < contextStrings.length; ci++) { float value = 1; String[] contextStrings = taggerEvent.getContext(); float[] values = taggerEvent.getValues(); int oi = omap.get(taggerEvent.getOutcome()); for (int ci = 0; ci < contextStrings.length; ci++) { float value = 1;
private void testModel(MaxentModel model, Event event, double higher_probability) { double[] outcomes = model.eval(event.getContext()); String outcome = model.getBestOutcome(outcomes); Assert.assertEquals(2, outcomes.length); Assert.assertEquals(event.getOutcome(), outcome); if (event.getOutcome().equals(model.getOutcome(0))) { Assert.assertEquals(higher_probability, outcomes[0], 0.0001); } if (!event.getOutcome().equals(model.getOutcome(0))) { Assert.assertEquals(1.0 - higher_probability, outcomes[0], 0.0001); } if (event.getOutcome().equals(model.getOutcome(1))) { Assert.assertEquals(higher_probability, outcomes[1], 0.0001); } if (!event.getOutcome().equals(model.getOutcome(1))) { Assert.assertEquals(1.0 - higher_probability, outcomes[1], 0.0001); } }
public static void testModel(MaxentModel model, double expecedAccuracy) throws IOException { List<Event> devEvents = readPpaFile("devset"); int total = 0; int correct = 0; for (Event ev: devEvents) { String targetLabel = ev.getOutcome(); double[] ocs = model.eval(ev.getContext()); int best = 0; for (int i = 1; i < ocs.length; i++) { if (ocs[i] > ocs[best]) { best = i; } } String predictedLabel = model.getOutcome(best); if (targetLabel.equals(predictedLabel)) correct++; total++; } double accuracy = correct / (double) total; System.out.println("Accuracy on PPA devset: (" + correct + "/" + total + ") " + accuracy); Assert.assertEquals(expecedAccuracy, accuracy, .00001); } }
/** * Tests that the outcomes for a single sentence match the * expected outcomes. */ @Test public void testOutcomesForSingleSentence() throws Exception { String sentence = "That_DT sounds_VBZ good_JJ ._."; POSSample sample = POSSample.parse(sentence); try (ObjectStream<Event> eventStream = new POSSampleEventStream( ObjectStreamUtils.createObjectStream(sample))) { Assert.assertEquals("DT", eventStream.read().getOutcome()); Assert.assertEquals("VBZ", eventStream.read().getOutcome()); Assert.assertEquals("JJ", eventStream.read().getOutcome()); Assert.assertEquals(".", eventStream.read().getOutcome()); Assert.assertNull(eventStream.read()); } } }
/** * Tests the event stream for correctly generated outcomes. */ @Test public void testEventOutcomes() throws IOException { ObjectStream<String> sentenceStream = ObjectStreamUtils.createObjectStream("\"<SPLIT>out<SPLIT>.<SPLIT>\""); ObjectStream<TokenSample> tokenSampleStream = new TokenSampleStream(sentenceStream); try (ObjectStream<Event> eventStream = new TokSpanEventStream(tokenSampleStream, false)) { Assert.assertEquals(TokenizerME.SPLIT, eventStream.read().getOutcome()); Assert.assertEquals(TokenizerME.NO_SPLIT, eventStream.read().getOutcome()); Assert.assertEquals(TokenizerME.NO_SPLIT, eventStream.read().getOutcome()); Assert.assertEquals(TokenizerME.SPLIT, eventStream.read().getOutcome()); Assert.assertEquals(TokenizerME.SPLIT, eventStream.read().getOutcome()); Assert.assertNull(eventStream.read()); Assert.assertNull(eventStream.read()); } } }
/** * Tests the correctly generated outcomes for a test sentence. */ @Test public void testOutcomesForSingleTypeSentence() throws IOException { NameSample nameSample = new NameSample(SENTENCE, new Span[]{new Span(0, 2, "person")}, false); try (ObjectStream<Event> eventStream = new NameFinderEventStream( ObjectStreamUtils.createObjectStream(nameSample))) { Assert.assertEquals("person-" + NameFinderME.START, eventStream.read().getOutcome()); Assert.assertEquals("person-" + NameFinderME.CONTINUE, eventStream.read().getOutcome()); for (int i = 0; i < 10; i++) { Assert.assertEquals(NameFinderME.OTHER, eventStream.read().getOutcome()); } Assert.assertNull(eventStream.read()); } }
/** * Tests the correctly generated outcomes for a test sentence. If the Span * does not declare its type and the user did not set a type, it will use * "default". */ @Test public void testOutcomesTypeEmpty() throws IOException { NameSample nameSample = new NameSample(SENTENCE, new Span[] { new Span(0, 2) }, false); ObjectStream<Event> eventStream = new NameFinderEventStream( ObjectStreamUtils.createObjectStream(nameSample), null, CG, null); String prefix = "default-"; Assert.assertEquals(prefix + NameFinderME.START, eventStream.read().getOutcome()); Assert.assertEquals(prefix + NameFinderME.CONTINUE, eventStream.read().getOutcome()); for (int i = 0; i < 10; i++) { Assert.assertEquals(NameFinderME.OTHER, eventStream.read().getOutcome()); } Assert.assertNull(eventStream.read()); eventStream.close(); } }
@Test public void testEventOutcomes() throws IOException { // Sample with two sentences SentenceSample sample = new SentenceSample("Test sent. one. Test sent. 2?", new Span(0, 15), new Span(16, 29)); ObjectStream<SentenceSample> sampleStream = ObjectStreamUtils.createObjectStream(sample); Factory factory = new Factory(); ObjectStream<Event> eventStream = new SDEventStream(sampleStream, factory.createSentenceContextGenerator("eng"), factory.createEndOfSentenceScanner("eng")); Assert.assertEquals(SentenceDetectorME.NO_SPLIT, eventStream.read().getOutcome()); Assert.assertEquals(SentenceDetectorME.SPLIT, eventStream.read().getOutcome()); Assert.assertEquals(SentenceDetectorME.NO_SPLIT, eventStream.read().getOutcome()); Assert.assertEquals(SentenceDetectorME.SPLIT, eventStream.read().getOutcome()); Assert.assertNull(eventStream.read()); } }
/** * Tests the correctly generated outcomes for a test sentence. If the Span * declares its type, passing the type to event stream has no effect */ @Test public void testOutcomesTypeCantOverride() throws IOException { String type = "XYZ"; NameSample nameSample = new NameSample(SENTENCE, new Span[] { new Span(0, 2, "person") }, false); ObjectStream<Event> eventStream = new NameFinderEventStream( ObjectStreamUtils.createObjectStream(nameSample), type, CG, null); String prefix = type + "-"; Assert.assertEquals(prefix + NameFinderME.START, eventStream.read().getOutcome()); Assert.assertEquals(prefix + NameFinderME.CONTINUE, eventStream.read().getOutcome()); for (int i = 0; i < 10; i++) { Assert.assertEquals(NameFinderME.OTHER, eventStream.read().getOutcome()); } Assert.assertNull(eventStream.read()); eventStream.close(); }
/** * Tests the correctly generated outcomes for a test sentence. If the Span * does not declare its type and the user passed a type, use the type from * user */ @Test public void testOutcomesWithType() throws IOException { String type = "XYZ"; NameSample nameSample = new NameSample(SENTENCE, new Span[] { new Span(0, 2) }, false); ObjectStream<Event> eventStream = new NameFinderEventStream( ObjectStreamUtils.createObjectStream(nameSample), type, CG, null); String prefix = type + "-"; Assert.assertEquals(prefix + NameFinderME.START, eventStream.read().getOutcome()); Assert.assertEquals(prefix + NameFinderME.CONTINUE, eventStream.read().getOutcome()); for (int i = 0; i < 10; i++) { Assert.assertEquals(NameFinderME.OTHER, eventStream.read().getOutcome()); } Assert.assertNull(eventStream.read()); eventStream.close(); }
@Test public void testWithValues() { Event event = new Event("o1", new String[]{"aa", "bb", "cc"}); Assert.assertEquals("o1", event.getOutcome()); Assert.assertArrayEquals(new String[]{"aa", "bb", "cc"}, event.getContext()); Assert.assertNull(event.getValues()); Assert.assertEquals("o1 [aa bb cc]", event.toString()); }
@Test public void testWithoutValues() { Event event = new Event("o1", new String[]{"aa", "bb", "cc"}, new float[]{0.2F, 0.4F, 0.4F}); Assert.assertEquals("o1", event.getOutcome()); Assert.assertArrayEquals(new String[]{"aa", "bb", "cc"}, event.getContext()); Assert.assertArrayEquals(new float[]{0.2F, 0.4F, 0.4F}, event.getValues(), 0.001F); Assert.assertEquals("o1 [aa=0.2 bb=0.4 cc=0.4]", event.toString()); } }
/** * Generates a string representing the specified event. * @param event The event for which a string representation is needed. * @return A string representing the specified event. */ public static String toLine(Event event) { StringBuilder sb = new StringBuilder(); sb.append(event.getOutcome()); String[] context = event.getContext(); for (int ci = 0,cl = context.length; ci < cl; ci++) { sb.append(" ").append(context[ci]); } sb.append(System.getProperty("line.separator")); return sb.toString(); }
/** * Generates a string representing the specified event. * @param event The event for which a string representation is needed. * @return A string representing the specified event. */ public static String toLine(Event event) { StringBuilder sb = new StringBuilder(); sb.append(event.getOutcome()); String[] context = event.getContext(); for (int ci = 0,cl = context.length; ci < cl; ci++) { sb.append(" ").append(context[ci]); } sb.append(System.getProperty("line.separator")); return sb.toString(); }
private void trainingStats(MutableContext[] params) throws IOException { int numCorrect = 0; int oei = 0; sequenceStream.reset(); Sequence sequence; while ((sequence = sequenceStream.read()) != null) { Event[] taggerEvents = sequenceStream.updateContext(sequence, new PerceptronModel(params,predLabels,outcomeLabels)); for (int ei = 0; ei < taggerEvents.length; ei++, oei++) { int max = omap.get(taggerEvents[ei].getOutcome()); if (max == outcomeList[oei]) { numCorrect ++; } } } display(". (" + numCorrect + "/" + numEvents + ") " + ((double) numCorrect / numEvents) + "\n"); } }
private void trainingStats(MutableContext[] params) throws IOException { int numCorrect = 0; int oei = 0; sequenceStream.reset(); Sequence sequence; while ((sequence = sequenceStream.read()) != null) { Event[] taggerEvents = sequenceStream.updateContext(sequence, new PerceptronModel(params,predLabels,outcomeLabels)); for (int ei = 0; ei < taggerEvents.length; ei++, oei++) { int max = omap.get(taggerEvents[ei].getOutcome()); if (max == outcomeList[oei]) { numCorrect ++; } } } display(". (" + numCorrect + "/" + numEvents + ") " + ((double) numCorrect / numEvents) + "\n"); } }