Skip to content

Commit fca5367

Browse files
author
Matthew Honnibal
committed
* Switch beam_sgd to best_first_sgd
1 parent afed99b commit fca5367

1 file changed

Lines changed: 12 additions & 52 deletions

File tree

bin/tagger/conll_train.py

Lines changed: 12 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727

2828
class GoldSents(object):
29-
def __init__(self, tokenizer, sents, n=5000):
29+
def __init__(self, tokenizer, sents, n=10000):
3030
self.tokenizer = tokenizer
3131
self.sents = sents
3232
self.n = n
@@ -62,22 +62,21 @@ def _parse_line(line):
6262
return id_, word, pos
6363

6464

65-
def beam_sgd(tagger, train_data, check_data):
65+
def best_first_sgd(tagger, train_data, check_data):
6666
print(tagger.model.widths)
6767
print("Itn.\tTrain\tPrev\tNew")
68-
queue = [(score_model(check_data, tagger), 0, tagger)]
69-
workers = [None] * 100
68+
queue = [[score_model(check_data, tagger), 0, tagger]]
7069
limit = 4
7170
while True:
72-
for prev_score, i, tagger in list(queue):
73-
#prev_score, i, tagger = max(queue)
74-
train_acc, new_model = get_new_model(train_data, tagger)
75-
new_score = score_model(check_data, new_model)
76-
queue.append((new_score, i+1, new_model))
77-
print('%d:\t%.3f\t%.3f\t%.3f\t%.4f' % (i, train_acc, prev_score, new_score,
78-
tagger.model.eta))
7971
queue.sort(reverse=True)
8072
queue = queue[:limit]
73+
prev_score, i, tagger = queue[0]
74+
queue[0][0] *= 0.999
75+
train_acc, new_model = get_new_model(train_data, tagger)
76+
new_score = score_model(check_data, new_model)
77+
queue.append([new_score, i+1, new_model])
78+
print('%d:\t%.3f\t%.3f\t%.3f\t%.4f' % (i+1, train_acc, prev_score, new_score,
79+
tagger.model.eta))
8180
return max(queue)
8281

8382

@@ -93,7 +92,7 @@ def score_model(gold_sents, tagger):
9392

9493

9594
def get_new_model(gold_sents, tagger):
96-
learn_rate = numpy.random.normal(loc=tagger.model.learn_rate, scale=0.001)
95+
learn_rate = numpy.random.normal(loc=tagger.model.eta, scale=0.0001)
9796
if learn_rate < 0.0001:
9897
learn_rate = 0.0001
9998

@@ -137,46 +136,7 @@ def train(Language, train_sents, dev_sents, model_dir, n_iter=15, seed=0,
137136
heldout_sents = GoldSents(nlp.tokenizer, heldout_sents)
138137

139138
tagger = Tagger.blank(nlp.vocab, [], **model_args)
140-
return beam_sgd(tagger, train_sents, heldout_sents)
141-
142-
#prev_score = 0.0
143-
#variance = 0.001
144-
#last_good_learn_rate = nlp.tagger.model.eta
145-
#n = 0
146-
#total = 0
147-
#acc = 0
148-
#last_model = (nlp.tagger.model.weights, nlp.tagger.model.embeddings)
149-
#while True:
150-
# words, gold_tags = random.choice(train_sents)
151-
# tokens = nlp.tokenizer.tokens_from_list(words)
152-
# acc += nlp.tagger.train(tokens, gold_tags)
153-
# total += len(tokens)
154-
# n += 1
155-
# if n and n % 20000 == 0:
156-
# dev_score = score_model(nlp, heldout_sents)
157-
# eval_score = score_model(nlp, dev_sents)
158-
# if dev_score >= prev_score:
159-
# last_model = (nlp.tagger.model.weights, nlp.tagger.model.embeddings)
160-
# prev_score = dev_score
161-
# variance = 0.001
162-
# last_good_learn_rate = nlp.tagger.model.eta
163-
# nlp.tagger.model.eta *= 1.01
164-
#
165-
# else:
166-
# nlp.tagger.model.weights = last_model[0]
167-
# nlp.tagger.model.embeddings = last_model[1]
168-
# new_eta = numpy.random.normal(loc=last_good_learn_rate, scale=variance)
169-
# if new_eta >= 0.0001:
170-
# nlp.tagger.model.eta = new_eta
171-
# else:
172-
# nlp.tagger.model.eta = 0.0001
173-
# print('X:\t%.3f\t%.3f\t%.3f\t%.4f' % (acc/total, dev_score, eval_score, nlp.tagger.model.eta))
174-
# variance *= 1.1
175-
# prev_score *= 0.9999
176-
# acc = 0.0
177-
# total = 0.0
178-
#nlp.end_training(data_dir=model_dir)
179-
#return nlp
139+
return best_first_sgd(tagger, train_sents, heldout_sents)
180140

181141

182142
@plac.annotations(

0 commit comments

Comments
 (0)