Skip to content

[Bug]: Will not recognise "gorgeous" when swiped #162

Description

@molove

CleverKeys Version

1.5.0

Device Information

Android Phone

Android Version

Android 16

Bug Category

Neural Prediction (ONNX models, swipe typing)

Bug Description

Swiping the word "gorgeous" never produces it as a suggestion — not as the top result, not anywhere in the alternates list at any rank. The word is consistently unreachable via swipe.

Consistent wrong results observed across multiple attempts: Gothenburg, forgetting, github, goog, googlers, foothold, violoncello (results vary per attempt but "gorgeous" never appears).

"Gorgeous" is correctly present in the shipped English dictionary and works fine when typed manually. The issue is specific to swipe input.

Steps to Reproduce

  1. Open any text field with CleverKeys active
  2. Swipe the word "gorgeous" carefully, tracing g → o → r → g → e → o → u → s
  3. Observe suggestions — "gorgeous" does not appear at any position
  4. Repeat with slow, deliberate tracing and again with normal speed — result is the same

Neural Configuration (if applicable)

The following settings were tested and made no difference:
- Beam width raised to 20 (from default)
- Confidence threshold lowered to 0.01 (near-minimum)
- Short/long swipe boundary adjusted to 83%
- "Gorgeous" manually typed repeatedly to reinforce it in the dictionary

Logs

Troubleshooting Steps

  • I have restarted the CleverKeys app
  • I have tried disabling and re-enabling the keyboard
  • I have checked if this happens with neural predictions disabled
  • I have tried clearing the app cache/data (if safe to do so)

Additional Context

The following thanks to Claude Code:

After investigating the source code, the root cause appears to be in the ONNX gesture decoder rather than vocabulary filtering or dictionary coverage:

  • "Gorgeous" is present in the training vocabulary (vocab/final_vocab.txt, exports/vocab.json, scripts/dictionaries/en/en_words.txt) and is not on the blocklist
  • All competing wrong results (Gothenburg, forgetting, etc.) are also tier 0 in the vocabulary — the 0.75× rare penalty applies equally to all of them, so vocabulary filtering is not why "gorgeous" loses
  • The model is character-level (CTC/seq2seq over a-z tokens). "Gorgeous" is only reachable if the decoder produces the sequence g-o-r-g-e-o-u-s. The fact that raising beam width to 20 and lowering confidence to 0.01 makes no difference indicates the decoder is not generating this sequence at all — it is not being filtered out, it is never built
  • The gesture for "gorgeous" is self-intersecting: the swipe path visits the 'g' and 'o' keyboard regions twice each, which appears to be a failure mode for the v1 gesture encoder
  • The recurring appearance of words starting with 'f' (forgetting, foothold) suggests the model is consistently misreading the gesture start point as 'f' rather than 'g' (adjacent keys on QWERTY)

Hypothesis: "Gorgeous" and other words with self-intersecting swipe paths (where the gesture doubles back through the same keyboard region) are underrepresented in the training data, resulting in the encoder having no reliable mapping for this gesture shape.

Suggested fix: Audit the training/synthetic gesture generation pipeline for coverage of self-intersecting words and add augmented trajectory examples for this class of words before retraining.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions