summaryrefslogtreecommitdiff
path: root/hopefear.rb
diff options
context:
space:
mode:
authorPatrick Simianer <p@simianer.de>2014-04-25 15:25:34 +0200
committerPatrick Simianer <p@simianer.de>2014-04-25 15:25:34 +0200
commit4e3260df76571ee3be531a6d7c0c1b5c93a056a4 (patch)
tree02f5e04e32215f6c7bccf31aa45fc21325cfab9c /hopefear.rb
parent62a5ea36c1e678809a0557e67ec08f6a58252a24 (diff)
merge,cleanup,rename
Diffstat (limited to 'hopefear.rb')
-rw-r--r--hopefear.rb108
1 files changed, 27 insertions, 81 deletions
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