@@ -30,6 +30,7 @@ def shuffle(lol, seed):
30
30
random .seed (seed )
31
31
random .shuffle (l )
32
32
33
+
33
34
# start-snippet-1
34
35
def contextwin (l , win ):
35
36
'''
@@ -45,13 +46,14 @@ def contextwin(l, win):
45
46
assert win >= 1
46
47
l = list (l )
47
48
48
- lpadded = win // 2 * [- 1 ] + l + win // 2 * [- 1 ]
49
- out = [lpadded [i :i + win ] for i in range (len (l ))]
49
+ lpadded = win // 2 * [- 1 ] + l + win // 2 * [- 1 ]
50
+ out = [lpadded [i :( i + win ) ] for i in range (len (l ))]
50
51
51
52
assert len (out ) == len (l )
52
53
return out
53
54
# end-snippet-1
54
55
56
+
55
57
# data loading functions
56
58
def atisfold (fold ):
57
59
assert fold in range (5 )
@@ -125,6 +127,7 @@ def get_perf(filename):
125
127
126
128
return {'p' : precision , 'r' : recall , 'f1' : f1score }
127
129
130
+
128
131
# start-snippet-2
129
132
class RNNSLU (object ):
130
133
''' elman neural net model '''
@@ -199,9 +202,9 @@ def recurrence(x_t, h_tm1):
199
202
[T .arange (x .shape [0 ]), y_sentence ])
200
203
sentence_gradients = T .grad (sentence_nll , self .params )
201
204
sentence_updates = OrderedDict ((p , p - lr * g )
202
- # end-snippet-5
203
205
for p , g in
204
206
zip (self .params , sentence_gradients ))
207
+ # end-snippet-5
205
208
206
209
# theano functions to compile
207
210
# start-snippet-6
@@ -238,28 +241,28 @@ def load(self, folder):
238
241
param .name + '.npy' )))
239
242
240
243
241
-
242
244
def main (param = None ):
243
245
if not param :
244
- param = {'fold' : 3 ,
245
- # 5 folds 0,1,2,3,4
246
- 'data' : 'atis' ,
247
- 'lr' : 0.0970806646812754 ,
248
- 'verbose' : 1 ,
249
- 'decay' : True ,
250
- # decay on the learning rate if improvement stops
251
- 'win' : 7 ,
252
- # number of words in the context window
253
- 'nhidden' : 200 ,
254
- # number of hidden units
255
- 'seed' : 345 ,
256
- 'emb_dimension' : 50 ,
257
- # dimension of word embedding
258
- 'nepochs' : 60 ,
259
- # 60 is recommended
260
- 'savemodel' : False }
246
+ param = {
247
+ 'fold' : 3 ,
248
+ # 5 folds 0,1,2,3,4
249
+ 'data' : 'atis' ,
250
+ 'lr' : 0.0970806646812754 ,
251
+ 'verbose' : 1 ,
252
+ 'decay' : True ,
253
+ # decay on the learning rate if improvement stops
254
+ 'win' : 7 ,
255
+ # number of words in the context window
256
+ 'nhidden' : 200 ,
257
+ # number of hidden units
258
+ 'seed' : 345 ,
259
+ 'emb_dimension' : 50 ,
260
+ # dimension of word embedding
261
+ 'nepochs' : 60 ,
262
+ # 60 is recommended
263
+ 'savemodel' : False }
261
264
print param
262
-
265
+
263
266
folder = os .path .basename (__file__ ).split ('.' )[0 ]
264
267
if not os .path .exists (folder ):
265
268
os .mkdir (folder )
@@ -308,9 +311,11 @@ def main(param=None):
308
311
309
312
for i , (x , y ) in enumerate (zip (train_lex , train_y )):
310
313
rnn .train (x , y , param ['win' ], param ['clr' ])
311
- print '[learning] epoch %i >> %2.2f%%' % (e ,(i + 1 )* 100. / nsentences ),'completed in %.2f (sec) <<\r ' % (time .time ()- tic ),
314
+ print '[learning] epoch %i >> %2.2f%%' % (
315
+ e , (i + 1 ) * 100. / nsentences ),
316
+ print 'completed in %.2f (sec) <<\r ' % (time .time () - tic ),
312
317
sys .stdout .flush ()
313
-
318
+
314
319
# evaluation // back into the real world : idx -> words
315
320
predictions_test = [map (lambda x : idx2label [x ],
316
321
rnn .classify (numpy .asarray (
@@ -330,7 +335,7 @@ def main(param=None):
330
335
groundtruth_valid ,
331
336
words_valid ,
332
337
folder + '/current.valid.txt' )
333
-
338
+
334
339
if res_valid ['f1' ] > best_f1 :
335
340
336
341
if param ['savemodel' ]:
0 commit comments