def test_train_exact(self): test_cases = [(self.m11, self.m21, self.ph1, 5 / (3.0)), (self.m12, self.m22, self.ph2, 5 / (3.0)), (self.m13, self.m23, self.ph3, 6), (self.m14, self.m24, self.ph4, 6), (self.m15, self.m25, self.ph5, 5 / (3.0)), (self.m16, self.m26, self.ph6, 2), (self.m17, self.m27, self.ph7, 2)] for arg1, arg2, phrase, lambda_ in test_cases: m = Dilation() m._solve(arg1, arg2, phrase) self.assertAlmostEqual(m._lambda, lambda_)
def test_train_exact(self): test_cases = [(self.m11, self.m21, self.ph1, 5 / (3.0)), (self.m12, self.m22, self.ph2, 5 / (3.0)), (self.m13, self.m23, self.ph3, 6), (self.m14, self.m24, self.ph4, 6), (self.m15, self.m25, self.ph5, 5 / (3.0)), (self.m16, self.m26, self.ph6, 2), (self.m17, self.m27, self.ph7, 2) ] for arg1, arg2, phrase, lambda_ in test_cases: m = Dilation() m._train(arg1, arg2, phrase) self.assertAlmostEqual(m._lambda, lambda_)
def test_train_random(self): test_cases = [1.0,2.0,3.0] rows = 4 cols = 3 m1 = np.random.rand(rows,cols) m2 = np.random.rand(rows,cols) for lambda_ in test_cases: m = Dilation(lambda_) result_p = m._compose(DenseMatrix(m1), DenseMatrix(m2)) m = Dilation() m._train(DenseMatrix(m1),DenseMatrix(m2),result_p) self.assertAlmostEqual(lambda_, m._lambda)
def test_dilation(self): self.m12 = DenseMatrix(np.mat([[3, 1], [9, 2]])) self.m22 = DenseMatrix(np.mat([[4, 3], [2, 1]])) self.ph2 = DenseMatrix(np.mat([[18, 11], [24, 7]])) self.row = ["a", "b"] self.ft = ["f1", "f2"] self.space1 = Space(DenseMatrix(self.m12), self.row, self.ft) self.space2 = Space(DenseMatrix(self.ph2), ["a_a", "a_b"], self.ft) m = Dilation() m.export(self.prefix + ".dil1") m.train([("a", "b", "a_b")], self.space1, self.space2) m.export(self.prefix + ".dil2")
def test_compose_exact(self): test_cases = [(self.m11, self.m21, self.ph1, 5 / (3.0)), (self.m13, self.m23, self.ph3, 6), (self.m14, self.m24, self.ph4, 6)] for arg1, arg2, phrase, lambda_ in test_cases: m = Dilation() m._solve(arg1, arg2, phrase) res = m._compose(arg1, arg2) np.testing.assert_array_almost_equal(res.mat, phrase.mat, 2) m = Dilation(lambda_) res = m._compose(arg1, arg2) np.testing.assert_array_almost_equal(res.mat, phrase.mat, 2)
def test_dilation(self): self.m12 = DenseMatrix(np.mat([[3,1],[9,2]])) self.m22 = DenseMatrix(np.mat([[4,3],[2,1]])) self.ph2 = DenseMatrix(np.mat([[18,11],[24,7]])) self.row = ["a", "b"] self.ft = ["f1","f2"] self.space1 = Space(DenseMatrix(self.m12), self.row, self.ft) self.space2 = Space(DenseMatrix(self.ph2), ["a_a","a_b"], self.ft) m = Dilation() m.export(self.prefix + ".dil1") m.train([("a","b","a_b")], self.space1, self.space2) m.export(self.prefix + ".dil2")
def test_train_random(self): test_cases = [1.0, 2.0, 3.0] rows = 4 cols = 3 m1 = np.random.rand(rows, cols) m2 = np.random.rand(rows, cols) for lambda_ in test_cases: m = Dilation(lambda_) result_p = m._compose(DenseMatrix(m1), DenseMatrix(m2)) m = Dilation() m._solve(DenseMatrix(m1), DenseMatrix(m2), result_p) self.assertAlmostEqual(lambda_, m._lambda)
def create_model(model, alpha, beta, lambda_): #TODO: IMPORTANT here: if alpha, beta of lambda are none model_dict = { "weighted_add": WeightedAdditive, "dilation": Dilation, "mult": Multiplicative } if not model in model_dict: raise ValueError("Invalid model:%s" % model) if model == "weighted_add": model_obj = WeightedAdditive(alpha, beta) elif model == "dilation": model_obj = Dilation(lambda_) else: model_obj = Multiplicative() return model_obj
def test_compose_exact(self): test_cases = [(self.m11, self.m21, self.ph1, 5 / (3.0)), (self.m13, self.m23, self.ph3, 6), (self.m14, self.m24, self.ph4, 6) ] for arg1, arg2, phrase, lambda_ in test_cases: m = Dilation() m._train(arg1, arg2, phrase) res = m._compose(arg1, arg2) np.testing.assert_array_almost_equal(res.mat, phrase.mat, 2) m = Dilation(lambda_) res = m._compose(arg1, arg2) np.testing.assert_array_almost_equal(res.mat, phrase.mat, 2)
comp_model = FullAdditive(learner=RidgeRegressionLearner(param=2)) comp_model.train(train_data, space, per_space) composed_space = comp_model.compose(test_phrases, space) pred = composed_space.get_sims(test_pairs, CosSimilarity()) print scoring_utils.score(gold, pred, "spearman") print "Training Weighted Additive composition model..." comp_model = WeightedAdditive() comp_model.train(train_data, space, per_space) print "alpha, beta:", comp_model.alpha, comp_model.beta composed_space = comp_model.compose(test_phrases, space) pred = composed_space.get_sims(test_pairs, CosSimilarity()) print scoring_utils.score(gold, pred, "spearman") print "Training Dilation composition model..." comp_model = Dilation() comp_model.train(train_data, space, per_space) print "lambda:", comp_model._lambda composed_space = comp_model.compose(test_phrases, space) pred = composed_space.get_sims(test_pairs, CosSimilarity()) print scoring_utils.score(gold, pred, "spearman") print "Multiplicative composition model..." comp_model = Multiplicative() composed_space = comp_model.compose(test_phrases, space) pred = composed_space.get_sims(test_pairs, CosSimilarity()) print scoring_utils.score(gold, pred, "spearman") print "Simple additive composition model..." comp_model = WeightedAdditive(1, 1) composed_space = comp_model.compose(test_phrases, space)
#------- from composes.utils import io_utils from composes.composition.dilation import Dilation #training data train_data = [("good", "car", "good_car"), ("good", "book", "good_book") ] #load an argument space arg_space = io_utils.load("./data/out/ex10.pkl") #load a phrase space phrase_space = io_utils.load("data/out/PHRASE_SS.ex10.pkl") print "Training phrase space" print phrase_space.id2row print phrase_space.cooccurrence_matrix #train a Dilation model on the data my_comp = Dilation() my_comp.train(train_data, arg_space, phrase_space) #print its parameters print "\nlambda:", my_comp._lambda #use the model to compose the train data composed_space = my_comp.compose([("good", "bike", "good_bike")], arg_space) print "\nComposed space:" print composed_space.id2row print composed_space.cooccurrence_matrix
#ex14.py #------- from composes.utils import io_utils from composes.composition.dilation import Dilation #training data train_data = [("good", "car", "good_car"), ("good", "book", "good_book")] #load an argument space arg_space = io_utils.load("./data/out/ex10.pkl") #load a phrase space phrase_space = io_utils.load("data/out/PHRASE_SS.ex10.pkl") print "Training phrase space" print phrase_space.id2row print phrase_space.cooccurrence_matrix #train a Dilation model on the data my_comp = Dilation() my_comp.train(train_data, arg_space, phrase_space) #print its parameters print "\nlambda:", my_comp._lambda #use the model to compose the train data composed_space = my_comp.compose([("good", "bike", "good_bike")], arg_space) print "\nComposed space:" print composed_space.id2row print composed_space.cooccurrence_matrix