'Trains the HMM using both (or either of) supervised and unsupervised
techniques.
:return: the trained model
:rtype: HiddenMarkovModelTagger
:param labelled_sequences: the supervised training data, a set of
labelled sequences of observations
:type labelled_sequences: list
:param unlabeled_sequences: the unsupervised training data, a set of
sequences of observations
:type unlabeled_sequences: list
:param kwargs: additional arguments to pass to the training methods'

def train(self, labeled_sequences=None, unlabeled_sequences=None, **kwargs):

    assert (labeled_sequences or unlabeled_sequences)
    model = None
    if labeled_sequences:
        model = self.train_supervised(labeled_sequences, **kwargs)
    if unlabeled_sequences:
        if model:
            kwargs[u'model'] = model
        model = self.train_unsupervised(unlabeled_sequences, **kwargs)
    return model
