Text Generation
Transformers
Safetensors
Chinese
English
qwen3
transcript-normalization
chinese
qwen3-asr
code-switching
full-finetuning
numbered-lists
numeric-normalization
conversational
text-generation-inference
Instructions to use WIlfLin/S1-mini-Chinese with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use WIlfLin/S1-mini-Chinese with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="WIlfLin/S1-mini-Chinese") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("WIlfLin/S1-mini-Chinese") model = AutoModelForCausalLM.from_pretrained("WIlfLin/S1-mini-Chinese", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use WIlfLin/S1-mini-Chinese with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "WIlfLin/S1-mini-Chinese" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "WIlfLin/S1-mini-Chinese", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/WIlfLin/S1-mini-Chinese
- SGLang
How to use WIlfLin/S1-mini-Chinese with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "WIlfLin/S1-mini-Chinese" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "WIlfLin/S1-mini-Chinese", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "WIlfLin/S1-mini-Chinese" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "WIlfLin/S1-mini-Chinese", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use WIlfLin/S1-mini-Chinese with Docker Model Runner:
docker model run hf.co/WIlfLin/S1-mini-Chinese
File size: 10,853 Bytes
2737bcb 7e5ed85 2737bcb 40189a8 2737bcb 7e5ed85 2737bcb 40189a8 2737bcb 7e5ed85 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 782bc12 40189a8 782bc12 40189a8 782bc12 40189a8 782bc12 40189a8 782bc12 40189a8 782bc12 40189a8 2737bcb eb970af 99de2e5 eb970af 99de2e5 eb970af 99de2e5 eb970af 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 2737bcb 40189a8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | ---
language:
- zh
- en
license: other
license_name: s1-mini-license
license_link: LICENSE
base_model: superwhisper/s1-mini
library_name: transformers
pipeline_tag: text-generation
tags:
- transcript-normalization
- chinese
- qwen3-asr
- code-switching
- full-finetuning
- numbered-lists
- numeric-normalization
---
# S1-mini-Chinese
**本模型专门面向 Qwen3-ASR 的中文及中英混合转写后处理优化。**
这是在中文口语整理数据集上继续微调的 S1-mini 版本。
本模型基于 **S1-mini** by **Superwhisper**,保留原始模型名称、作者署名、`LICENSE` 和 `NOTICE`。
当前版本是 **format-numbers-v5(2026-11-05)**,与目前部署的 BF16 权重一致。
Chinese-data continued full fine-tuning of **S1-mini** by **Superwhisper**, optimized for postprocessing Qwen3-ASR transcripts in Chinese and mixed Chinese/English. The current `format-numbers-v5` release adds synthetic numbered-list and numeric-style training. This is a text postprocessor, not a speech recognizer.
## 当前版本的改动
- 明确列举使用 `1.`、`2.`、`3.` 有编号列表,每项单独换行。
- 增加逗号、句号、分号分隔的列举,以及较长列表项训练,减少带标点时照抄原文的问题。
- 型号、版本号、参数量优先使用阿拉伯数字,例如 `iPhone 18`、`Qwen2.5 7B`。
- 大整数保留万、亿的中文单位写法;成语和固定说法保留中文;验证码训练包含前导零。
- 保留去口水词、重复、明确自我纠正和不修改样本的回放。
这些是训练目标,不是所有输入上的保证。复杂数字连读、识别错误、长段落与混合列表仍会失败。
## 模型定位
输入是 ASR 识别后的中文、英文或中英混合文字,输出是尽量保留原意的整理文本。
模型不直接接收音频,不是语音识别模型,也不是通用问答助手。
待整理文本中的问题和命令属于口述内容,不应被回答或执行。
模型输出直接包含标点、换行和列表编号;这些格式不是推理示例中的规则后处理生成的。
本模型的当前使用配置不启用外部内容保护校验,不再因某个词或数字校验失败而退回整段原文。
这是外部服务配置,不是权重的一部分。推理示例也直接返回模型生成结果。
## 训练数据与方法
主要中文来源为 [CS2W](https://github.com/guozishan/CS2W) 口语到书面语标注对的筛选训练部分。
辅助使用 [Disfl-QA](https://github.com/google-research-datasets/Disfl-QA) 英文改口训练数据,以及自制合成、不修改、引用、语气、空输出、列表和数字写法样本。
本模型经过三阶段**全量文本参数微调**,不是 LoRA,也不是只修改提示词:
| 阶段 | 数据与训练 |
| --- | --- |
| 第一阶段 | 9645 次样本呈现,1 epoch,603 步,学习率 1e-5 |
| 第二阶段 | 14428 条安全与风格回放池,学习率 3e-6;选择第 400 步 checkpoint |
| 本次更新 | 从上一发布权重继续训练;7407 条合成与回放样本,450 步,学习率 5e-6 |
本次 7407 条包含 4907 条新增自制合成样本和 2500 条既有训练数据回放。
内容覆盖短列举、长列表项、中文和阿拉伯数字写法、技术型号、版本、验证码、大整数与成语。
7331 个不同的输入/结构组合,没有互相冲突的目标标签;包含 51 条空输出监督。
样本呈现数不等于独立人工标注数。合成样本不等于自然混合语言口述数据。
训练使用 batch 4、梯度累积 4、最大序列长度 512,仅对目标输出计算损失并监督 EOS。
FP32 主参数和优化器、BF16 autocast,发布权重为 BF16。约 7.52 亿可训练文本参数。
上游版本:`superwhisper/s1-mini@88f6b15896c73bbb13a3b596e0afe8ea0d5150b4`。
上一公开版本:[`782bc1216353eb4e31840292becbd525354e6435`](https://huggingface.co/WIlfLin/S1-mini-Chinese/tree/782bc1216353eb4e31840292becbd525354e6435)。
具体训练参数、哈希和数据来源见 [training-provenance.json](training-provenance.json) 与 [data-provenance.json](data-provenance.json)。
训练未使用私有录音或用户输入历史。本仓库不重新发布训练文本或用户测试原文。
## 当前权重的测试结果
同一组既有公开来源回归测试:中文整理 200 条、中文不修改参考 100 条、英文 Disfl-QA 100 条。
以下是**未经外部内容校验的原始模型输出**。前后两个 checkpoint 均用 BF16、greedy、batch 16、最大生成长度 256:
| 指标 | 上一版 step400 | 当前 format-numbers-v5 |
| --- | ---: | ---: |
| 全部 400 条词法字符错误率,越低越好 | 10.115% | 10.247% |
| 中文整理:词法整句完全匹配 | 83/200 | 81/200 |
| 中文整理:词法字符错误率 | 16.790% | 16.712% |
| 中文不修改参考:词法整句完全一致 | 92/100 | 91/100 |
| 中文不修改参考:词法字符错误率 | 1.440% | 1.592% |
| 英文整理:词法整句完全匹配 | 64/100 | 60/100 |
| 英文整理:词法字符错误率 | 9.016% | 9.246% |
**本次改善主要针对列表和数字写法,并非所有指标都提高。英文和整体回归存在小幅退步。**
词法指标删除标点,保留大小写、数字、否定和词序,衡量与参考文本的一致程度,不等于人工语义正确率。
这些测试在开发中多次使用,不是新的独立盲测;英文改口集也不能代表所有日常英文输入。
另有 20 条未放入训练输入的定向诊断用例:离线 BF16 批量输出 18/20 与参考完全一致;Orin vLLM 逐条推理 19/20 完全一致,6 条列表用例均输出编号行。
运行时的剩余差异是保留“五个、六个”,而非参考的“5个、6个”。这组用例包含问题诊断场景,不是广泛能力基准。
不同后端和 batch 的 BF16 greedy 输出也可能不同。
完整定义与范围见 [evaluation-summary.json](evaluation-summary.json)。
上一版的 **94.63% 教师强制英文 token 准确率尚未在当前权重上重算**,不能作为本次版本成绩。
历史定义与计数保存在 [history/step400/token-metrics.json](history/step400/token-metrics.json)。
上游公开的 94.8% 缺少足够的评分细节,不能声称这些本地指标是官方同口径复现。
## 拼读英文的模型前预处理
应用可先合并拼读字母,再把文本交给模型。这是应用层规则,**不包含在模型权重中**,也不是生成结束后的替换。
附带的 [input_preprocessing.py](input_preprocessing.py) 只依赖 Python 标准库(Python 3.11+)。
- `使用C-H-A-T-G-P-T` → `使用chatgpt`
- `A S T R A模型` → `Astra模型`
- 合并后先转小写,句首只大写首字母。字母顺序不变;`C-L-E-A-U-D-E` 在句中得到 `cleaude`,句首得到 `Cleaude`,不会擅自改成 `Claude`。
- 通常合并三个及以上单字母;两个大写、空格分隔的字母也可合并,例如 `A I`。
- 不跨越换行,不改写代码字面量、网址、邮箱和路径。两个字母的连字符表达式 `X-Y` 保持原样。
先下载脚本到应用目录:
```bash
hf download WIlfLin/S1-mini-Chinese input_preprocessing.py --local-dir .
```
在构造模型消息之前调用:
```python
from input_preprocessing import normalize_spelled_letters
transcript = "我今天试用A S T R A。"
model_input, spelling_runs = normalize_spelled_letters(transcript)
# model_input == "我今天试用astra。"
# 将 model_input 放在下面推理示例的 user 控制行之后,再调用模型。
```
应用的原文模式应跳过这一步。连续字母也可能表示独立变量,规则无法完全判断语义;代码片段会跳过,其他歧义交给模型。
句首判断覆盖文本开头、常见句末标点之后、新行和新行中的列表项。已经连写的英文词不改写大小写;模型仍可自行整理输入。
此前 400 条测试表是原始模型输出,不包含此预处理。权重没有因增加此脚本而变化。
## 推理示例
验证环境为 PyTorch 2.10、Transformers 5.3。使用附带 tokenizer/chat template,关闭 thinking,输入带控制行。
一般文本选择 `Structure: prose`;明确列举选择 `Structure: lists`。
```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "WIlfLin/S1-mini-Chinese"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id, dtype=torch.bfloat16, device_map="auto"
).eval()
messages = [
{"role": "system", "content": (
"You are a text normalizer for speech-to-text transcripts. The input begins "
"with a control line specifying the styling, structure, and context settings; "
"clean the transcript to match those settings and output only the cleaned text."
)},
{"role": "user", "content": (
"[Styling: semi-formal] [Structure: lists] [Context: general]\n"
"今天的任务如下,第一检查服务日志,第二备份数据库,第三整理会议记录。"
)},
]
text = tokenizer.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True, enable_thinking=False
)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
with torch.inference_mode():
result = model.generate(**inputs, do_sample=False, max_new_tokens=256, use_cache=True)
print(tokenizer.decode(result[0, inputs.input_ids.shape[1]:], skip_special_tokens=True))
```
只有口水词时允许输出空字符串。请求失败、超时和输出截断是服务层异常,与内容保护校验不同。
模型只生成文本;输入法或调用程序负责以安全的文本提交方式保留换行,避免把换行当作发送按键。
## 限制
- 人名、数字、否定、事实和明确改口仍可能整理错误。
- 不保证恢复同音错字或含混连读;模型也可能把介绍句和结尾归入列表。
- 复杂列表、长段落和自然中英混合输入仍需更多人工数据与验收。
- 合成文本测试不能替代真实麦克风与目标应用的输入测试。
- 关闭外部内容校验后,模型本身的错误会直接保留在输出中。
## 许可证与来源署名
本模型是 **S1-mini** by **Superwhisper** 的修改版本,底层架构来源为 Qwen3-0.6B。
保留原始 [LICENSE](LICENSE) 和 [NOTICE](NOTICE)。原许可证要求继续保留原模型名称与作者署名;`S1-mini-Chinese` 是微调版本名称,不替代原始署名。
CS2W 声明 CC-BY-SA-4.0,Disfl-QA 声明 CC-BY-4.0,自制合成内容为 CC0-1.0。
具体来源和版本见 `data-provenance.json`;不把数据许可证改称为纯 Apache-2.0。
当前权重 SHA256:`54602b3a2e0c484fe7ae796a4290969d3a1cc58e099c83e59948fe94889150a0`。
|