001/*
002 * Copyright (c) 2015-2020, Oracle and/or its affiliates. All rights reserved.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017package org.tribuo.classification.sequence.viterbi;
018
019import com.oracle.labs.mlrg.olcut.config.Option;
020import com.oracle.labs.mlrg.olcut.config.Options;
021import org.tribuo.Trainer;
022import org.tribuo.classification.Label;
023
024/**
025 * Options for building a viterbi trainer.
026 */
027public class ViterbiTrainerOptions implements Options {
028
029    public enum ViterbiLabelFeatures {
030        DEFAULT, NONE
031    }
032
033    @Option(longName = "viterbi-score-aggregation", usage = "Aggregation operation, choices are {ADD, MULTIPLY}.")
034    private ViterbiModel.ScoreAggregation viterbiScoreAggregation = ViterbiModel.ScoreAggregation.ADD;
035
036    @Option(longName = "viterbi-label-features", usage = "Add label features to the inner training, choices are {DEFAULT, NONE}.")
037    private ViterbiLabelFeatures viterbiLabelFeatures = ViterbiLabelFeatures.DEFAULT;
038
039    @Option(longName = "viterbi-stack-size", usage = "-1 for no limit on the stack size")
040    private int viterbiStackSize = -1;
041
042    public ViterbiTrainer getSequenceTrainer(Trainer<Label> innerTrainer) {
043        LabelFeatureExtractor lfe = new NoopFeatureExtractor();
044        if (viterbiLabelFeatures == ViterbiLabelFeatures.DEFAULT) {
045            lfe = new DefaultFeatureExtractor();
046        }
047        return new ViterbiTrainer(innerTrainer, lfe, viterbiStackSize, viterbiScoreAggregation);
048    }
049}