S1-mini-Chinese / README.md
WIlfLin's picture
Clarify Qwen3-ASR Chinese and mixed-language postprocessing focus
7e5ed85 verified
|
Raw History Blame Contribute Delete
10.9 kB
metadata
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 → 使用chatgpt
  • A 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。