☰
为什么越用越准?Xime 用户词典与 N-gram 融合预测的实现细节
2026/10/14 17:37:15 网站建设 项目流程

【免费下载链接】Xime

我的自用安卓输入法,基于Rime 构建,部分功能由本人设计的本地AI模型驱动,支持五笔/拼音/自定义方案。

项目地址:https://gitcode.com/gh_mirrors/xi/Xime
点击查看免费下载

Xime 是一款基于 Rime 构建的安卓输入法,它的"越用越准"并非营销话术,而是两条记忆机制共同作用的结果:Rime 用户词典在打字时自动积累词频,N-gram 融合预测则把你最近的输入习惯叠加到本地 AI 联想模型之上。本文带你快速看懂这套智能预测系统的工作原理。

一、Xime 输入法如何让键盘"记住你"

Xime 的候选栏里,除了拼音/五笔打出来的词,还有"没打出来却恰好是你想说的"联想词。这部分能力来自两套互相配合的数据:

记忆层存什么数据来源
Rime 用户词典(.userdb)每个词的使用频率每次上屏自动累计
N-gram 用户缓存词与词的搭配关系(bigram / trigram)每次提交输入自动统计

前者解决"这个词我要得多",后者解决"这个词后面我常接什么"。两者共同喂给融合算法,再和本地 ONNX 联想模型的结果加权合并。

二、Rime 用户词典:打字时自动积累词频

Rime 引擎为每本词典生成一个.userdb(leveldb 数据库),你每选中一个词,它对应的频率就加一。下次同音词竞争时,高频词自动排到前面——这就是"越用越准"最基础的部分。

Xime 在 UserDictIoManager.kt 中对这一机制做了完整封装:

  • 读取:librime 没有"读词条"的 C 接口,Xime 通过 JNI 用内部 DbSource 遍历,转成文本码表格式(词<TAB>码<TAB>频率);
  • 导出/导入/增删:共用引擎自带的同一条通道,生成的.txt码表与电脑端 Rime 完全互通;
  • 自造词:还支持通过 PersonalDictManager.kt 维护custom_phrase自定义词库,支持按方案隔离词库文件。

备份时 Xime 还会先触发一次引擎 sync,把 userdb 导出为*.userdb.txt文本快照再上传,避免 leveldb 文件级覆盖的一致性风险(见 BackupManager.kt)。

三、N-gram 用户缓存:统计你的"搭配习惯"

词频只回答"哪个词常用",而"常用搭配"由 N-gram 缓存负责。核心逻辑在 UserNgramCache.kt:

  1. 分词:把提交的文本按字符切分(保留字母数字与中文标点);
  2. 滑窗统计:windowed(2)抽取二元组(bigram),windowed(3)抽取三元组(trigram),分别插入两棵前缀树;
  3. 持久化:全部统计落盘到user_ngram_cache.json,应用重启后无缝恢复。

频率计算是经典的条件概率:在 NgramTrie.kt 中,frequency = count / prefixCount,即"看到前缀 X 之后,接上 Y 的概率"。比如你常写"你好 世界",那么输入"你好"后,"世界"的 bigram 得分会显著高于其他词。

缓存有明确上限(历史上限 100 条、总量 1000 条级别),保证内存与 IO 开销可控,不会随着使用无限膨胀。

四、融合算法:模型分与用户分如何加权

真正让预测"贴脸"的是融合环节。AssociationManager.kt 的predict流程是:本地 ONNX 联想模型先产出候选 → NgramFusionEngine.kt 与用户 N-gram 统计融合重排。

权重设计很讲究:

  • 默认:模型分占 λ=0.7,用户分占 0.3——模型见多识广,做主;
  • 用户命中:如果候选词同时出现在你的 N-gram 缓存里,λ 降到 0.3,即你的习惯占 70%。这就是"你常打的词会顶到最前"的直接原因;
  • 用户独有词:模型没见过、但你反复搭配过的词,会直接以用户分插入结果,不会被模型候选淹没;
  • 分数归一化:normalizeModelScore把模型原始分(正分除以 100、负分走 exp 衰减)压到 0~1,与 N-gram 概率同量纲比较。

五、工程细节:为什么联想既不卡也不闪

  • 独立推理进程:ONNX 模型(model_int8_dynamic.onnx,int8 量化)运行在:inference进程中,通过 IPC 调用(OnnxAssociationEngine.kt),模型加载慢、进程被系统回收都不会卡住键盘 UI;
  • 预热:初始化后立刻发一次轻量预测"热身",避免第一下点击联想时的冷启动延迟;
  • 防闪动代际号:PredictionManager.kt 为每次预测打 epoch 标记,退格/清空后旧结果直接丢弃,候选栏不会"一闪一闪";
  • 上下文窗口:只保留最近 25 个上屏字符做上下文,每次最多返回 20 个联想词,兼顾准确性与速度。

六、如何开启与管理智能预测

  1. 开启开关:在设置中找到"智能预测/智能联想"入口(SmartPredictionSettingsScreen.kt),打开开关并选择联想模型规格(支持 small/base 多版本切换);
  2. 管理词库:在设置中可查看、导出、导入各.userdb用户词典,换机后导入即可还原"肌肉记忆";
  3. 自定义词:通过 custom_phrase.txt 相关功能补充生僻词与专业术语。

💡 使用建议:新装 Xime 的前一两天是"冷启动期",多打几段真实内容,bigram/trigram 统计和 userdb 词频积累起来后,联想命中率会有明显体感提升——这正是"越用越准"的完整闭环。

Xime 的这套组合(Rime 用户词典 + 本地 N-gram 统计 + 本地 AI 模型融合)全部在设备端完成,不上传任何输入内容,既是准确率的来源,也是隐私的底线。更多功能介绍可参考 README.zh-CN.md。

【免费下载链接】Xime

我的自用安卓输入法,基于Rime 构建,部分功能由本人设计的本地AI模型驱动,支持五笔/拼音/自定义方案。

项目地址:https://gitcode.com/gh_mirrors/xi/Xime
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询