diff --git a/native/src/defines.h b/native/src/defines.h
index 926120703996f2ecd7d55599412bf3c016c84042..ff195f40cc1629bf4efe59f3497b24940d474923 100644
--- a/native/src/defines.h
+++ b/native/src/defines.h
@@ -138,7 +138,8 @@ static void prof_out(void) {
 #define SUGGEST_WORDS_WITH_SPACE_PROXIMITY true
 
 // The following "rate"s are used as a multiplier before dividing by 100, so they are in percent.
-#define WORDS_WITH_MISSING_CHARACTER_DEMOTION_RATE 70
+#define WORDS_WITH_MISSING_CHARACTER_DEMOTION_RATE 90
+#define WORDS_WITH_MISSING_CHARACTER_DEMOTION_START_POS_10X 12
 #define WORDS_WITH_MISSING_SPACE_CHARACTER_DEMOTION_RATE 80
 #define WORDS_WITH_EXCESSIVE_CHARACTER_DEMOTION_RATE 75
 #define WORDS_WITH_EXCESSIVE_CHARACTER_OUT_OF_PROXIMITY_DEMOTION_RATE 75
diff --git a/native/src/unigram_dictionary.cpp b/native/src/unigram_dictionary.cpp
index c1882901480eff1fe48d22085ddb73b47417b1a0..2ae2bca92b41ce0b93b6eafa9fd58580b9bd438c 100644
--- a/native/src/unigram_dictionary.cpp
+++ b/native/src/unigram_dictionary.cpp
@@ -518,9 +518,12 @@ inline int UnigramDictionary::calculateFinalFreq(const int inputIndex, const int
     // TODO: Demote by edit distance
     int finalFreq = freq * matchWeight;
     if (skipPos >= 0) {
-        if (mInputLength >= 3) {
-            multiplyRate(WORDS_WITH_MISSING_CHARACTER_DEMOTION_RATE *
-                    (mInputLength - 2) / (mInputLength - 1), &finalFreq);
+        if (mInputLength >= 2) {
+            const int demotionRate = WORDS_WITH_MISSING_CHARACTER_DEMOTION_RATE
+                    * (10 * mInputLength - WORDS_WITH_MISSING_CHARACTER_DEMOTION_START_POS_10X)
+                    / (10 * mInputLength
+                            - WORDS_WITH_MISSING_CHARACTER_DEMOTION_START_POS_10X + 10);
+            multiplyRate(demotionRate, &finalFreq);
         } else {
             finalFreq = 0;
         }