From fb4430267a814dc894b27d4c15f92954269d4787 Mon Sep 17 00:00:00 2001 From: Kevin Brubeck Unhammer Date: Thu, 18 Sep 2008 12:00:43 +0200 Subject: [PATCH] rewrote loc_h_harmonic's STOP initialization to reflect report.pdf; simpler now --- report/report.pdf | Bin 128822 -> 129004 bytes report/report.tex | 8 ++--- src/loc_h_dmv.py | 26 +++++++++++++--- src/loc_h_dmv.pyc | Bin 36982 -> 37190 bytes src/loc_h_harmonic.py | 77 ++++++++++++++++++++++++++++------------------- src/main.py | 82 ++++++++++++++++++++++++++------------------------ 6 files changed, 115 insertions(+), 78 deletions(-) diff --git a/report/report.pdf b/report/report.pdf index d5bf6967b516d98ed96df41856c1ad02f8cdc8c7..44b69111d88234dd14864a3b9d1aed97cf562f7c 100644 GIT binary patch delta 18826 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 delta 18743 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 n6Qn7m6082#q%Dz3l|9w9xwEUg^Wm*!KD 1.0: raise Exception, "probability > 1.0:%s"%key + return dict[key] else: return 0.0 def no_zeroL(str,tagstr,prob): if prob > 0.0: return (str%(tagstr,prob)).ljust(LJUST) @@ -885,7 +887,7 @@ def testgrammar(): loc_h_harmonic.FNONSTOP_MIN = 25 loc_h_harmonic.FSTOP_MIN = 5 loc_h_harmonic.RIGHT_FIRST = 1.0 - loc_h_harmonic.OTHER_STOP_CALC = False + loc_h_harmonic.OLD_STOP_CALC = True return loc_h_harmonic.initialize(testcorpus) @@ -1056,8 +1058,16 @@ def compare_grammars(g1,g2): def testNVNgrammar(): - from loc_h_harmonic import initialize - g = initialize(['n v n'.split()]) + import loc_h_harmonic + + # make sure these are the way they were when setting up the tests: + loc_h_harmonic.HARMONIC_C = 0.0 + loc_h_harmonic.FNONSTOP_MIN = 25 + loc_h_harmonic.FSTOP_MIN = 5 + loc_h_harmonic.RIGHT_FIRST = 1.0 + loc_h_harmonic.OLD_STOP_CALC = True + + g = loc_h_harmonic.initialize(['n v n'.split()]) return g # todo def testIO(): @@ -1086,6 +1096,14 @@ if __name__ == "__main__": # g1 = testreestimation() # g2 = testreestimation2() # print compare_grammars(g1,g2) + + + + + + + +if False: g = testNVNgrammar() q_sent = inner_sent(g,'n v n'.split(),{}) q_tree = {} diff --git a/src/loc_h_dmv.pyc b/src/loc_h_dmv.pyc index 328748c9a3a44803aecb667655fd981d3a23f48c..dcdc0ba1de3316029bea80225b8682b8da06bbe0 100644 GIT binary patch delta 7041 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 MTJ1@cSA3)D|IIZ3e*gdg delta 6887 zcwVJg3s9WZ6~1?YMOc>ib4kLI04_;{WD^re*zgXB1j2f?QTKUTsGD1jVe?3fi8YEpa>2D;8m}(^1fsBM*^%2)J=6ay^b$4#qfm3qo#p|p^nNgEL7 zwwhO1V2ce1F>oGM0FVo?lpkrc@E@6z=~{l5xl|l_-u!MRT)^f5e>}ayWQAceKq-Ge zy~eZ*h9v-HygH-Z6i2i)kKdM2OcS`8@vN}|CT;wx%+^dCUI36HCy$$!8QD59-mad_ ztfO=nUza^vwh=q*)spT~}l}YQxaEuSVg4lc~B4hd7S!&7O2IDk1}Q7WS8E& zqHLM2UMoOiYzJ%W?i6NgT2WzaN0GUAMZv0V8Xs^?m7SqGT>-FDt(o=8hj>sfGP$~j0{_!AY5q%kr45C5{_F-N;bXaE4MG6ArQ#6(>{p&FnKU@Q1_ zMyeQkyj~^f3@P3)Rm*IT(yE#m9T^b1tUeNzRq6vN_V5QCC8#coTD9_IVq~|*&!r^h z+KOvDgiIli=#DcZVJ3Y9zzTr3IRPrQUE^T}X^jm6pgV%w*)ro83xlZBPOs0cutF(a zj6ldaEz{5l_f;1d(cYtcwt7jP<|E7jAZ^5-sJ15U6+_Q_`A&)8u6~ZkaCUS|3g>v<#mT@(5&A9){^3dnRlGT+ZNdsbc&29#9?l5 zT(eGhkHzU2bUKm*uysUz&G9~sTn*D#k(i&Or+^V>!qbZ4J*Q)!`{3Ph?E(*A2jcFQ z>V=R-CvZ8(7*srV9e~Iwn}rj=&=kAZ?+i|kE0|T#U8HE&1MCOTt%qtgNrxL(hQmks zHO=eQR~t^BQz&)_Ko+~SX13lrren)17RUWH-B2x^?7yn0GPQ6~Y=pD`~D zl4x!ac|ZwBAIFFZ1FY0m$6*x`A{HcD1|b(p5zuTyzMy|H#BPA~S%8}Wq{{f()(VHN zQH*?0>%8bh&7g;(dgkQ;B6TF9^S-teqjNZ@1g6zTTL-A+RuYpQa%WIcLSg5q;&O`~ zqq=S72Ch+C(1M`#;BG0+#Uv`BSDAK>@DIC}h?~-Bq54=GGb~3tpyI(8TC>I?0N`d_ zyun_u3aO(HSpm?wP%y0VFmii>kbGG=_ji<;kS~<2g5S|mSg7d)y#+(X?;K(#*)82B zey!jicYIK$*;6_cih_n-P);x`M5Pw3#x`|r=e@KNPD)*yv_mZbs~0`)V*H}6d%Cy8 zxC%MFl20x7U|%KU>}%9wv}}QP2Ua}$Zr;@$timSkI6zP%o3tniZr+|jhxpR%547or z7iVnIaxsrFECY5Acl7*>mh%sKa+}a&jsif2uz}C99{`}EeYKCV+mYq^p%m_AM(S55 z*~7FFbg8vfGdiQT1 zy3bLDWuEiCUHi`8@aTun)$rWPKipZo2Yo>IowT@f^Jt+K&{t3fy(z#f^j!c*=~Ci( zyaJ$`FrGD-mvpxn&Z%>kPZ<7RnNNNbneP`e=SR>DQE+q!l->$}sUBsA6 z7o;if5@wFS{k&R2y`rl6MENFc2Z_4yv@`lTB8ED#&~Y;`Co3&6E4tvzQ~U{w^o6%q<(c0Uv(N{QR^-&#hUbje!R&&5OR10QUi42x2h)PaLLb%<`-qIYu-}j~00@ z`zh7pnxzqBK@S38X5LE#y8!eG^Z>KQg3en&Ko~fe)!Z5K>{TQ;QY{*X$g7?<(MJhC zVX}zymOJ*m7Jzeqsujd|o#-aXt<_ArT=C0>&Y&Iv0) z5kAXb8SaRnaM-`-1{ws=A2FhZvBC^`6jnp*?$Ls1ORU^K2Y}APrYCb6}0mSIYh$|hufC43y>3%CR>cTIC(|8%l)n{RMR%!bAs@|wq`6f*+?BBCx=D9mdn@BNhO6ky zXz4e?8Pv!B9_};!5l)@}c!Rf3Hqd?i&}3&G&i)W*Nz8OTcrs-wm+n`WO*JRBxJXoy z_z02=Ug=lxQ={}pU=?*aCR)IkU$rMdB*S1iKXLxR{=&S)h-A@I+7G$nM#^2%pzTQFKS1-EZO8Aa@_n`;sk!=(OpQRuvws9kC*_$Nl$w4JFIUdGo z_geYG9yJRx`tadgn!{f>Tr&=8cT?gvkTFq!DG_NLK1#b2h{q87mMvx}e5UTjtlj1L zQv8u(zfPjs@>-{?Ug`TU#}-g38O`{s)X|w6v(uLgIw9bb&`g@gvuB4&bp3!DWO=~2 zkY$G7GP|B$$X}R!wG4|9+&S#*a|Wb^7WAsy_|rG7qrLo-n_i1xR$NP>ufZYT#Dvf5 zbWcpNMp(dmAb6M^0R0bhFlJ-4(pZcsX&Zc7;}a7@2cBTEq89-`(P3CTo!KX_9d!(i2FAHqkzZu|L60|# z%>nx~Mq$b|KB 1) # after second - f[head, 'STOP', LEFT,ADJ] += (loc_h == 0) # first word - f[head, '-STOP', LEFT,ADJ] += (loc_h > 0) # not first - f[head, 'STOP', RIGHT,NON] += (loc_h == n - 1) # second-to-last - f[head, '-STOP', RIGHT,NON] += (loc_h < n - 1) # before second-to-last - f[head, 'STOP', RIGHT,ADJ] += (loc_h == n) # last word - f[head, '-STOP', RIGHT,ADJ] += (loc_h < n) # not last - else: # note: int(True) == 1 + if OLD_STOP_CALC: f[head, 'STOP', LEFT,NON] += (loc_h == 1) # second word f[head, '-STOP', LEFT,NON] += (not loc_h == 1) # not second f[head, 'STOP', LEFT,ADJ] += (loc_h == 0) # first word @@ -99,6 +96,20 @@ def init_freq(corpus, tags): f[head, '-STOP', RIGHT,NON] += (not loc_h == n - 1) # not second-to-last f[head, 'STOP', RIGHT,ADJ] += (loc_h == n) # last word f[head, '-STOP', RIGHT,ADJ] += (not loc_h == n) # not last + else: + f[head, 'STOP', LEFT,NON] += (loc_h == 1) # second word + f[head, 'STOP', LEFT,ADJ] += (loc_h == 0) # first word + f[head, 'STOP', RIGHT,NON] += (loc_h == n - 1) # second-to-last + f[head, 'STOP', RIGHT,ADJ] += (loc_h == n) # last word +# elif OTHER_STOP_CALC: +# f[head, 'STOP', LEFT,NON] += (loc_h == 1) # second word +# f[head, '-STOP', LEFT,NON] += (loc_h > 1) # after second +# f[head, 'STOP', LEFT,ADJ] += (loc_h == 0) # first word +# f[head, '-STOP', LEFT,ADJ] += (loc_h > 0) # not first +# f[head, 'STOP', RIGHT,NON] += (loc_h == n - 1) # second-to-last +# f[head, '-STOP', RIGHT,NON] += (loc_h < n - 1) # before second-to-last +# f[head, 'STOP', RIGHT,ADJ] += (loc_h == n) # last word +# f[head, '-STOP', RIGHT,ADJ] += (loc_h < n) # not last # this is where we make the "harmonic" distribution. quite. for loc_a, arg in enumerate(sent): @@ -118,32 +129,34 @@ def init_freq(corpus, tags): return f def init_normalize(f, tags, numtag, tagnum): - '''Use frequencies (and sums) in f to return create p_STOP, p_ATTACH - and p_GO_AT (which is (1-p_STOP)*p_ATTACH). - - Return a usable DMV_Grammar2.''' + '''Use frequencies (and sums) in f to return create p_STOP, p_ATTACH, + p_ROOT. + + Return a usable DMV_Grammar.''' p_rules = [] p_STOP, p_ROOT, p_ATTACH, p_ORDER = {},{},{},{} for h, head in numtag.iteritems(): - p_ROOT[h] = float(f['ROOT', head]) / f['sum', 'ROOT'] + # f['ROOT', head] is just a simple frequency count + p_ROOT[h] = f['ROOT', head] / f['sum', 'ROOT'] - # p_STOP = STOP / (STOP + NOT_STOP) for dir in [LEFT,RIGHT]: for adj in [NON,ADJ]: - den = f[head, 'STOP', dir, adj] + f[head, '-STOP', dir, adj] - if den > 0.0: - p_STOP[h, dir, adj] = float(f[head, 'STOP', dir, adj]) / float(den) - else: - p_STOP[h, dir, adj] = 1.0 - + if OLD_STOP_CALC: + den = f[head, 'STOP', dir, adj] + f[head, '-STOP', dir, adj] + if den > 0.0: + p_STOP[h, dir, adj] = f[head, 'STOP', dir, adj] / den + else: p_STOP[h, dir, adj] = 1.0 + else: + p_STOP[h, dir, adj] = \ + (FSTOP_MIN + f[head, 'STOP', dir, adj] * STOP_C) / \ + (FSTOP_MIN + f['ROOT',head] * NSTOP_C) - p_ORDER[GOR, h] = RIGHT_FIRST p_ORDER[GOL, h] = 1 - RIGHT_FIRST for dir in [LEFT, RIGHT]: for arg, val in f[head, dir].iteritems(): - p_ATTACH[tagnum[arg], h, dir] = float(val) / f[head,'sum',dir] + p_ATTACH[tagnum[arg], h, dir] = val / f[head,'sum',dir] return DMV_Grammar(numtag, tagnum, p_ROOT, p_STOP, p_ATTACH, p_ORDER) @@ -159,6 +172,8 @@ def initialize(corpus): g = init_normalize(f, tags, numtag, tagnum) g.HARMONIC_C = HARMONIC_C # for evaluations in main.py, todo: remove + g.STOP_C = STOP_C + g.NSTOP_C = NSTOP_C g.FNONSTOP_MIN = FNONSTOP_MIN g.FSTOP_MIN = FSTOP_MIN diff --git a/src/main.py b/src/main.py index 3facf68..b5b6336 100644 --- a/src/main.py +++ b/src/main.py @@ -15,19 +15,21 @@ def initialize_loc_h(tagonlys): # loc_h_harmonic.HARMONIC_C = 380.111684914 # loc_h_harmonic.FSTOP_MIN = 13.5744632704 # loc_h_harmonic.FNONSTOP_MIN = 34.8939452454 - loc_h_harmonic.HARMONIC_C = 0 # 509.63 #1000.0 * random.random() - loc_h_harmonic.FSTOP_MIN = 13.08 #20.0 * random.random() - loc_h_harmonic.FNONSTOP_MIN = 30.11 #50.0 * random.random() + loc_h_harmonic.FSTOP_MIN + loc_h_harmonic.HARMONIC_C = random.random() # 0.0 # 509.63 #1000.0 * random.random() + loc_h_harmonic.FSTOP_MIN = random.random() # 1.0 # 13.08 #20.0 * random.random() + loc_h_harmonic.STOP_C = random.random() + loc_h_harmonic.NSTOP_C = random.random() loc_h_harmonic.RIGHT_FIRST = 1.0 - loc_h_harmonic.OTHER_STOP_CALC = False + loc_h_harmonic.OLD_STOP_CALC = False print ''' -HARMONIC_C: %s, FNONSTOP_MIN: %s, FSTOP_MIN: %s -RIGHT_FIRST: %s, OTHER_STOP_CALC: %s'''%(loc_h_harmonic.HARMONIC_C, - loc_h_harmonic.FNONSTOP_MIN, - loc_h_harmonic.FSTOP_MIN, - loc_h_harmonic.RIGHT_FIRST, - loc_h_harmonic.OTHER_STOP_CALC) +HARMONIC_C: %s, STOP_C: %s, NSTOP_C: %s, FSTOP_MIN: %s +RIGHT_FIRST: %s, OLD_STOP_CALC: %s'''%(loc_h_harmonic.HARMONIC_C, + loc_h_harmonic.STOP_C, + loc_h_harmonic.NSTOP_C, + loc_h_harmonic.FSTOP_MIN, + loc_h_harmonic.RIGHT_FIRST, + loc_h_harmonic.OLD_STOP_CALC) g = loc_h_harmonic.initialize(tagonlys) return g @@ -184,9 +186,9 @@ def compare_loc_h_cnf(): # end compare_loc_h_cnf() -def init_nothing(g,H,N,S): +def init_nothing(g,H,S,N,M): print ''' -HARMONIC_C: %s, FNONSTOP_MIN: %s, FSTOP_MIN: %s'''%(H,N,S) +HARMONIC_C: %s, STOP_C: %s, NSTOP_C: %s, FSTOP_MIN: %s'''%(H,S,N,M) return lambda corpus:g def rnd_grammars_test(): @@ -202,26 +204,26 @@ def rnd_grammars_test(): iterations=0, corpus_offset=0, eval=True) - rnd_grammars0 += [(g, g.HARMONIC_C, g.FNONSTOP_MIN, g.FSTOP_MIN)] + rnd_grammars0 += [(g, g.HARMONIC_C, g.STOP_C, g.NSTOP_C, g.FSTOP_MIN)] rnd_grammars1 = [(test_likelihood(loc_h_dmv.reestimate, - init_nothing(g,H,N,S), + init_nothing(g,H,S,N,M), loc_h_dmv.inner_sent, corpus_size=6268, iterations=1, corpus_offset=0, eval=True), - H,N,S) - for g,H,N,S in rnd_grammars0] + H,S,N,M) + for g,H,S,N,M in rnd_grammars0] rnd_grammars2 = [(test_likelihood(loc_h_dmv.reestimate, - init_nothing(g,H,N,S), + init_nothing(g,H,S,N,M), loc_h_dmv.inner_sent, corpus_size=6268, iterations=1, corpus_offset=0, eval=True), - H,N,S) - for g,H,N,S in rnd_grammars1] + H,S,N,M) + for g,H,S,N,M in rnd_grammars1] if __name__ == "__main__": print "main.py:" @@ -237,24 +239,26 @@ if __name__ == "__main__": # corpus_size=5, # iterations=4) - import loc_h_dmv + rnd_grammars_test() + +# import loc_h_dmv # reload(loc_h_dmv) -# rnd_grammars_test() - print "\ntrying reestimate v.1 ##############################" - g = test_likelihood(loc_h_dmv.reestimate, - initialize_loc_h, - loc_h_dmv.inner_sent, - corpus_size=5, - iterations=4, - corpus_offset=0, - eval=True) - print g - - print "\ntrying reestimate v.2 ##############################" - g = test_likelihood(loc_h_dmv.reestimate2, - initialize_loc_h, - loc_h_dmv.inner_sent, - corpus_size=5, - iterations=4, - corpus_offset=0) - print "main.py: done" +# print "\ntrying reestimate v.1 ##############################" +# g = test_likelihood(loc_h_dmv.reestimate, +# initialize_loc_h, +# loc_h_dmv.inner_sent, +# corpus_size=6268, +# iterations=100, +# corpus_offset=0, +# eval=True) +# print g + +# print "\ntrying reestimate v.2 ##############################" +# g = test_likelihood(loc_h_dmv.reestimate2, +# initialize_loc_h, +# loc_h_dmv.inner_sent, +# corpus_size=5, +# iterations=4, +# corpus_offset=0) +# print "main.py: done" +# print g -- 2.11.4.GIT