def test_weighted_additive(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 = WeightedAdditive() m.export(self.prefix + ".add1") m.train([("a", "a", "a_a")], self.space1, self.space2) m.export(self.prefix + ".add2")
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
#ex10.py #------- from composes.utils import io_utils from composes.composition.weighted_additive import WeightedAdditive #load a space my_space = io_utils.load("./data/out/ex10.pkl") print my_space.id2row print my_space.cooccurrence_matrix # instantiate a weighted additive model my_comp = WeightedAdditive(alpha = 1, beta = 1) # use the model to compose words in my_space composed_space = my_comp.compose([("good", "book", "good_book"), ("good", "car", "good_car")], my_space) print composed_space.id2row print composed_space.cooccurrence_matrix #save the composed space io_utils.save(composed_space, "data/out/PHRASE_SS.ex10.pkl")
#ex13.py #------- from composes.utils import io_utils from composes.composition.weighted_additive import WeightedAdditive #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") print arg_space.id2row print arg_space.cooccurrence_matrix #load a phrase space phrase_space = io_utils.load("data/out/PHRASE_SS.ex10.pkl") print phrase_space.id2row print phrase_space.cooccurrence_matrix #train a weighted additive model on the data my_comp = WeightedAdditive() my_comp.train(train_data, arg_space, phrase_space) #print its parameters print "alpha:", my_comp.alpha print "beta:", my_comp.beta
print "Computing similarity with lexical function..." pred = composed_space.get_sims(test_pairs, CosSimilarity()) #use this composed space to assign similarities print "Scoring lexical function..." print scoring_utils.score(gold, pred, "spearman") print "Training Full Additive composition model..." 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..."
########################################################################## from composes.utils import io_utils from composes.composition.weighted_additive import WeightedAdditive from composes.similarity.cos import CosSimilarity import sys pkl=sys.argv[1] base=sys.argv[2] minus=sys.argv[3] plus=sys.argv[4] space = io_utils.load(pkl) # instantiate an additive and subtractive model add = WeightedAdditive(alpha = 1, beta = 1) sub = WeightedAdditive(alpha = 1, beta = -1) #print space.get_neighbours(base, 10, CosSimilarity()) print "Subtracting",minus,"from",base composed_space = sub.compose([(base, minus, "step1")], space) #print composed_space.get_neighbours("step1", 10, CosSimilarity(),space) print "Adding",plus,"..." composed_space2 = add.compose([("step1", plus, "step2")], (composed_space,space)) print composed_space2.get_neighbours("step2", 10, CosSimilarity(),space)