You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@joshua.apache.org by mj...@apache.org on 2016/08/20 02:43:34 UTC
[10/15] incubator-joshua git commit: build two nodes over terminal
productions
build two nodes over terminal productions
Project: http://git-wip-us.apache.org/repos/asf/incubator-joshua/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-joshua/commit/9b73d614
Tree: http://git-wip-us.apache.org/repos/asf/incubator-joshua/tree/9b73d614
Diff: http://git-wip-us.apache.org/repos/asf/incubator-joshua/diff/9b73d614
Branch: refs/heads/JOSHUA-284
Commit: 9b73d6147a61580058cc57c86c1f623f44b7452a
Parents: af4ef88
Author: Matt Post <po...@cs.jhu.edu>
Authored: Fri Aug 19 13:16:47 2016 -0500
Committer: Matt Post <po...@cs.jhu.edu>
Committed: Fri Aug 19 13:16:47 2016 -0500
----------------------------------------------------------------------
.../apache/joshua/decoder/phrase/Candidate.java | 37 ++++++++++++++------
.../joshua/decoder/phrase/Hypothesis.java | 4 +--
.../org/apache/joshua/decoder/phrase/Stack.java | 8 ++---
3 files changed, 33 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/9b73d614/src/main/java/org/apache/joshua/decoder/phrase/Candidate.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/phrase/Candidate.java b/src/main/java/org/apache/joshua/decoder/phrase/Candidate.java
index 303749d..bd581e3 100644
--- a/src/main/java/org/apache/joshua/decoder/phrase/Candidate.java
+++ b/src/main/java/org/apache/joshua/decoder/phrase/Candidate.java
@@ -42,6 +42,7 @@ import org.apache.joshua.decoder.ff.FeatureFunction;
import org.apache.joshua.decoder.ff.state_maintenance.DPState;
import org.apache.joshua.decoder.ff.tm.Rule;
import org.apache.joshua.decoder.hypergraph.HGNode;
+import org.apache.joshua.decoder.hypergraph.HyperEdge;
import org.apache.joshua.decoder.segment_file.Sentence;
public class Candidate {
@@ -119,7 +120,7 @@ public class Candidate {
public String toString() {
return String.format("CANDIDATE(hyp %d/%d, phr %d/%d) [%s] phrase=[%s] span=%s",
ranks[0], hypotheses.size(), ranks[1], phrases.size(),
- getHypothesis(), getRule().getEnglishWords().replaceAll("\\[.*?\\] ",""), getSpan());
+ getHypothesis(), getPhraseNode(), getSpan());
}
public Candidate(List<FeatureFunction> featureFunctions, Sentence sentence,
@@ -131,13 +132,13 @@ public class Candidate {
this.span = span;
this.future_delta = delta;
this.ranks = ranks;
- this.rule = isMonotonic() ? Hypothesis.MONO_RULE : Hypothesis.END_RULE;
+ this.rule = isMonotonic() ? Hypothesis.MONO_RULE : Hypothesis.SWAP_RULE;
// this.score = hypotheses.get(ranks[0]).score + phrases.get(ranks[1]).getEstimatedCost();
-
+
// TODO: compute this proactively or lazily according to a parameter
- getResult();
+ computeResult();
// this.phraseNode = null;
-// this.computedResult = null;
+// this.computedResult = null;
}
/**
@@ -206,13 +207,23 @@ public class Candidate {
}
/**
+ * A candidate is a (hypothesis, target phrase) pairing. The hypothesis and target phrase are
+ * drawn from a list that is indexed by (ranks[0], ranks[1]), respectively. This is a shortcut
+ * to return the rule representing the terminal phrase production of the candidate pair.
+ *
+ * @return the phrase rule at position ranks[1]
+ */
+ public Rule getPhraseRule() {
+ return this.phrases.get(ranks[1]);
+ }
+
+ /**
* This returns a new Hypothesis (HGNode) representing the phrase being added, i.e., a terminal
* production in the hypergraph. The score and DP state are computed only here on demand.
*
* @return a new hypergraph node representing the phrase translation
*/
public HGNode getPhraseNode() {
- getResult();
return phraseNode;
}
@@ -222,10 +233,16 @@ public class Candidate {
*
* @return
*/
- public ComputeNodeResult getResult() {
+ public ComputeNodeResult computeResult() {
if (computedResult == null) {
- computedResult = new ComputeNodeResult(featureFunctions, getRule(), null, span.start, span.end, null, sentence);
- phraseNode = new HGNode(-1, span.end, rule.getLHS(), computedResult.getDPStates(), null, computedResult.getPruningEstimate());
+ // add the phrase node
+ ComputeNodeResult phraseResult = new ComputeNodeResult(featureFunctions, getPhraseRule(), null, span.start, span.end, null, sentence);
+ HyperEdge edge = new HyperEdge(getPhraseRule(), phraseResult.getViterbiCost(), phraseResult.getTransitionCost(), null, null);
+ phraseNode = new HGNode(-1, span.end, rule.getLHS(), phraseResult.getDPStates(), edge, phraseResult.getPruningEstimate());
+
+ // add the rule
+ // TODO: sourcepath
+ computedResult = new ComputeNodeResult(featureFunctions, getRule(), getTailNodes(), -1, span.end, null, sentence);
}
return computedResult;
@@ -296,6 +313,6 @@ public class Candidate {
}
public List<DPState> getStates() {
- return getResult().getDPStates();
+ return computeResult().getDPStates();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/9b73d614/src/main/java/org/apache/joshua/decoder/phrase/Hypothesis.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/phrase/Hypothesis.java b/src/main/java/org/apache/joshua/decoder/phrase/Hypothesis.java
index 904634d..132d62d 100644
--- a/src/main/java/org/apache/joshua/decoder/phrase/Hypothesis.java
+++ b/src/main/java/org/apache/joshua/decoder/phrase/Hypothesis.java
@@ -71,8 +71,8 @@ public class Hypothesis extends HGNode implements Comparable<Hypothesis> {
public Hypothesis(Candidate cand) {
// TODO: sourcepath
super(-1, cand.span.end, cand.getRule().getLHS(), cand.getStates(),
- new HyperEdge(cand.getRule(), cand.getResult().getViterbiCost(),
- cand.getResult().getTransitionCost(),
+ new HyperEdge(cand.getRule(), cand.computeResult().getViterbiCost(),
+ cand.computeResult().getTransitionCost(),
cand.getTailNodes(), null), cand.score());
this.coverage = cand.getCoverage();
}
http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/9b73d614/src/main/java/org/apache/joshua/decoder/phrase/Stack.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/decoder/phrase/Stack.java b/src/main/java/org/apache/joshua/decoder/phrase/Stack.java
index ad24a51..3b8a976 100644
--- a/src/main/java/org/apache/joshua/decoder/phrase/Stack.java
+++ b/src/main/java/org/apache/joshua/decoder/phrase/Stack.java
@@ -215,12 +215,12 @@ public class Stack extends ArrayList<Hypothesis> {
if (LOG.isDebugEnabled()) {
LOG.debug("{} from ( ... {} )", taskName, complete.getHypothesis().getRule().getEnglishWords());
- LOG.debug(" base score {}", complete.getResult().getBaseCost());
+ LOG.debug(" base score {}", complete.computeResult().getBaseCost());
LOG.debug(" covering {}-{}", complete.getSpan().start - 1, complete.getSpan().end - 2);
- LOG.debug(" translated as: {}", complete.getRule().getEnglishWords());
+ LOG.debug(" translated as: {}", complete.getPhraseRule().getEnglishWords());
LOG.debug(" score {} + future cost {} = {}",
- complete.getResult().getTransitionCost(), complete.getFutureEstimate(),
- complete.getResult().getTransitionCost() + complete.getFutureEstimate());
+ complete.computeResult().getTransitionCost(), complete.getFutureEstimate(),
+ complete.computeResult().getTransitionCost() + complete.getFutureEstimate());
}
}
}