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
Download README.md from WIlfLin/S1-mini-Chinese: direct link, hf CLI and curl.
- Browser
- Download file 10.9 kB
-
https://huggingface.co/WIlfLin/S1-mini-Chinese/resolve/main/README.md
- Command line
-
hf download hf://WIlfLin/S1-mini-Chinese/README.md
-
curl -L -o README.md https://huggingface.co/WIlfLin/S1-mini-Chinese/resolve/main/README.md
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 口语到书面语标注对的筛选训练部分。 辅助使用 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。
具体训练参数、哈希和数据来源见 training-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。
上一版的 94.63% 教师强制英文 token 准确率尚未在当前权重上重算,不能作为本次版本成绩。 历史定义与计数保存在 history/step400/token-metrics.json。 上游公开的 94.8% 缺少足够的评分细节,不能声称这些本地指标是官方同口径复现。
拼读英文的模型前预处理
应用可先合并拼读字母,再把文本交给模型。这是应用层规则,不包含在模型权重中,也不是生成结束后的替换。 附带的 input_preprocessing.py 只依赖 Python 标准库(Python 3.11+)。
使用C-H-A-T-G-P-T→使用chatgptA S T R A模型→Astra模型- 合并后先转小写,句首只大写首字母。字母顺序不变;
C-L-E-A-U-D-E在句中得到cleaude,句首得到Cleaude,不会擅自改成Claude。 - 通常合并三个及以上单字母;两个大写、空格分隔的字母也可合并,例如
A I。 - 不跨越换行,不改写代码字面量、网址、邮箱和路径。两个字母的连字符表达式
X-Y保持原样。
先下载脚本到应用目录:
hf download WIlfLin/S1-mini-Chinese input_preprocessing.py --local-dir .
在构造模型消息之前调用:
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。
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 和 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。