说明文档
T-one:俄语电话流式ASR系统
🚀 T-one 是一个高性能的俄语电话领域流式ASR管道。
T-one 为实时转录提供了完整的低延迟解决方案。它采用预训练的流式Conformer声学模型、自定义短语边界检测器和解码器,是生产环境中可直接使用的解决方案。它不仅提供预训练模型,还提供完整的推理、微调和部署工具集。
由 T-Software DC 开发,本项目是一个具有模块化组件的低延迟、高吞吐量ASR实用解决方案。
更多详情请参阅 GitHub仓库。
目录
📝 项目概述
主要特点:
- **流式优先架构:**为低延迟实时应用而构建。
- **即用型管道:**包含预训练声学模型、短语分割器,以及基于KenLM的 CTC 束搜索解码器,并提供离线和非实时语音识别推理示例。
- 演示 — 通过Docker即时启动本地语音识别服务,转录音频文件或实时麦克风输入。
- 微调 使用🤗生态系统可以轻松地在自定义数据集上微调T-one。
- **轻松部署:**提供使用Triton Inference Server部署的高吞吐量场景示例。
- **完全开源架构:**所有模型和管道代码均可用。
📊 质量基准
词错误率 (WER) 用于评估自动语音识别系统的质量,可解释为与参考转录本相比识别错误的单词百分比。值越低表示准确率越高。T-one表现出最先进的性能,特别是在其目标领域(电话领域),同时在通用基准测试中保持竞争力。
| 类别 | T-one (71M) | GigaAM-RNNT v2 (243M) | GigaAM-CTC v2 (242M) | Vosk-model-ru 0.54 (65M) | Vosk-model-small-streaming-ru 0.54 (20M) | Whisper large-v3 (1540M) |
|---|---|---|---|---|---|---|
| 呼叫中心 | 8.63 | 10.22 | 10.57 | 11.28 | 15.53 | 19.39 |
| 其他电话 | 6.20 | 7.88 | 8.15 | 8.69 | 13.49 | 17.29 |
| 命名实体 | 5.83 | 9.55 | 9.81 | 12.12 | 17.65 | 17.87 |
| CommonVoice 19 (测试集) | 5.32 | 2.68 | 3.14 | 6.22 | 11.3 | 5.78 |
| OpenSTT asr_calls_2_val 原始 | 20.27 | 20.07 | 21.24 | 22.64 | 29.45 | 29.02 |
| OpenSTT asr_calls_2_val 重标注 | 7.94 | 11.14 | 12.43 | 13.22 | 21.03 | 20.82 |
👨💻 推理示例
离线推理(用于整个音频文件)
from tone import StreamingCTCPipeline, read_audio, read_example_audio
audio = read_example_audio() # 或 read_audio("your_audio.flac")
pipeline = StreamingCTCPipeline.from_hugging_face()
print(pipeline.forward_offline(audio)) # 运行离线识别
输出:
[TextPhrase(text='привет', start_time=1.79, end_time=2.04), TextPhrase(text='это я', start_time=3.72, end_time=4.26), TextPhrase(text='я подумала не хочешь ли ты встретиться спустя все эти годы', start_time=5.88, end_time=10.59)]
流式推理(用于实时音频)
from tone import StreamingCTCPipeline, read_stream_example_audio
pipeline = StreamingCTCPipeline.from_hugging_face()
state = None # ASR管道的当前状态(None - 初始状态)
for audio_chunk in read_stream_example_audio(): # 使用任何音频块来源
new_phrases, state = pipeline.forward(audio_chunk, state)
print(new_phrases)
# 完成管道并获取剩余短语
new_phrases, _ = pipeline.finalize(state)
print(new_phrases)
输出:
TextPhrase(text='привет', start_time=1.79, end_time=2.04)
TextPhrase(text='это я', start_time=3.72, end_time=4.26)
TextPhrase(text='я подумала не хочешь ли ты встретиться спустя все эти годы', start_time=5.88, end_time=10.59)
🔧 微调
要从预训练检查点微调T-one,您需要准备训练数据集,从 t-tech/T-one 🤗仓库加载分词器和特征提取器。
import torch
from tone.training.model_wrapper import ToneForCTC
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = ToneForCTC.from_pretrained("t-tech/T-one").to(device)
设置数据整理器、评估指标、训练参数和🤗 Trainer。
完整指南请参阅 微调示例笔记本。
🎙 声学模型
架构
T-one是一个基于Conformer架构的7100万参数声学模型,具有多项关键创新以提升性能和效率:
- **SwiGLU激活:**前馈模块替换为SwiGLU模块,以获得更好的性能。
- **现代归一化:**使用SiLU(Swish)激活和RMSNorm替代ReLU和LayerNorm。
- **RoPE嵌入:**使用更快的旋转位置嵌入(RoPE)替换来自Transformer-XL的相对位置嵌入。
- **U-Net结构:**时间维度在Conformer块内先下采样再上采样,提升模型的感受野。
- **注意力分数复用:**多头自注意力层分组,每组只计算一次注意力分数以减少计算。
- **高效状态管理:**流式状态仅在模型最后两层使用。
它以300毫秒的块处理音频,使用贪心解码或基于KenLM的CTC束搜索解码器生成转录。
该模型使用CTC-Loss训练。 T-one主要用于电话信道音频。然而,由于它在异构数据上训练,因此在不同领域都具有鲁棒性,不仅可用于电话领域。 该模型支持流式推理,这意味着它可以实时处理长音频文件。 该模型的主要用例是通话的流式语音识别。用户向模型发送小音频块,模型增量处理每个片段,实时返回最终文本和词级时间戳。 T-one可以轻松针对特定领域进行微调。
有关架构、设计选择和实现的详细探索,请查看我们的配套 文章。还请参阅我们关于如何提升流式ASR模型质量和训练速度的技术深度解析视频 YouTube。
📉 训练详情
训练数据
声学模型在超过80,000小时的俄语语音上训练。很大一部分(高达64%)使用强大的ROVER模型集成进行伪标注。
| 领域 | 小时数 | 来源 |
|---|---|---|
| 电话 | 57.9k | 内部 |
| 远场 | 2.2K | 内部 |
| 混合 | 18.4K | 内部 |
| 混合 | 2.3K | 开源 |
训练程序
该模型从零开始(随机初始化)训练,在8块A100 GPU上训练7天,使用NVIDIA NeMo框架。关键训练参数包括:
- **优化器:**AdamW
- **调度器:**带预热的余弦退火
- **精度:**16位混合精度
- **批处理:**半排序批处理以提高效率
📜 许可证
本项目(包括代码和预训练模型)根据Apache 2.0许可证发布。
t-tech/T-one
作者 t-tech
创建时间: 2025-07-14 09:59:40+00:00
更新时间: 2025-07-30 11:07:43+00:00
在 Hugging Face 上查看