From 4e3260df76571ee3be531a6d7c0c1b5c93a056a4 Mon Sep 17 00:00:00 2001 From: Patrick Simianer Date: Fri, 25 Apr 2014 15:25:34 +0200 Subject: merge,cleanup,rename --- hopefear.rb | 108 +++++++++++++++--------------------------------------------- 1 file changed, 27 insertions(+), 81 deletions(-) (limited to 'hopefear.rb') diff --git a/hopefear.rb b/hopefear.rb index 37782a4..aed0c9c 100644 --- a/hopefear.rb +++ b/hopefear.rb @@ -9,114 +9,60 @@ def hope_and_fear kbest, action max_idx = i; max = k.scores[:decoder] - k.scores[:psb] end } - return kbest[max_idx] + return max_idx end -def gethopefear_standard kbest, feedback - hope = fear = nil - type1 = type2 = false - if feedback == true - hope = kbest[0] - type1 = true - else - hope = hope_and_fear kbest, 'hope' - type2 = true - end - fear = hope_and_fear kbest, 'fear' - return hope, fear, false, type1, type2 -end - -def gethopefear_fear_no_exec kbest, feedback, gold, max - hope = fear = nil - type1 = type2 = false - if feedback == true - hope = kbest[0] - type1 = true - else - hope = hope_and_fear kbest, 'hope' - type2 = true - end - # sorted in descending order by max(decoder, psb), best ('hope') first - # select the 'best' translation that does not deliver the correct answer - kbest.sort{ |x,y| (y.scores[:decoder]+y.scores[:psb])<=>(x.scores[:decoder]+x.scores[:psb]) }.each_with_index { |k,i| - break if i==max - if !exec(k.s, gold, true)[0] - fear = k - break - end - } - skip=true if !fear - return hope, fear, skip, type1, type2 -end - -def gethopefear_fear_no_exec_skip kbest, feedback, gold - hope = fear = nil - type1 = type2 = false - if feedback == true - hope = kbest[0] - type1 = true - else - hope = hope_and_fear kbest, 'hope' - type2 = true - end - fear = hope_and_fear(kbest, 'fear') - # skip example if fear gives the right answer - skip = exec(fear.s, gold, true)[0] - return hope, fear, skip, type1, type2 -end - -def gethopefear_fear_no_exec_hope_exec kbest, feedback, gold, max - hope = fear = nil; hope_idx = 0 +def gethopefear_rebol kbest, feedback, gold, max, own_reference=nil + hope = fear = nil; new_reference = nil type1 = type2 = false - # sorted in descending order by max(decoder, psb), best ('hope') first - sorted_kbest = kbest.sort{ |x,y| (y.scores[:decoder]+y.scores[:psb])<=>(x.scores[:decoder]+x.scores[:psb]) } if feedback == true + # hope hope = kbest[0] + new_reference = hope + kbest.each { |k| k.scores[:psb] = BLEU::per_sentence_bleu k.s, new_reference } + # fear + kbest.sort_by { |k| -(k.scores[:model]-k.score[:psb]) }.each_with_index { |k,i| + break if i==max + if !exec(k.s, gold, true)[0] + fear = k + break + end + } type1 = true else - # select 'best' translation that correctly executes - sorted_kbest.each_with_index { |k,i| - next if i==0 + # fear + fear = kbest[0] + # hope + kbest.sort_by { |k| -(k.scores[:model]+k.score[:psb]) }.each_with_index { |k,i| break if i==max if exec(k.s, gold, true)[0] - hope_idx = i hope = k break end } type2 = true end - # select 'best' translation that does not correctly execute - sorted_kbest.each_with_index { |k,i| - break if i>(kbest.size-(hope_idx+1))||i==max - if !exec(k.s, gold, true)[0] - fear = k - break - end - } - # skip if hope or fear could no be found skip = true if !hope||!fear - return hope, fear, skip, type1, type2 + return hope, fear, skip, type1, type2, new_reference end -def gethopefear_fear_no_exec_hope_exec_skip kbest, feedback, gold, max +def gethopefear_rebol_light kbest, feedback, gold hope = fear = nil type1 = type2 = false if feedback == true hope = kbest[0] type1 = true else - hope = hope_and_fear kbest, 'hope' + hope = kbest[hope_and_fear kbest, 'hope'] type2 = true end - fear = hope_and_fear kbest, 'fear' - # skip if fear executes correctly or hope doesn't - skip = exec(fear.s, gold, true)[0]||!exec(hope.s, gold, true)[0] + fear = kbest[hope_and_fear kbest, 'fear'] + # skip example if fear gives the right answer + skip = exec(fear.s, gold, true)[0] return hope, fear, skip, type1, type2 end -# new variant w/ "real" reference -def gethopefear_only_exec kbest, feedback, gold, max, own_reference=nil +def gethopefear_exec kbest, feedback, gold, max, own_reference=nil hope = fear = nil; hope_idx = 0; new_reference = nil type1 = type2 = false if feedback == true @@ -158,10 +104,10 @@ def gethopefear_rampion kbest, reference # 1best is automatically hope if it matches reference if kbest[0].s == reference hope = kbest[0] - fear = hope_and_fear kbest, 'fear' + fear = kbest[hope_and_fear kbest, 'fear'] type1 = true else - hope = hope_and_fear kbest, 'hope' + hope = kbest[hope_and_fear kbest, 'hope'] # 1best is automatically fear if it doesn't match reference fear = kbest[0] type2 = true -- cgit v1.2.3