def test_basic(): nr_class = 3 model = AveragedPerceptron(((1, ), (2, ), (3, ), (4, ), (5, ))) instances = [(1, {1: 1, 3: -5}), (2, {2: 4, 3: 5})] for clas, feats in instances: eg = Example(nr_class) eg.features = feats model(eg) eg.costs = [i != clas for i in range(nr_class)] model.update(eg) eg = Example(nr_class) eg.features = {1: 2, 2: 1} model(eg) assert eg.guess == 2 eg = Example(nr_class) eg.features = {0: 2, 2: 1} model(eg) assert eg.scores[1] == 0 eg = Example(nr_class) eg.features = {1: 2, 2: 1} model(eg) assert eg.scores[2] > 0 eg = Example(nr_class) eg.features = {1: 2, 1: 1} model(eg) assert eg.scores[1] > 0 eg = Example(nr_class) eg.features = {0: 3, 3: 1} model(eg) assert eg.scores[1] < 0 eg = Example(nr_class) eg.features = {0: 3, 3: 1} model(eg) assert eg.scores[2] > 0
def model(instances): templates = [] for batch in instances: for _, feats in batch: for key in feats: templates.append((key, )) templates = tuple(set(templates)) model = AveragedPerceptron(templates) for batch in instances: model.time += 1 for clas, feats in batch: for key, value in feats.items(): model.update_weight(key, clas, value) return model
def test_dump_load(model): loc = tempfile.mkstemp()[1] model.end_training() model.dump(loc) string = open(loc, 'rb').read() assert string new_model = AveragedPerceptron([(1, ), (2, ), (3, ), (4, )]) nr_class = 5 assert get_scores(nr_class, model, {1: 1, 3: 1, 4: 1}) != \ get_scores(nr_class, new_model, {1:1, 3:1, 4:1}) assert get_scores(nr_class, model, {2:1, 5:1}) != \ get_scores(nr_class, new_model, {2:1, 5:1}) assert get_scores(nr_class, model, {2:1, 3:1, 4:1}) != \ get_scores(nr_class, new_model, {2:1, 3:1, 4:1}) new_model.load(loc) assert get_scores(nr_class, model, {1:1, 3:1, 4:1}) == \ get_scores(nr_class, new_model, {1:1, 3:1, 4:1}) assert get_scores(nr_class, model, {2:1, 5:1}) == \ get_scores(nr_class, new_model, {2:1, 5:1}) assert get_scores(nr_class, model, {2:1, 3:1, 4:1}) == \ get_scores(nr_class, new_model, {2:1, 3:1, 4:1})
def __init__(self, nlp, nr_class): self.nlp = nlp self.nr_class = nr_class self._eg = Example(nr_class=nr_class) self._model = AveragedPerceptron([])