summaryrefslogtreecommitdiff
path: root/views
diff options
context:
space:
mode:
authorPatrick Simianer <p@simianer.de>2015-12-11 15:45:52 +0100
committerPatrick Simianer <p@simianer.de>2015-12-11 15:45:52 +0100
commit621d438f0406058f8ba5a2d0c11c9a4477d6a951 (patch)
tree08e7a8c9ca02cdd37d7207f567115d9be340c236 /views
parentbc1d6f9488927df30b7695d39c6f9189c6ae7f46 (diff)
overhauled debug view
Diffstat (limited to 'views')
-rw-r--r--views/debug.haml203
1 files changed, 124 insertions, 79 deletions
diff --git a/views/debug.haml b/views/debug.haml
index 013b7b1..1cda494 100644
--- a/views/debug.haml
+++ b/views/debug.haml
@@ -2,98 +2,135 @@
!!!
%html
%head
- %title debug view (session ##{session_key})
+ %title Debug view (Session ##{session_key})
%link(rel="stylesheet" type="text/css" href="debug.css")
%script{:src =>"http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js", :charset=>"utf-8"}
%script{:src => "http://postedit.cl.uni-heidelberg.de/js/debug.js"}
%body
- %h1 debug view
- %h2 session ##{session_key}
- - if data["kbest"].empty?
+ %h1 Debug view
+ %h2 Session [##{session_key}]
+ - if pairwise_ranking_data["kbest"].empty?
%p.red
%strong No data to show!
%ul
%li
- %a.ajax{:tgt => "/reset_progress", :href => "#"} reset progress
+ %a{ :href => "#controls" } Controls
%li
- %a.ajax{:tgt => "/reset_weights", :href => "#"} reset weights
+ %a{ :href => "#post_edit" } Post-edit &amp; machine translation
%li
- %a.ajax{:tgt => "/reset_extractor", :href => "#"} reset extractor
+ %a{ :href => "#meta" } Meta
%li
- %a.ajax{:tgt => "/reset_add_rules", :href => "#"} reset add. rules
+ %a{ :href => "#rules" } Learned rules
%li
- %a.ajax{:tgt => "/shutdown", :href => "#"} shutdown
- %p#ajax_result
- %p
- %strong learning rate:
- %select
- - [1000,100,10,1,0.1,0.01,0.001,0.0001,0.00001,0.000001,0.0000001,0.00000001,0.000000001,0.0000000001].each do |i|
- %option{:value => i, :onclick => "window.open(\"http://\"+window.location.host+\"/set_learning_rate/#{i}\");"} #{i}
- %span | sparse features:
- %select
- - [1000,100,10,1,0.1,0.01,0.001,0.0001,0.00001,0.000001,0.0000001,0.00000001,0.000000001,0.0000000001].each do |i|
- %option{:value => i, :onclick => "window.open(\"http://\"+window.location.host+\"/set_sparse_learning_rate/#{i}\");"} #{i}
- %p#svg_b64 #{data2["svg"][data2["progress"]-1]}
+ %a{ :href => "#pairwise_ranking" } Pairwise ranking
+ %hr
+ /=#########################################################################
+ %h2#controls Controls
+ %h3 Reset
+ %p
+ %strong [Server reply]
+ %span#control_reply
+ %ul
+ %li
+ %a.ajax{:tgt => "/reset_progress", :href => "#controls"} Reset progress
+ %li
+ %a.ajax{:tgt => "/reset_weights", :href => "#controls"} Reset weights
+ %li
+ %a.ajax{:tgt => "/reset_extractor", :href => "#controls"} Reset extractor
+ %li
+ %a.ajax{:tgt => "/reset_new_rules", :href => "#controls"} Reset new rules
+ %li
+ %a.ajax{:tgt => "/shutdown", :href => "#controls"} Initiate shutdown
+ %h3 Learning rate
+ %p Default for dense features: <strong>1.0</strong>, for sparse features: <strong>1.0e-05</strong>
+ %select
+ - [1000,100,10,1,0.1,0.01,0.001,0.0001,0.00001,0.000001,0.0000001,0.00000001,0.000000001,0.0000000001].each do |i|
+ %option.ajax{:value => i, :tgt => "/set_learning_rate/#{i}"} #{i}
+ %em dense features <br />
+ %select
+ - [1000,100,10,1,0.1,0.01,0.001,0.0001,0.00001,0.000001,0.0000001,0.00000001,0.000000001,0.0000000001].each do |i|
+ %option.ajax{:value => i, :tgt => "/set_learning_rate/sparse/#{i}"} #{i}
+ %em sparse features
+ %p
+ %a{ :href => "#" } ^ up
+ %hr
+ /=#########################################################################
+ %h2#post_edit Post-edit &amp; machine translation
+ %p#svg_b64 #{data["svg"][progress]}
%div#svg
%table
%tr
%td.noborder
%strong progress:
- %td.left #{[0,data2["progress"]-1].max}
+ %td.left #{[0,progress].max}
%tr
%td.noborder
- %strong source:
- %td.left #{data2["source_segments"][[0,data2["progress"]-1].max]}
+ %strong MT Input
+ %td.left #{data["source_segments"][[0,progress].max]}
%tr
%td.noborder
- %strong source (original):
- %td.left #{data2["raw_source_segments"][[0,data2["progress"]-1].max]}
+ %strong Raw source
+ %td.left #{data["raw_source_segments"][[0,progress].max]}
%tr
%td.noborder
- %strong post-edit:
- %td.left #{data2["post_edits_raw"][data2["progress"]-1]}
+ %strong Post-edit
+ %td.left #{data["post_edits_raw"][progress]}
%tr
%td.noborder
- %strong post-edit (processed):
- %td.left #{data2["post_edits"][data2["progress"]-1]}
+ %strong Post-edit (processed)
+ %td.left #{data["post_edits"][progress]}
%tr
%td.noborder
- %strong original mt:
- %td.left #{data2["mt_raw"][data2["progress"]-1]}
+ %strong Original MT
+ %td.left #{data["mt_raw"][progress]}
%tr
%td.noborder
- %strong shown mt:
- %td.left #{data2["mt"][data2["progress"]-1]}
+ %strong Displayed MT
+ %td.left #{data["mt"][progress]}
%tr
%td.noborder
- %strong best match (bleu=#{data["best_match_score"]}):
- %td.left #{data["best_match"]}
- %h2 derivation
- %pre #{data2["derivations"][data2["progress"]-1]}
+ %strong Best match (BLEU=#{(pairwise_ranking_data["best_match_score"]*100).round(2)}%)
+ %td.left #{pairwise_ranking_data["best_match"]}
+ %h2 Derivation
+ %pre #{data["derivations"][progress]}
+ %h3 Processed
+ - if data["derivations_proc"][progress]
+ %pre #{JSON.pretty_generate(JSON.parse(data["derivations_proc"][progress]))}
+ %h2 Client reply
+ - if data["feedback"][progress]
+ %pre #{JSON.pretty_generate(JSON.parse(data["feedback"][progress]))}
+ %p
+ %a{ :href => "#" } ^ up
+ %hr
+ /=#########################################################################
+ %h2#meta Meta
+ %p <strong>k:</strong> #{pairwise_ranking_data["samples_size"]}
+ %p <strong>number of updates:</strong> #{pairwise_ranking_data["num_up"]}
+ %p <strong>updated features:</strong> #{pairwise_ranking_data["updated_features"]}
+ %p <strong>learning rate:</strong> #{pairwise_ranking_data["learning_rate"]}
+ %p <strong>learning rate (sparse):</strong> #{pairwise_ranking_data["learning_rate_sparse"]}
+ %p <strong>duration:</strong> #{data["durations"][progress]}ms
+ %p <strong>updated:</strong> #{data["updated"][progress]}
%p
- %strong processed
- - if data2["derivations_proc"][data2["progress"]-1]
- %pre #{JSON.pretty_generate(JSON.parse(data2["derivations_proc"][data2["progress"]-1]))}
- %h2 manual update
- - if data2["feedback"][data2["progress"]-1]
- %pre #{JSON.pretty_generate(JSON.parse(data2["feedback"][data2["progress"]-1]))}
- %h2 meta
- %p <strong>k:</strong> #{data["samples_size"]}
- %p <strong>number of updates:</strong> #{data["num_up"]}
- %p <strong>updated features:</strong> #{data["updated_features"]}
- %p <strong>learning rate:</strong> #{data["learning_rate"]}
- %p <strong>learning rate (sparse):</strong> #{data["learning_rate_sparse"]}
- %p <strong>duration:</strong> #{data2["durations"][data2["progress"].to_i-1]}ms
- %p <strong>updated:</strong> #{data2["updated"][data2["progress"].to_i-1]}
- %h2
- additional rules (forced rules)
+ %a{ :href => "#" } ^ up
+ %hr
+ /=#########################################################################
+ %h2#rules New &amp; known rules
%pre #{additional_rules.join("\n")}
- %h2 k-best
- %p bleu | model score | original rank | \|e\| | translation \n features
- %p.red update needed ("any of the above hypotheses has a lower model score")
+ %h3
+ Rejected [known] rules
+ %pre #{rejected_rules.join("\n")}
+ %p
+ %a{ :href => "#" } ^ up
+ %hr
+ /=#########################################################################
+ %h2#pairwise_ranking Pairwise ranking updates
+ %h3 K-best list
+ %pre [BLEU score | Model score | Original rank | \|e\| | Translation \n Features]
+ %p.red In red: Update needed, i.e. "any of the above hypotheses has a lower model score"
%ol
- kbest = []
- - data["kbest"].each { |i| x=splitpipe(i); kbest << [ x[0].to_f, x[1].to_f, x[2].to_i, x[3], x[4] ] }
+ - pairwise_ranking_data["kbest"].each { |i| x=splitpipe(i); kbest << [ x[0].to_f, x[1].to_f, x[2].to_i, x[3], x[4] ] }
- kbest.sort! { |i,j| j[0] <=> i[0] }
- kbest.each_with_index do |k,j|
- b = kbest[0,j].map { |l| l[0]>k[0] && l[1]<k[1] }.include? true
@@ -107,21 +144,21 @@
%p{:style=>"font-size:80%"} #{k[3]}
- if [9,89].include? j
%hr
- %h2 weight updates
+ %h3 Weight updates
%table
%tr
- %th feature
- %th before
- %th after
- %th diff
- %th raw diff
- - data["weights_before"].default = 0
- - data["weights_after"].keys.each.sort { |a,b| a[0] <=> b[0] }.each do |k|
+ %th Feature
+ %th Before
+ %th After
+ %th Diff.
+ %th Raw diff.
+ - pairwise_ranking_data["weights_before"].default = 0
+ - pairwise_ranking_data["weights_after"].keys.each.sort { |a,b| a[0] <=> b[0] }.each do |k|
%tr
%td.noborder <strong> #{k} </strong>
- %td #{"%+.3f"%data["weights_before"][k].round(4)}
- %td #{"%+.3f"%data["weights_after"][k].round(4)}
- - diff = data["weights_after"][k]-data["weights_before"][k]
+ %td #{"%+.3f"%pairwise_ranking_data["weights_before"][k].round(4)}
+ %td #{"%+.3f"%pairwise_ranking_data["weights_after"][k].round(4)}
+ - diff = pairwise_ranking_data["weights_after"][k]-pairwise_ranking_data["weights_before"][k]
- if diff < 0
%td.red #{"%+.3f"%(diff).round(4)}
- elsif diff > 0
@@ -129,20 +166,26 @@
- else
%td #{"%+.3f"%(diff).round(4)}
- if !k.start_with? "R:"
- %td #{"%+.1f"%((data["weights_after"][k]-data["weights_before"][k])/data["learning_rate"]).round(2)}
+ %td #{"%+.1f"%((pairwise_ranking_data["weights_after"][k]-pairwise_ranking_data["weights_before"][k])/pairwise_ranking_data["learning_rate"]).round(2)}
- else
- %td #{"%+.1f"%((data["weights_after"][k]-data["weights_before"][k])/data["learning_rate_sparse"]).round(2)}
- %h3 features explained
+ %td #{"%+.1f"%((pairwise_ranking_data["weights_after"][k]-pairwise_ranking_data["weights_before"][k])/pairwise_ranking_data["learning_rate_sparse"]).round(2)}
+ %h3 Features explained
%table
%tr
%td.noborder EgivenFCoherent (rule)
%td.left -log10[ c(e, f) / sample c(f) ]
%tr
- %td.noborder ForceRule (rule)
- %td.left only feature of additional rules, weight fixed at 1
+ %td.noborder NewRule (rule)
+ %td.left Only feature of additional rules, weight fixed at 1
+ %tr
+ %td.noborder KnownRule (rule)
+ %td.left Added to existing rules if they could be extracted from previous post-edits
+ %tr
+ %td.noborder OOVFix (rule)
+ %td.left Manually added rules to fix OOV words
%tr
%td.noborder Glue
- %td.left absolute number of rules used from glue grammar
+ %td.left Absolute number of rules used from glue grammar
%tr
%td.noborder IsSingletonF/E (rule)
%td.left true|false (1|0) (sum)
@@ -154,7 +197,7 @@
%td.left -log10[ score ]
%tr
%td.noborder LanguageModel_OOV
- %td.left abs. count of OOV unigrams
+ %td.left Abs. count of OOV unigrams
%tr
%td.noborder MaxLexFgivenE (rule)
%td.left Sum_f -log10(maxScore) (maxScore = max_e(ttable(f))
@@ -163,7 +206,7 @@
%td.left Sum_e -log10(maxScore) (maxScore = max_f(ttable(e))
%tr
%td.noborder PassThrough
- %td.left absolute count of used PassThrough rules (1 per word)
+ %td.left Absolute count of used PassThrough rules (1 per word)
%tr
%td.noborder SampleCountF (rule)
%td.left log10 [ sample c(f) ]
@@ -175,11 +218,13 @@
%td.left ^^^ (|e| <=> |f|)
%tr
%td.noborder R:*
- %td.left rule indicator features, sum over full derivation per rule
+ %td.left Rule indicator features, sum over full derivation per rule
%tr
%td.noborder Shape_*
- %td.left indicator features for rule shapes
+ %td.left Indicator features for rule shapes
%tr
%td.noborder IsSupportedOnline
- %td.left counts how many rules have support from local context (Denkowski)
+ %td.left Counts how many rules have support from local context (Denkowski)
+ %p
+ %a{ :href => "#" } ^ up