---
title: shunshou-zhizi-30m
canonical_url: "https://www.modelscope.cn/models/DabbleCove/shunshou-zhizi-30m"
md_url: "https://www.modelscope.cn/models/DabbleCove/shunshou-zhizi-30m.md"
repository: DabbleCove/shunshou-zhizi-30m
chinese_name: shunshou-zhizi-30m
last_updated: 2026-10-18
license: cc-by-sa-4.0
pipeline_tag: text-generation
tasks:
  - text-generation
library_name:
  - onnx
language:
  - zh
  - en
downloads: 0
stars: 1
tags:
  - input-method
  - pinyin
  - reranking
  - character-level
  - on-device
  - coreml
  - onnx
---

# shunshou-zhizi-30m

> shunshou-zhizi-30m - DabbleCove 在 ModelScope 开源的模型。顺手·知字（30M 参数）：面向中文输入法候选排序的小型上下文模型，纯本地推理。提供 ONNX 与 Core ML 两种格式。协议 CC BY-SA 4.0。HuggingFace 同名仓库：DabbleCove/shunshou-zhizi-30m

DabbleCove/shunshou-zhizi-30m 是 ModelScope 魔搭社区上的text-generation模型，采用 cc-by-sa-4.0 许可。

- **Repository**: DabbleCove/shunshou-zhizi-30m
- **License**: cc-by-sa-4.0
- **Tasks**: text-generation
- **Tags**: input-method, pinyin, reranking, character-level, on-device, coreml, onnx
- **Downloads**: 0
- **Stars**: 1
- **Last updated**: 2026-10-18

Source: https://www.modelscope.cn/models/DabbleCove/shunshou-zhizi-30m

---

# 顺手·知字 · Shunshou-Zhizi (30M)

> 对应发布版「S」（A、B 两个权重取平均），训练数据只用许可明确的来源；与知字输入法 0.1.1 起内置的模型是同一个。

**镜像 / Mirrors：** [HuggingFace](https://huggingface.co/DabbleCove/shunshou-zhizi-30m) · [ModelScope 魔搭](https://modelscope.cn/models/DabbleCove/shunshou-zhizi-30m)（内容相同 / identical files）

**English summary.** A 29M-parameter character-level causal language model (8 layers, 512 dims, vocabulary of 7,745 Han characters) that **re-ranks candidates of a Chinese pinyin input method**: given the text before the caret and one candidate, it returns the candidate's per-character log-probabilities. It does not take pinyin as input and does not generate text for users. About 3 ms per ranking on the Apple Neural Engine (Core ML, fp16) and an ONNX build for Windows and other platforms. Trained on Chinese Wikipedia (CC BY-SA 4.0), the UN parallel corpus (Chinese side), asap (Apache-2.0), Tatoeba (CC BY 2.0 FR), 19.8M characters of synthetic colloquial text generated **only with the DeepSeek API**, and about 8,100 cleaned homophone choices of the model's author (see "Training data and privacy"). Weights are released under CC BY-SA 4.0.

## 用途与不适用
3000 万参数的字符级因果语言模型，给中文拼音输入法的**候选排序**用：输入「光标前的文字 + 一个候选」，输出这个候选每个字的对数概率；输入法把整句概率加到词频与规则上，挑出更像人话的那一个。
- **它做的事**：你用输入法打字时，在输入法给出的候选里，判断哪个放在你刚打的那段话后面更通顺，据此调整候选的先后顺序（包括把整句拼出来的候选放到最前）。它是输入法里的一个「评分器」。
- **它不做的事**：它不是聊天或写作模型，不会回答问题、续写、翻译，也不会替你生成任何文字（自由采样出来的文字不通顺，见下）；它也**不接收拼音**，拼音转汉字是输入法的词库和解码器做的，模型只在候选已经产生之后给它们打分。
- 不适合直接拿去做通用对话、写作、翻译或任何需要理解拼音本身的任务；繁体、生僻字场景（字表 7,745 字，覆盖训练语料 99.98%）也不适用。

## 怎么用
- 输入：`tokens Int32[8,40]`（最多 8 个候选并行；每行 = `<bos>` + 至多 32 字前文 + 候选，右侧补 0）；`pad=0, bos=1, unk=2`，字表见 `itos.json`。
- 输出：`logprobs Float16[8,39]`，每个位置预测下一个字的对数概率；候选得分 = 候选各字对数概率之和。
- **排的是哪些候选**：输入法每一页（5 个）候选，在那一页里对「能覆盖你全部输入的候选」和「同音同长度的候选组」重新打分排序；翻到下一页，新的一页也会各自排一次。所以它管的是整页候选的先后，不只是第一个；另外，当整句拼出来的候选明显更好时，它会被放到第一位，次好的放到页尾。
- 我们在产品里的用法：在**同长度、同读音**的候选组内，取 `得分 − 2 × 该候选在输入法原顺序里的名次`（blend β=2）最高者；不跨读音、不跨长度，所以它不会把你打的字母换成别的读音。
- 速度（Apple M4 Pro，Core ML fp16，CPU + 神经网络引擎）：一次排序约 3.0 ms（p95 3.2 ms）；与 PyTorch 首选一致率 99.88%（该测量用同架构的早期模型做的，本版导出时另做了自检：Core ML 与参考一致 360/360、真实记录 99.98%）。

## 训练数据与隐私
架构：8 层、8 头、512 维、GPT-2 式块，学习位置、权重共享，上下文 128。

| 数据 | 字数 | 许可 / 来源 |
|---|---|---|
| 中文维基百科 | 2.11 亿 | CC BY-SA 4.0 |
| 联合国平行语料（中文侧） | 5,738 万 | 联合国：使用须注明来源（见下）；条款未写其他限制 |
| asap（口语） | 1,479 万 | Apache-2.0 |
| Tatoeba（日常句） | 61 万 | CC BY 2.0 FR |
| 合成口语 / 工作聊天 / 中英混排 | 1,976 万 | **只用 DeepSeek API 生成**（其用户协议 4.2(3) 明确允许用输出训练其他模型）；**含 AI 生成文本** |

- 预训练 28,000 步（batch 256、lr 1.5e-3），语料混合比 维基 0.3 / 联合国 0.1 / asap 0.2 / Tatoeba 0.05 / 合成 0.35。
- 同音微调 8,000 步，约 185 万道题，题目取自输入法自带词库的同音组，只比较同读音同长度的候选。训练在租用的 RTX 4090（48G）上：预训练约 33 分钟，两个微调各约 23 分钟。
- **两个微调版本取平均**：A 的题库里加入了作者本人的输入选择，B 不含；发布的 S = (A + B) / 2。
- **作者本人的数据**：作者自己的约 8,140 条同音选择（每条是光标前最多 32 个字加最终上屏的字，其中作者特意选了非首选的 696 条重复训练更多遍）。入选前做了：只取上屏后没有重打、没有删除、没有放弃的记录；含邮箱、网址、手机号、8 位以上数字串、20 位以上 token 样字符串、文件路径、密钥前缀的行整条丢弃；与评测集相同的事件丢弃；最后几天的记录完全不用于训练。**不含任何其他人的输入记录**（朋友的测试日志没有使用，也不会在未征得他们同意前使用），不含 LCCC 等仅限科研的语料。
- **记忆抽取检查（2026-10-17）**：S / A 与 B（同样微调但没有作者数据）、预训练模型对比。
  - 抽取：拿训练上下文的前 8 个字让模型续写，续写里复现 **≥6 个连续原文字符**的次数：S、A、B、预训练模型均为 0 / 1,080（训练上下文）与 0 / 118（留出上下文）。
  - 自由采样：不给任何提示，从 S 采样 20,000 条文本（温度 1.0 与 0.7），其中「出现在作者上下文里、却不在任何公开训练文本里」的 8 字串只有 1 个（「现在到底什么情况」，一句很普通的话）；B 与预训练模型为 0。采样里的「疑似邮箱、网址、电话」命中只是乱码数字和 `www` 片段，没有真实联系方式。
  - 成员推断（有一点痕迹，如实写明）：S 对训练过的行给正确候选的对数概率比 B 平均高 0.73，对从未训练过的最后几天的行只高 0.17；用这个差值区分「训练过 / 没训练过」的 AUC 为 0.62（0.5 = 无法区分）。就是说，**有人拿着作者的原话，可以略高于随机地猜出它大概率在训练里；但无法从模型里把这些话抽出来**。S 的痕迹比 A（AUC 0.63）略小，因为与没见过作者数据的 B 取了平均。

## 评测
1. **同音选择准确率**（作者最后三天的留出记录，3,976 条，从未参与训练，blend β=2）：S 91.32%。
2. **接进输入法整体：开关模型对比**（输入法 0.1.3 自带的词库与核心，同一份作者词库快照，只开关模型；首选命中 / 前五命中。「无模型」同时关掉模型参与的整句拼接，所以差距包含候选排序和整句拼接两部分）：

| 评测集 | 条数 | 无模型 | 有模型（S） |
|---|---|---|---|
| 作者本人真实输入（含重打的 213 条） | 2,972 | 82.1% / 89.5% | 87.2% / 93.4% |
| 外部集（全简拼、混拼、错拼、短句等，合成） | 1,520 | 44.7% / 57.6% | 64.0% / 72.1% |
| 日常口语标尺 A（12 个话题，合成，留出） | 1,592 | 78.2% / 83.9% | 78.5% / 88.6% |

   标尺 A 里的短语多半词库里本来就有，所以模型在首选上只多 0.3 个点，但前五命中多 4.7 个点（把对的候选从后面提到前面）；作者集与外部集里有大量同音取舍、简拼和整句，模型的作用大得多。

3. **没有的**：没有公开基准、没有多用户真实数据；作者集只有一个人；外部集与标尺 A 是我们自己生成的，可能偏向我们自己的词库与写法。请把数字当作「这个模型在这个输入法里是否有用」的证据，而不是通用基准。

## 已知局限
- 只看光标前最多 32 字，看不到后文；句首没有上文时几乎不起作用。
- 容量不是瓶颈（50M 与 30M 相当），瓶颈是信息：场景、后文、个人习惯。
- 个人写法（如「嘛/吗」的语气取舍）它学不会，需要个人适配。
- 训练文本以书面语为主（维基、联合国占大头），口语靠 asap 与合成数据，口味可能偏书面。
- 合成数据带有生成模型的偏好与错误；自由采样出来的文字不通顺、会胡编数字，**这个模型不是用来写字的**。
- 同音微调题库用输入法自带词库造题，所以模型对该词库覆盖的同音组更有把握。

## 许可
- 权重：**CC BY-SA 4.0**（训练语料含 CC BY-SA 的维基百科，保守起见同协议发布；衍生模型是否必须如此在法律上没有定论）。
- 署名与来源：中文维基百科（CC BY-SA 4.0）；Tatoeba（CC BY 2.0 FR）；asap（Apache-2.0）；联合国平行语料（来源：联合国；Ziemski, Junczys-Dowmunt, Pouliquen. *The United Nations Parallel Corpus v1.0*. LREC 2016）；合成数据含 AI 生成文本（DeepSeek）。
- 输入法本体、词库的开源协议另定，与权重是两件事。

## 文件
`zhizi30m_v2.onnx`（fp32，127 MB，Windows / 跨平台）、`zhizi30m_v2.mlpackage`（Core ML fp16，Mac）、`itos.json`、`SHA256SUMS`、`LICENSE`、`NOTICE`。（文件名里的 v2 是接口版本，沿用至今；与权重版本无关。）int8 版（32 MB）**未做精度验证，不随首发发布**。

## 作者与联系
顺手·知字，知字输入法项目（DabbleCove）。联系：lihy.taihe@gmail.com
