61
61
train_set_scale = {}
62
62
for n in range (1 , num_train_sets + 1 ):
63
63
train_set_scale [n ] = float (f .readline ().split ()[1 ])
64
- # the discounting constants will be stored as maps d1,d2,d3 from integer order
64
+ # the discounting constants will be stored as maps d1,d2,d3,d4 from integer order
65
65
# to discounting constant.
66
66
d1 = {}
67
67
d2 = {}
68
68
d3 = {}
69
+ d4 = {}
69
70
for o in range (2 , ngram_order + 1 ):
70
71
d1 [o ] = float (f .readline ().split ()[1 ])
71
72
d2 [o ] = float (f .readline ().split ()[1 ])
72
73
d3 [o ] = float (f .readline ().split ()[1 ])
74
+ d4 [o ] = float (f .readline ().split ()[1 ])
73
75
f .close ()
74
76
75
77
@@ -149,27 +151,28 @@ def MergeCountsBackward(order):
149
151
def DiscountCounts (order ):
150
152
# discount counts of the specified order > 1.
151
153
assert order > 1
152
- command = "discount-counts {d1} {d2} {d3} {work}/merged.{order} {work}/float.{order} {work}/discounted.{orderm1} " .format (
153
- d1 = d1 [order ], d2 = d2 [order ], d3 = d3 [order ], work = args . work_dir ,
154
- order = order , orderm1 = order - 1 )
154
+ command = "discount-counts {d1} {d2} {d3} {d4} { work}/merged.{order} {work}/float.{order} {work}/discounted.{orderm1} " .format (
155
+ d1 = d1 [order ], d2 = d2 [order ], d3 = d3 [order ], d4 = d4 [ order ] ,
156
+ work = args . work_dir , order = order , orderm1 = order - 1 )
155
157
RunCommand (command )
156
158
157
159
def DiscountCountsBackward (order ):
158
160
# discount counts of the specified order > 1; backprop version.
159
161
assert order > 1
160
- command = ("discount-counts-backward {d1} {d2} {d3} {work}/merged.{order} {work}/float.{order} "
162
+ command = ("discount-counts-backward {d1} {d2} {d3} {d4} { work}/merged.{order} {work}/float.{order} "
161
163
"{work}/float_derivs.{order} {work}/discounted.{orderm1} {work}/discounted_derivs.{orderm1} "
162
164
"{work}/merged_derivs.{order}" .format (
163
- d1 = d1 [order ], d2 = d2 [order ], d3 = d3 [order ], work = args . work_dir ,
164
- order = order , orderm1 = order - 1 ))
165
+ d1 = d1 [order ], d2 = d2 [order ], d3 = d3 [order ], d4 = d4 [ order ] ,
166
+ work = args . work_dir , order = order , orderm1 = order - 1 ))
165
167
output = GetCommandStdout (command );
166
168
try :
167
- [ deriv1 , deriv2 , deriv3 ] = output .split ()
169
+ [ deriv1 , deriv2 , deriv3 , deriv4 ] = output .split ()
168
170
except :
169
171
sys .exit ("get_objf_and_derivs.py: could not parse output of command: " + output )
170
172
d1_deriv [order ] = float (deriv1 ) / num_dev_set_words
171
173
d2_deriv [order ] = float (deriv2 ) / num_dev_set_words
172
174
d3_deriv [order ] = float (deriv3 ) / num_dev_set_words
175
+ d4_deriv [order ] = float (deriv4 ) / num_dev_set_words
173
176
174
177
175
178
def DiscountCountsOrder1 ():
@@ -226,6 +229,7 @@ def WriteDerivs():
226
229
print ("order{0}_D1 {1}" .format (o , d1_deriv [o ]), file = f )
227
230
print ("order{0}_D2 {1}" .format (o , d2_deriv [o ]), file = f )
228
231
print ("order{0}_D3 {1}" .format (o , d3_deriv [o ]), file = f )
232
+ print ("order{0}_D4 {1}" .format (o , d4_deriv [o ]), file = f )
229
233
f .close ()
230
234
231
235
# for n-gram orders down to 2, do the merging and discounting.
@@ -247,6 +251,7 @@ def WriteDerivs():
247
251
d1_deriv = {}
248
252
d2_deriv = {}
249
253
d3_deriv = {}
254
+ d4_deriv = {}
250
255
251
256
# Now comes the backprop code.
252
257
0 commit comments