From d70b8ff2917c027268e9bc1178b4e035164a5ca8 Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Mon, 13 Oct 2014 16:07:29 +0900 Subject: [PATCH] Fix: BoS bigram from user history dictionary is too strong. They can be always stronger than BoS predictions from the contextual dictionary. Bug: 17961731 Change-Id: I70297d82436c10c790bdfad6f3dfefdb4bb2f852 --- .../backward/v402/ver4_patricia_trie_policy.cpp | 12 +++++++++--- .../backward/v402/ver4_patricia_trie_policy.h | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp index 1c61bd4b9..0eae934ae 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp +++ b/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp @@ -186,7 +186,9 @@ int Ver4PatriciaTriePolicy::getProbabilityOfWord(const WordIdArrayView prevWordI if (bigramsIt.getBigramPos() == ptNodePos && bigramsIt.getProbability() != NOT_A_PROBABILITY) { const int bigramConditionalProbability = getBigramConditionalProbability( - prevWordPtNodeParams.getProbability(), bigramsIt.getProbability()); + prevWordPtNodeParams.getProbability(), + prevWordPtNodeParams.representsBeginningOfSentence(), + bigramsIt.getProbability()); return getProbability(ptNodeParams.getProbability(), bigramConditionalProbability); } } @@ -209,15 +211,19 @@ void Ver4PatriciaTriePolicy::iterateNgramEntries(const WordIdArrayView prevWordI while (bigramsIt.hasNext()) { bigramsIt.next(); const int bigramConditionalProbability = getBigramConditionalProbability( - prevWordPtNodeParams.getProbability(), bigramsIt.getProbability()); + prevWordPtNodeParams.getProbability(), + prevWordPtNodeParams.representsBeginningOfSentence(), bigramsIt.getProbability()); listener->onVisitEntry(bigramConditionalProbability, getWordIdFromTerminalPtNodePos(bigramsIt.getBigramPos())); } } int Ver4PatriciaTriePolicy::getBigramConditionalProbability(const int prevWordUnigramProbability, - const int bigramProbability) const { + const bool isInBeginningOfSentenceContext, const int bigramProbability) const { if (mHeaderPolicy->hasHistoricalInfoOfWords()) { + if (isInBeginningOfSentenceContext) { + return bigramProbability; + } // Calculate conditional probability. return std::min(MAX_PROBABILITY - prevWordUnigramProbability + bigramProbability, MAX_PROBABILITY); diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.h b/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.h index 4aa399c3e..1ad5e7e36 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.h +++ b/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/ver4_patricia_trie_policy.h @@ -175,7 +175,7 @@ class Ver4PatriciaTriePolicy : public DictionaryStructureWithBufferPolicy { const WordAttributes getWordAttributes(const int probability, const PtNodeParams &ptNodeParams) const; int getBigramConditionalProbability(const int prevWordUnigramProbability, - const int bigramProbability) const; + const bool isInBeginningOfSentenceContext, const int bigramProbability) const; }; } // namespace v402 } // namespace backward