Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHieu Hoang <hieu@hoang.co.uk>2013-07-04 18:13:29 +0400
committerHieu Hoang <hieu@hoang.co.uk>2013-07-04 18:13:29 +0400
commitf0dc30f25ab318535e92f2b7520a9ed2f0c6da77 (patch)
tree5fba8bb932bfa2f52ba56ef67921dc4c74eb9f9c
parent934e24718e5feb1349609e5d429cb4b1acdd6823 (diff)
prefix subphrase optimization done for in-memory pt. Need to delete objects also
-rw-r--r--moses/TranslationModel/PhraseDictionaryMemory.cpp13
-rw-r--r--moses/Word.cpp10
-rw-r--r--moses/Word.h3
3 files changed, 18 insertions, 8 deletions
diff --git a/moses/TranslationModel/PhraseDictionaryMemory.cpp b/moses/TranslationModel/PhraseDictionaryMemory.cpp
index 000361cff..2091847e1 100644
--- a/moses/TranslationModel/PhraseDictionaryMemory.cpp
+++ b/moses/TranslationModel/PhraseDictionaryMemory.cpp
@@ -138,19 +138,14 @@ void PhraseDictionaryMemory::SetTargetPhraseFromPtMatrix(const std::vector<Input
{
// UTIL_THROW(util::Exception, "SetTargetPhraseFromPtMatrix() not implemented");
for (size_t i = 0; i < phraseDictionaryQueue.size(); ++i) {
- bool doIt = true;
InputLatticeNode &node = *phraseDictionaryQueue[i];
const Phrase &phrase = node.GetPhrase();
const InputLatticeNode *prevNode = node.GetPrevNode();
- const PhraseDictionaryNodeMemory *prevPtNode;
+ const PhraseDictionaryNodeMemory *prevPtNode = NULL;
if (prevNode) {
prevPtNode = static_cast<const PhraseDictionaryNodeMemory*>(prevNode->GetPtNode(*this));
-
- if (prevPtNode == NULL) {
- doIt = false;
- }
}
else {
// Starting subphrase.
@@ -158,8 +153,10 @@ void PhraseDictionaryMemory::SetTargetPhraseFromPtMatrix(const std::vector<Input
prevPtNode = &GetRootNode();
}
- if (doIt) {
- const Word &lastWord = phrase.GetWord(phrase.GetSize() - 1);
+ if (prevPtNode) {
+ Word lastWord = phrase.GetWord(phrase.GetSize() - 1);
+ lastWord.OnlyTheseFactors(m_inputFactors);
+
const PhraseDictionaryNodeMemory *ptNode = prevPtNode->GetChild(lastWord);
if (ptNode) {
const TargetPhraseCollection *targetPhrases = ptNode->GetTargetPhraseCollection();
diff --git a/moses/Word.cpp b/moses/Word.cpp
index 41e5fae03..f53e8a2c7 100644
--- a/moses/Word.cpp
+++ b/moses/Word.cpp
@@ -24,6 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#include "memory.h"
#include "Word.h"
#include "TypeDef.h"
+#include "FactorTypeSet.h"
#include "StaticData.h" // needed to determine the FactorDelimiter
#include "util/exception.hh"
#include "util/tokenize_piece.hh"
@@ -127,6 +128,15 @@ void Word::CreateUnknownWord(const Word &sourceWord)
m_isNonTerminal = sourceWord.IsNonTerminal();
}
+void Word::OnlyTheseFactors(const FactorMask &factors)
+{
+ for (unsigned int currFactor = 0 ; currFactor < MAX_NUM_FACTORS ; currFactor++) {
+ if (!factors[currFactor]) {
+ SetFactor(currFactor, NULL);
+ }
+ }
+}
+
TO_STRING_BODY(Word);
// friend
diff --git a/moses/Word.h b/moses/Word.h
index efce4e187..6a91f1a76 100644
--- a/moses/Word.h
+++ b/moses/Word.h
@@ -38,6 +38,7 @@ namespace Moses
{
class Phrase;
+class FactorMask;
/** Represent a word (terminal or non-term)
* Wrapper around hold a set of factors for a single word
@@ -150,6 +151,8 @@ public:
void CreateUnknownWord(const Word &sourceWord);
+ void OnlyTheseFactors(const FactorMask &factors);
+
inline size_t hash() const {
return util::MurmurHashNative(m_factorArray, MAX_NUM_FACTORS*sizeof(Factor*), m_isNonTerminal);
}