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`。