| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #ifndef moses_BitmapContainer_h |
| | #define moses_BitmapContainer_h |
| |
|
| | #include <queue> |
| | #include <set> |
| | #include <vector> |
| |
|
| | #include "Hypothesis.h" |
| | #include "HypothesisStackCubePruning.h" |
| | #include "SquareMatrix.h" |
| | #include "TranslationOption.h" |
| | #include "TypeDef.h" |
| | #include "Bitmap.h" |
| |
|
| | #include <boost/unordered_set.hpp> |
| |
|
| | namespace Moses |
| | { |
| |
|
| | class BitmapContainer; |
| | class BackwardsEdge; |
| | class Hypothesis; |
| | class HypothesisStackCubePruning; |
| | class HypothesisQueueItem; |
| | class QueueItemOrderer; |
| | class TranslationOptionList; |
| |
|
| | typedef std::vector< Hypothesis* > HypothesisSet; |
| | typedef std::set< BackwardsEdge* > BackwardsEdgeSet; |
| | typedef std::priority_queue< HypothesisQueueItem*, std::vector< HypothesisQueueItem* >, QueueItemOrderer> HypothesisQueue; |
| |
|
| | |
| | |
| | |
| |
|
| | |
| | class HypothesisQueueItem |
| | { |
| | private: |
| | size_t m_hypothesis_pos, m_translation_pos; |
| | Hypothesis *m_hypothesis; |
| | BackwardsEdge *m_edge; |
| | boost::shared_ptr<TargetPhrase> m_target_phrase; |
| |
|
| | HypothesisQueueItem(); |
| |
|
| | public: |
| | HypothesisQueueItem(const size_t hypothesis_pos |
| | , const size_t translation_pos |
| | , Hypothesis *hypothesis |
| | , BackwardsEdge *edge |
| | , const TargetPhrase *target_phrase = NULL) |
| | : m_hypothesis_pos(hypothesis_pos) |
| | , m_translation_pos(translation_pos) |
| | , m_hypothesis(hypothesis) |
| | , m_edge(edge) { |
| | if (target_phrase != NULL) { |
| | m_target_phrase.reset(new TargetPhrase(*target_phrase)); |
| | } |
| | } |
| |
|
| | ~HypothesisQueueItem() { |
| | } |
| |
|
| | int GetHypothesisPos() { |
| | return m_hypothesis_pos; |
| | } |
| |
|
| | int GetTranslationPos() { |
| | return m_translation_pos; |
| | } |
| |
|
| | Hypothesis *GetHypothesis() { |
| | return m_hypothesis; |
| | } |
| |
|
| | BackwardsEdge *GetBackwardsEdge() { |
| | return m_edge; |
| | } |
| |
|
| | boost::shared_ptr<TargetPhrase> GetTargetPhrase() { |
| | return m_target_phrase; |
| | } |
| | }; |
| |
|
| | |
| | class QueueItemOrderer |
| | { |
| | public: |
| | bool operator()(HypothesisQueueItem* itemA, HypothesisQueueItem* itemB) const { |
| | float scoreA = itemA->GetHypothesis()->GetFutureScore(); |
| | float scoreB = itemB->GetHypothesis()->GetFutureScore(); |
| |
|
| | if (scoreA < scoreB) { |
| | return true; |
| | } else if (scoreA > scoreB) { |
| | return false; |
| | } else { |
| | |
| | |
| | |
| | |
| | |
| | |
| | boost::shared_ptr<TargetPhrase> phrA = itemA->GetTargetPhrase(); |
| | boost::shared_ptr<TargetPhrase> phrB = itemB->GetTargetPhrase(); |
| | if (!phrA || !phrB) { |
| | |
| | return false; |
| | } |
| | return (phrA->Compare(*phrB) > 0); |
| | } |
| | } |
| | }; |
| |
|
| | |
| | |
| | |
| | |
| | |
| |
|
| | class HypothesisScoreOrderer |
| | { |
| | private: |
| | bool m_deterministic; |
| |
|
| | public: |
| | HypothesisScoreOrderer(const bool deterministic = false) |
| | : m_deterministic(deterministic) {} |
| |
|
| | bool operator()(const Hypothesis* hypoA, const Hypothesis* hypoB) const { |
| |
|
| | float scoreA = hypoA->GetFutureScore(); |
| | float scoreB = hypoB->GetFutureScore(); |
| |
|
| | if (scoreA > scoreB) { |
| | return true; |
| | } else if (scoreA < scoreB) { |
| | return false; |
| | } else { |
| | if (m_deterministic) { |
| | |
| | return (hypoA->GetCurrTargetPhrase().Compare(hypoB->GetCurrTargetPhrase()) < 0); |
| | } |
| | |
| | return false; |
| | } |
| | } |
| | }; |
| |
|
| | |
| | |
| | |
| | |
| | |
| |
|
| | class BackwardsEdge |
| | { |
| | private: |
| | friend class BitmapContainer; |
| | bool m_initialized; |
| |
|
| | const BitmapContainer &m_prevBitmapContainer; |
| | BitmapContainer &m_parent; |
| | const TranslationOptionList &m_translations; |
| | const SquareMatrix &m_estimatedScores; |
| | float m_estimatedScore; |
| |
|
| | bool m_deterministic; |
| |
|
| | std::vector< const Hypothesis* > m_hypotheses; |
| | boost::unordered_set< int > m_seenPosition; |
| |
|
| | |
| | BackwardsEdge(); |
| |
|
| | Hypothesis *CreateHypothesis(const Hypothesis &hypothesis, const TranslationOption &transOpt); |
| | bool SeenPosition(const size_t x, const size_t y); |
| | void SetSeenPosition(const size_t x, const size_t y); |
| |
|
| | protected: |
| | void Initialize(); |
| |
|
| | public: |
| | BackwardsEdge(const BitmapContainer &prevBitmapContainer |
| | , BitmapContainer &parent |
| | , const TranslationOptionList &translations |
| | , const SquareMatrix &estimatedScores |
| | , const InputType& source |
| | , const bool deterministic = false); |
| | ~BackwardsEdge(); |
| |
|
| | bool GetInitialized(); |
| | const BitmapContainer &GetBitmapContainer() const; |
| | int GetDistortionPenalty(); |
| | void PushSuccessors(const size_t x, const size_t y); |
| | }; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | class BitmapContainer |
| | { |
| | private: |
| | const Bitmap &m_bitmap; |
| | HypothesisStackCubePruning &m_stack; |
| | HypothesisSet m_hypotheses; |
| | BackwardsEdgeSet m_edges; |
| | HypothesisQueue m_queue; |
| | size_t m_numStackInsertions; |
| | bool m_deterministic; |
| |
|
| | |
| | BitmapContainer(); |
| | BitmapContainer(const BitmapContainer &); |
| | public: |
| | BitmapContainer(const Bitmap &bitmap |
| | , HypothesisStackCubePruning &stack |
| | , bool deterministic = false); |
| |
|
| | |
| | |
| | ~BitmapContainer(); |
| |
|
| | void Enqueue(int hypothesis_pos, int translation_pos, Hypothesis *hypothesis, BackwardsEdge *edge); |
| | HypothesisQueueItem *Dequeue(bool keepValue=false); |
| | HypothesisQueueItem *Top() const; |
| | size_t Size(); |
| | bool Empty() const; |
| |
|
| | const Bitmap &GetWordsBitmap() const { |
| | return m_bitmap; |
| | } |
| |
|
| | const HypothesisSet &GetHypotheses() const; |
| | size_t GetHypothesesSize() const; |
| | const BackwardsEdgeSet &GetBackwardsEdges(); |
| |
|
| | void InitializeEdges(); |
| | void ProcessBestHypothesis(); |
| | void EnsureMinStackHyps(const size_t minNumHyps); |
| | void AddHypothesis(Hypothesis *hypothesis); |
| | void AddBackwardsEdge(BackwardsEdge *edge); |
| | void SortHypotheses(); |
| | }; |
| |
|
| | } |
| |
|
| | #endif |
| |
|