示例#1
0
    def __init__(self, num_phonemes, num_features, var_diag_interval,
                 var_offdiag_interval):
        self.num_features = num_features
        self.num_phonemes = num_phonemes
        self._labels = tuple("label%d" % i for i in range(num_phonemes))
        # Randomly choose num_phonemes vectors
        # KJB - need something more sophisticated here to ensure minimum
        # distance between phonemes  
        self._targets = tuple(tuple(random() for i in range(num_features))
                              for j in range(num_phonemes))

        def buildOneCovarMatrix():
            uni = (uniform(var_offdiag_interval[0], var_offdiag_interval[1])
                   for i in xrange(num_features**2))
            mat = numpy.fromiter(uni, 'float64').reshape(num_features, num_features)
            # Make symetric
            lower_tri = numpy.tril(mat) # lower triangular
            mat = lower_tri + lower_tri.transpose()
            # Now clobber diagonal with other values
            for i in range(num_features):
                mat[i,i] = uniform(var_diag_interval[0], var_diag_interval[1])
            return mat

        # Build covar matrices
        covars = tuple(buildOneCovarMatrix() for i in range(num_phonemes))

        # Create a dictionary from _labels to SimpleGaussianModels
        self._models = dict()
        for i,label in enumerate(self._labels):
            m = SimpleGaussianModel(num_features, SimpleGaussianModel.FULL_COVARIANCE)
            m.set_model(self._targets[i], covars[i])
            self._models[label] = m
示例#2
0
    def __init__(self, primary_classifier, variant_labels):
        self._variant_labels = variant_labels
        self._variant_models = {}
        for label in variant_labels:
            model = SimpleGaussianModel()
            # KJB - this guy shouldn't have to know so much about models -
            # maybe do some kind of cloning from models in the classifier?
            model.set_model(primary_classifier.num_features, 'diagonal')
            self._variant_models[label] = model

        self._primary = primary_classifier
        self._variant_classifier = None
示例#3
0
 def __init__(self, primary_classifier, variant_labels):
     self._variant_labels = variant_labels
     self._variant_models = {}
     for label in variant_labels:
         model = SimpleGaussianModel()
         # KJB - this guy shouldn't have to know so much about models -
         # maybe do some kind of cloning from models in the classifier?
         model.set_model(primary_classifier.num_features, 'diagonal')
         self._variant_models[label] = model
         
     self._primary = primary_classifier
     self._variant_classifier = None
示例#4
0
def test2a(num_obs, num_passes):
    dimension = 2
    
    # Data generator setup
    target_means = (1,1)
    target_vars = (0.1,0.1)
    generator = SimpleGaussianModel(dimension, SimpleGaussianModel.DIAGONAL_COVARIANCE)
    generator.set_model(target_means, target_vars)
    SimpleGaussianModel.seed(0)
    data = [generator.sample() for i in xrange(num_obs)]


    # Gmm setup
    num_mixtures = 2
    gmm0 = make_gmm_diag(dimension, num_mixtures)
    gmm1 = make_gmm_diag(dimension, num_mixtures)
    mm = GmmMgr((gmm1,))

    # Hmm setup
    # A transition probability matrix with a p ~= 1 self-loop for the real state.
    # The entry state feeds into the real state with p=1.  We use p ~= 1 for the
    # second self loop since we need *some* probability of finishing.
    trans = array(((0.0, 1.0, 0.0),
                   (0.0, 0.999999999999, 0.000000000001),
                   (0.0, 0.0, 0.0)))
    hmm0 = Hmm(1, log_domain=True)
    hmm0.build_model(mm, (0,), 1, 1, trans)
    print hmm0.to_string(True) + '\n'
    print gmm0
    print '\n\n'

    # Try some adaptation
    for p in xrange(num_passes):
        mm.set_adaptation_state("INITIALIZING")
        mm.clear_all_accumulators()
        hmm0.begin_adapt("STANDALONE")
        mm.set_adaptation_state("ACCUMULATING")
        hmm0.adapt_one_sequence(data)
        mm.set_adaptation_state("APPLYING")
        hmm0.end_adapt()
        mm.apply_all_accumulators()
        mm.set_adaptation_state("NOT_ADAPTING")

    really_print = False
    with DebugPrint("gaussian", "gaussian_pt", "gaussian_gmm_score") if really_print else DebugPrint():
        gmm0.adapt(data, max_iters = num_passes)

    print hmm0.to_string(True) + '\n'
    print gmm0
示例#5
0
def test1(num_obs, num_passes):
    dimension = 2
    
    # Data generator setup
    target_means = (1,1)
    target_vars = (0.1,0.1)
    generator = SimpleGaussianModel(dimension, SimpleGaussianModel.DIAGONAL_COVARIANCE)
    generator.set_model(target_means, target_vars)

    SimpleGaussianModel.seed(0)
    GaussianMixtureModel.seed(0)

    # Gmm setup
    num_mixtures = 2
    gmm0 = make_gmm(dimension, num_mixtures)
    gmm1 = make_gmm(dimension, num_mixtures)
    mm = GmmMgr((gmm1,))

    # Hmm setup
    hmm0 = Hmm(1, log_domain=True)

    # A transition probability matrix with a p=1/2 exit for the real state.
    # The entry state feeds into the real state with p=1.
    trans = array(((0.0, 1.0, 0.0),
                   (0.0, 0.5, 0.5),
                   (0.0, 0.0, 0.0)))

    
    hmm0.build_model(mm, (0,), 1, 1, trans)
    print hmm0.to_string(True)
    print gmm0

    # Try some adaptation.  Note that we are feeding the entire data set as one stream
    # to the Hmm adaption call.
    data = [generator.sample() for i in xrange(num_obs)]
    for p in xrange(num_passes):
        mm.set_adaptation_state("INITIALIZING")
        mm.clear_all_accumulators()
        hmm0.begin_adapt("STANDALONE")
        mm.set_adaptation_state("ACCUMULATING")
        hmm0.adapt_one_sequence(data)
        mm.set_adaptation_state("APPLYING")
        hmm0.end_adapt()
        mm.apply_all_accumulators()
        mm.set_adaptation_state("NOT_ADAPTING")
    gmm0.adapt(data, max_iters = num_passes)

    print hmm0.to_string(True)
    print gmm0
示例#6
0
def read_smm(stream, params, _):
    covariance_type, num_components, dimension = params
    v, smm_means = stream.read_array("means", rtype=float, dim=1, shape=(dimension,))
    if covariance_type is GaussianMixtureModel.FULL_COVARIANCE:
        var_dim = 2
        var_shape = (dimension, dimension)
    else:
        assert covariance_type is GaussianMixtureModel.DIAGONAL_COVARIANCE
        var_dim = 1
        var_shape = (dimension,)

    v, smm_vars = stream.read_array("vars", rtype=float, dim=var_dim, shape=var_shape)
    ret = SimpleGaussianModel(dimension, covariance_type)
    ret.set_model(smm_means, smm_vars)
    return ret
示例#7
0
def test0(num_obs, num_passes):
    dimension = 2
    
    # Data generator setup
    target_means = (1,1)
    target_vars = (0.1,0.1)
    generator = SimpleGaussianModel(dimension, SimpleGaussianModel.DIAGONAL_COVARIANCE)
    generator.set_model(target_means, target_vars)

    SimpleGaussianModel.seed(0)
    GaussianMixtureModel.seed(0)

    mm = GmmMgr(dimension)

    # Hmm setup
    hmm0 = Hmm(0, log_domain=True)

    # A transition probability matrix with no real state.
    # The entry state feeds into the exit state with p=1.
    trans = array(((0.0, 1.0),
                   (0.0, 0.0)))
    
    hmm0.build_model(mm, (), 1, 1, trans)
    print hmm0.to_string(True)

    # Try some adaptation.  Note that we are feeding the entire data set as one stream
    # to the Hmm adaption call.
    data = [generator.sample() for i in xrange(num_obs)]
    for p in xrange(num_passes):
        mm.set_adaptation_state("INITIALIZING")
        mm.clear_all_accumulators()
        hmm0.begin_adapt("STANDALONE")
        mm.set_adaptation_state("ACCUMULATING")
        with DebugPrint("hmm_gxfs", "hmm_aos") if False else DebugPrint():
            hmm0.adapt_one_sequence(data)
        mm.set_adaptation_state("APPLYING")
        hmm0.end_adapt()
        mm.apply_all_accumulators()
        mm.set_adaptation_state("NOT_ADAPTING")

    print hmm0.to_string(True)
示例#8
0
def read_smm(stream, params, _):
    covariance_type, num_components, dimension = params
    v, smm_means = stream.read_array("means",
                                     rtype=float,
                                     dim=1,
                                     shape=(dimension, ))
    if covariance_type is GaussianMixtureModel.FULL_COVARIANCE:
        var_dim = 2
        var_shape = (dimension, dimension)
    else:
        assert (covariance_type is GaussianMixtureModel.DIAGONAL_COVARIANCE)
        var_dim = 1
        var_shape = (dimension, )

    v, smm_vars = stream.read_array("vars",
                                    rtype=float,
                                    dim=var_dim,
                                    shape=var_shape)
    ret = SimpleGaussianModel(dimension, covariance_type)
    ret.set_model(smm_means, smm_vars)
    return ret
示例#9
0
ncomps = 7, 3
nfeatures = numceps

# mfcc, with c0: gathered from about 60,000 frames of 'train' data from Ken and Hugh skyping
true_means_prime = N.array((-5.5522, -1.0517, 1.0240, 3.1609, 0.5628, -122.5789), dtype=N.float32)
true_vars_prime = N.array((26.2238, 26.4064, 59.7242, 35.1180, 47.2471, 3967.2240), dtype=N.float32)
false_means_prime = N.array((-9.4634, -5.3991, -4.2773, 1.7494, -0.0822, -228.6211), dtype=N.float32)
false_vars_prime = N.array((3.0097, 6.0277, 8.3711, 10.7198, 13.4285, 456.7074), dtype=N.float32)

# mfcc, no c0: 20,000 frames of Hugh talking
true_means_prime = N.array((-4.8087, 3.9863, -0.5217, 1.3076, 0.7514, -4.6497), dtype=N.float32)
true_vars_prime = N.array((26.8496, 32.6631, 32.3662, 24.2963, 36.2244, 34.1555), dtype=N.float32)
false_means_prime = N.array((-6.8806, -1.3424, -3.8147, 0.4520, 0.7129, -3.1560), dtype=N.float32)
false_vars_prime = N.array((2.7468, 6.2286, 7.4355, 10.1530, 13.3865, 15.9309), dtype=N.float32)
true_prime = SimpleGaussianModel(nfeatures, GaussianModelBase.DIAGONAL_COVARIANCE)
true_prime.set_model(true_means_prime, true_vars_prime)
false_prime = SimpleGaussianModel(nfeatures, GaussianModelBase.DIAGONAL_COVARIANCE)
false_prime.set_model(false_means_prime, false_vars_prime)

primer = (true_prime, false_prime)

GaussianMixtureModel.seed(0)
gmm_mgr0 = GmmMgr(ncomps, nfeatures, GaussianModelBase.DIAGONAL_COVARIANCE, primer)
gmm_mgr1 = GmmMgr(ncomps, nfeatures, GaussianModelBase.DIAGONAL_COVARIANCE, primer)
classify0 = AdaptingGmmClassifier(gmm_mgr0, izip(labels, count()))
classify1 = AdaptingGmmClassifier(gmm_mgr1, izip(labels, count()))
classify0.set_relevance(333)
classify1.set_relevance(333)
classify0.set_num_em_iterations(2)
classify1.set_num_em_iterations(2)
classifier0 = AdaptingGmmClassProcessor(classify0)