Skip to content

权重系统

清风输入法用 权重 (weight) 决定候选词在候选区中的排序位置。每个候选词背后都有一个数值, 数值越高越靠前。本专题集中说明权重的取值范围、来源、归一化方式, 以及在拼音 / 码表 / 混输三种模式下的相互关系。

范围与含义

权重统一使用 0 ~ 10000 的整数:

档位weight行为
必置顶8000 ~ 10000几乎所有候选之前 (个人签名、公司名、固定快捷命令等)
高频备选4000 ~ 7000排在多数常用字之前
中位 (默认)1000与中频候选自然混排
罕用200 ~ 500排在多数自然候选之后
禁用级0几乎只在精确编码且无竞争时出现

默认值

新建短语 / 用户词条时, 默认 weight = 1000, 与中频候选混排。如果希望强制置顶, 调到 8000 以上; 希望"只在精确编码下偶尔出现", 调到 500 以下。

显式 0 的特殊语义

weight: 0 跟"未填" (留空) 不一样:

yaml 写法实际权重含义
(未写 weight 字段)1000默认中位, 与中频候选混排
weight: 00显式禁用排序权重 (落到候选区最末)
weight: 10001000与默认值等价, 可以显式写出

显式 0 适合"必须收录但不希望干扰排序"的条目, 例如某些只在精确编码 + 无其它候选时才需要的备用项。

自动调频上限

用户词库的"用得越多排得越前"机制 (自动调频) 通过权重增量实现, 上限为 2000 —— 即使一条词被反复选中, 调频加成也不会让它超出这个值。这避免单个词把权重涨到 10000 级别压制其它候选。

手动设置的 weight 不受这个上限影响; 你写多少就是多少 (clamp 到 10000)。

权重的来源

不同层的候选词权重来自不同地方:

权重来源
系统码表 / 系统词库词库内置词频 → 归一化映射到 0 ~ 10000
拼音引擎语言模型概率 → 归一化映射到 0 ~ 10000
用户词库用户编辑时设置, 默认 1000, 编辑器允许手动调整
快捷短语用户编辑时设置, 默认 1000
自动造词按使用次数动态调整 (详见自动造词专题)

所有权重都落在同一个 0 ~ 10000 区间, 这样不同层之间可以直接对比、混排。

混输模式下的层级关系

清风输入法支持三种模式, 权重的"绝对值"在不同模式下的含义略有不同:

模式比较关系
纯拼音短语 / 用户词 / 系统词 weight 与拼音候选直接比较
纯码表短语 / 用户词 / 码表候选直接比较
混输 (码表 + 拼音)码表层 (含短语 + 用户词库 + 系统码表) 整体 +10M boost, 全部压在拼音字之前

混输模式下的 +10M boost 是一种"层间隔离"机制 —— 它让用户输入码表编码时, 即便恰好与拼音冲突, 码表答案也能稳定靠前; 而拼音字仍可在码表无解时填补候选。

TIP

混输 boost 是层级机制, 不是用户能直接编辑的字段。用户调整的 weight 始终是 0 ~ 10000 那个值, 混输 boost 在排序阶段自动加上, 不会污染存储。

编辑入口

短语 / 用户词条

设置 → 词库 → 短语 (或某方案的用户词库) → 添加 / 编辑 对话框中, 权重 字段可以填 0 ~ 10000。

自动造词

设置 → 词库 → 方案 → 自动造词配置, 详见自动造词专题 (开发中)。

系统码表

只读, 不能在 UI 中调整。如要替换, 通过自定义码表方案实现。

调权建议

你的需求建议 weight
个人签名、邮箱地址等 "永远第一"9000 ~ 10000
个人常用短语 (公司名、地址等)4000 ~ 7000
命令直通车 - 希望明显置顶8000 ~ 10000
命令直通车 - 默认 (允许与字混排)1000
命令直通车 - 不打扰自然候选200 ~ 500
临时记录、希望偶尔出现的短语200 ~ 500

同 weight 的二级排序 (position)

短语 / 用户词条还有一个 position 字段, 它直接参与跨编码比较, 仅在同编码同 weight 的候选之间做二级排序 (tie-break):

position含义
0 (默认 / 未手动调整)落在所有 position > 0 的条目之后
1, 2, 3, ...越小越靠前 (升序)

TIP

设置 → 词库 中的"上移 / 下移 / 置顶"操作改的就是 position。这意味着你可以保留多个条目的 weight 都为 1000, 仅用 UI 上的箭头按钮调整组内顺序, 不需要逐个改 weight。

position 值不再被自动换算为 weight (历史版本曾有 10000 - position 的换算, 已废弃 — 那是导致旧 yaml 中 position: 1 被放大为 weight=9999 的根因)。

设计中的注意事项

短语层与码表层是分开的 tier

短语候选 (含 cmdbar 命令、字符组、模板短语) 都带有 IsPhrase 内部标记。智能过滤 (码表方案的 "生僻字过滤") 路径下:

  • 短语永远保留, 不会被当作"无常用字编码"的生僻字过滤掉
  • 短语也不计入"同编码下是否有常用字"的判定, 避免短语单独存在时让真正的码表生僻字被错误保留

这种隔离让用户配置短语 (例如 dz = 我的地址) 不会副作用地改变同编码的码表过滤行为。

字符组成员共享 group weight

$AA("标点", "、。·...") 中所有字符候选共享 group 自身的 weight; 同 group 内字符的相对顺序由 chars 数组顺序决定 (NaturalOrder 0/1/2...), 与 weight 无关。

拼音引擎的权重重算

拼音引擎对每个候选会做 rimeScore 重算 (按语言模型概率 / 字数 / 覆盖率综合打分), 最终 weight 可能远超原始词库 weight。这是引擎内部行为, 不影响你在短语 / 用户词库里设置的 weight 数值 —— 但意味着拼音方案下"weight=1000 的短语"和"系统拼音词"实际比较时, 拼音词可能拿到几百万级 weight, 不要据此推断 weight 数值的绝对优先级。

要让短语在拼音方案下稳定置顶, 推荐 weight ≥ 8000, 并配合查询路径 (例如 cobd 这种 4 字母编码本身在拼音里很难撞到自然词)。

混输 boost 不是用户字段

如前所述, 混输模式的 +10M boost 是引擎在排序阶段自动加的, 写入存储。用户在设置里看到的 weight 永远是 0~10000 那个值。

相关参考

Released under the MIT License.