Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1fdaf5a2 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by The Android Automerger
Browse files

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
parent dc5afca9
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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