Download tools/mosesdecoder/moses/FF/LexicalReordering/LRState.cpp from Quagmire1/wiki-cased: direct link, hf CLI and curl.
- Browser
- Download file 2.86 kB
-
https://huggingface.co/Quagmire1/wiki-cased/resolve/main/tools/mosesdecoder/moses/FF/LexicalReordering/LRState.cpp
- Command line
-
hf download hf://Quagmire1/wiki-cased/tools/mosesdecoder/moses/FF/LexicalReordering/LRState.cpp
-
curl -L -o LRState.cpp https://huggingface.co/Quagmire1/wiki-cased/resolve/main/tools/mosesdecoder/moses/FF/LexicalReordering/LRState.cpp
2.86 kB
| // -*- c++ -*- | |
| namespace Moses | |
| { | |
| void | |
| LRState:: | |
| CopyScores(ScoreComponentCollection* accum, | |
| const TranslationOption &topt, | |
| const InputType& input, | |
| ReorderingType reoType) const | |
| { | |
| // don't call this on a bidirectional object | |
| UTIL_THROW_IF2(m_direction != LRModel::Backward && | |
| m_direction != LRModel::Forward, | |
| "Unknown direction: " << m_direction); | |
| TranslationOption const* relevantOpt = ((m_direction == LRModel::Backward) | |
| ? &topt : m_prevOption); | |
| LexicalReordering* producer = m_configuration.GetScoreProducer(); | |
| Scores const* cached = relevantOpt->GetLexReorderingScores(producer); | |
| // The approach here is bizarre! Why create a whole vector and do | |
| // vector addition (acumm->PlusEquals) to update a single value? - UG | |
| size_t off_remote = m_offset + reoType; | |
| size_t off_local = m_configuration.CollapseScores() ? m_offset : off_remote; | |
| UTIL_THROW_IF2(off_local >= producer->GetNumScoreComponents(), | |
| "offset out of vector bounds!"); | |
| // look up applicable score from vectore of scores | |
| if(cached) { | |
| UTIL_THROW_IF2(off_remote >= cached->size(), "offset out of vector bounds!"); | |
| Scores scores(producer->GetNumScoreComponents(),0); | |
| scores[off_local ] = (*cached)[off_remote]; | |
| accum->PlusEquals(producer, scores); | |
| } | |
| // else: use default scores (if specified) | |
| else if (producer->GetHaveDefaultScores()) { | |
| Scores scores(producer->GetNumScoreComponents(),0); | |
| scores[off_local] = producer->GetDefaultScore(off_remote); | |
| accum->PlusEquals(m_configuration.GetScoreProducer(), scores); | |
| } | |
| // note: if no default score, no cost | |
| const SparseReordering* sparse = m_configuration.GetSparseReordering(); | |
| if (sparse) sparse->CopyScores(*relevantOpt, m_prevOption, input, reoType, | |
| m_direction, accum); | |
| } | |
| int | |
| LRState:: | |
| ComparePrevScores(const TranslationOption *other) const | |
| { | |
| LexicalReordering* producer = m_configuration.GetScoreProducer(); | |
| const Scores* myScores = m_prevOption->GetLexReorderingScores(producer); | |
| const Scores* yrScores = other->GetLexReorderingScores(producer); | |
| if(myScores == yrScores) return 0; | |
| // The pointers are NULL if a phrase pair isn't found in the reordering table. | |
| if(yrScores == NULL) return -1; | |
| if(myScores == NULL) return 1; | |
| size_t stop = m_offset + m_configuration.GetNumberOfTypes(); | |
| for(size_t i = m_offset; i < stop; i++) { | |
| if((*myScores)[i] < (*yrScores)[i]) return -1; | |
| if((*myScores)[i] > (*yrScores)[i]) return 1; | |
| } | |
| return 0; | |
| } | |
| } | |