private TransducerTrainer trainOnce(Pipe pipe, InstanceList trainData) {
Stopwatch watch = Stopwatch.createStarted();
CRF crf = new CRF(pipe, null);
Pattern forbidden = null;
if (USE_ONC_CODING) {
forbidden = Pattern.compile("(O,C|<START>,C|O,<END>)", Pattern.CASE_INSENSITIVE);
}
crf.addOrderNStates(trainData, new int[]{1}, null, null, forbidden, null, false);
crf.addStartState();
crf.setWeightsDimensionAsIn(trainData);
if (this.pullFrom != null) {
crf.initializeApplicableParametersFrom(pullFrom);
}
log.info("Starting syll phone training...");
CRFTrainerByThreadedLabelLikelihood trainer = new CRFTrainerByThreadedLabelLikelihood(crf, 8);
trainer.setGaussianPriorVariance(2);
trainer.setAddNoFactors(false);
trainer.setUseSomeUnsupportedTrick(true);
trainer.train(trainData);
trainer.shutdown();
watch.stop();
pipe.getAlphabet().stopGrowth();
pipe.getTargetAlphabet().stopGrowth();
log.info("Align Tag CRF Training took " + watch.toString());
return trainer;
}