ONNX
Chinese
English
File size: 14,533 Bytes
6c44125
 
 
 
 
 
 
 
ee5b082
6c44125
 
cc4cf75
 
81fca4b
cc4cf75
 
 
 
 
 
 
 
 
 
 
 
 
ecf70fe
81fca4b
cc4cf75
ecf70fe
cc4cf75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b1bc783
 
 
cc4cf75
 
 
 
 
 
 
 
 
 
 
b1bc783
 
 
 
cc4cf75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81fca4b
cc4cf75
 
76acf60
0b5b3b5
 
 
 
 
 
 
 
 
76acf60
6c44125
cc4cf75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81fca4b
cc4cf75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b1bc783
 
 
 
 
 
8aa0919
b1bc783
 
 
 
 
 
 
 
 
8aa0919
b1bc783
 
 
 
 
 
 
 
 
 
 
cc4cf75
 
 
 
 
 
b1bc783
 
 
cc4cf75
 
 
 
 
 
 
 
 
 
 
 
ecf70fe
cc4cf75
 
 
 
 
 
 
81fca4b
cc4cf75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81fca4b
cc4cf75
 
 
 
 
 
ecf70fe
cc4cf75
 
 
 
 
 
 
 
 
 
 
ecf70fe
cc4cf75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81fca4b
cc4cf75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
973cc39
ecf70fe
 
cc4cf75
 
 
 
 
 
 
 
 
 
 
 
 
ecf70fe
cc4cf75
 
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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
---
license: apache-2.0
language:
- zh
- en
widget:
- text: TurnSense 三分类语音轮次判别演示
  output:
    url: image/PR_new.mp4
---

<div align="center">

<img src="./image/Baiji_Team.png" alt="Baiji Team Logo" width="1000" height="500"/>

<br/>

# TurnSense

### 🎯 轻量 · 精准 · 三分类 — 重新定义语音轮次判别

<br/>

<center><strong>47M 参数 | CPU 延迟 ~55ms | F1 高达 96.35% | 无效语义过滤</strong></center>

<br/>

[![GitHub](https://img.shields.io/badge/GitHub-brgroup--Team/TurnSense-181717?style=for-the-badge&logo=github)](https://github.com/Bairong-Xdynamics/TurnSense)
[![Hugging Face](https://img.shields.io/badge/🤗_Hugging_Face-brgroup--Team-yellow?style=for-the-badge)](https://huggingface.co/brgroup/TurnSense)
[![License](https://img.shields.io/badge/License-Apache_2.0-blue?style=for-the-badge)](./LICENSE)
[![PRs Welcome](https://img.shields.io/badge/PRs-Welcome-brightgreen?style=for-the-badge)](https://github.com/Bairong-XdynamicsTurnSense)

</div>

<br/>

**语言**: [English](./README.md) | **中文**

<br/>

> **⭐ 如果 TurnSense 对你有帮助,请给我们一个 Star!** 这将帮助我们持续改进模型与文档。

<br/>

## 📖 目录

## 📖 目录

- [News](#-news)
- [为什么选择 TurnSense](#-为什么选择-turnsense)
- [项目简介](#-项目简介)
- [核心特性](#-核心特性)
- [模型参数量对比](#-模型参数量对比)
- [基准测试结果](#-基准测试结果)
- [快速开始](#-快速开始)
- [评测说明](#-评测说明)
- [引用](#-引用)
- [问题与交流](#-问题与交流)
- [许可证](#-许可证)

## 📰 News

- **2026.05.22**:发布 **TurnSense 1.1**,新增英文增强版本,重点提升英文场景下 `complete / incomplete` 语义完整度判断能力,适用于中英混合对话场景。模型已发布至 Hugging Face:[brgroup/TurnSense](https://huggingface.co/brgroup/TurnSense)。

<br/>

---

<br/>
## 🏆 为什么选择 TurnSense

<div align="center">

| 维度 | TurnSense 表现 |
| :---: | :---: |
| 🎯 **准确率** | F1 **96.35%**(easyturn_real_test_ZH)— 同类最优 |
| ⚡ **推理延迟** | CPU p50 ≈ **54.65ms** — 满足实时交互需求 |
| 📦 **模型体积** | 仅 **47M** 参数,INT8 版本仅 **~50MB** |
| 🧠 **分类能力** | 业内首个同时支持 **complete / incomplete / invalid** 三分类 |
| 🚫 **无效过滤** | 无效语义 F1 达 **94.34%**,有效抑制噪声误触发 |
| 🤗 **开源友好** | 提供 FP32 / INT8 ONNX,开箱即用 |

</div>

<br/>

---

<br/>

## 📌 项目简介

**TurnSense** 是一个面向人机语音交互场景的 **三分类语义判别模型**,专注解决对话系统中一个核心问题:

> **用户说话过程中,系统应该立即响应,还是继续等待?**

传统方案通常只做"是否结束"的二分类判断。**TurnSense 更进一步** — 它同时建模语义完整度与无效输入识别,帮助系统在复杂真实场景下实现更自然的轮次衔接,**大幅减少误打断、抢话和无效触发**

<div align="center">
  <img src="./image/TurnSense.svg" alt="TurnSense 三分类示意图" width="820"/>
</div>

<div align="center">
  <video src="https://huggingface.co/brgroup/TurnSense/resolve/main/image/PR_new.mp4" 
         width="820" 
         height="400" 
         controls 
         muted 
         loop 
         autoplay 
         playsinline>
  </video>
</div>

TurnSense 将用户输入划分为三种语义状态:

| 状态 | 含义 | 示例 |
| :---: | :--- | :--- |
| ✅ **完整语义 (complete)** | 用户表达已形成完整意图,系统可以响应 | `"帮我查一下明天上海天气。"` |
| ⏳ **不完整语义 (incomplete)** | 用户表达尚未完成,存在截断或停顿后续 | `"我想问一下那个订单就是昨天……"` |
| 🔇 **无效语义 (invalid)** | 输入不构成有效语义,不应触发响应 | `"…(持续噪声 / 非语义发声)"` |

这三类标签让系统不仅能判断 **"是否该接话"**,还能识别 **"是否值得接话"**,从而在语音助手、实时通话、智能客服等场景中显著提升交互自然度与系统稳定性。

<br/>

---

<br/>

## ✨ 核心特性

### 🧠 语义级三分类

同时建模 `complete / incomplete / invalid` 三种状态,比传统二分类更贴近真实对话行为,也是目前**开源模型中唯一原生支持无效语义检测**的方案。

### ⚡ 极致轻量,极速推理

**47M** 参数(INT8 版本约 50MB),CPU 环境下推理延迟 p50 ≈ **54.65ms**、p90 ≈ **58.00ms** — 无需 GPU 即可满足实时交互的严苛要求。

### 🎯 精度领先

在 easyturn_real_test_ZH(300 条)上取得 **F1 96.35%**(complete)和 **F1 96.32%**(incomplete),在 semantic_test_ZH(2000 条)上取得 **F1 92.30%**(complete)和 **F1 91.62%**(incomplete),均为同类最优或次优水平。

### 🚫 无效输入过滤

在 NonverbalVocalization 测试集上,无效语义识别的 precision 达 **100%**、recall 达 **90.37%**(F1 = 94.34%),有效抑制非语义发声和噪声带来的误触发。

### ⚖️ 更稳健的轮次决策

在语义模糊、停顿或口语化表达场景下,兼顾 precision 与 recall,减少过早响应和漏响应。

### 📊 可复现评测体系

配套完整评测流程与脚本,支持统一指标对比、性能回归分析,确保实验可复现。

### 🤗 开源友好,即插即用

标准化仓库结构,提供 FP32 / INT8 ONNX 模型,从安装到推理只需几分钟。

<br/>

---

<br/>

## 📐 模型参数量对比

<div align="center">

| 模型 | 参数量 | 三分类 | 链接 |
| :--- | :---: | :---: | :--- |
| TEN-Turn | **7B**(70 亿) | ❌ | [TEN-framework/TEN_Turn_Detection](https://huggingface.co/TEN-framework/TEN_Turn_Detection) |
| Easy-Turn | 850M | ❌ | [ASLP-lab/Easy-Turn](https://huggingface.co/ASLP-lab/Easy-Turn) |
| NAMO-Turn-Detector (ZH) | 66M | ❌ | [videosdk-live/Namo-Turn-Detector-v1-Multilingual](https://huggingface.co/videosdk-live/Namo-Turn-Detector-v1-Multilingual) |
| **⭐ TurnSense** | **47M** | **✅** | [**Baiji-Team/TurnSense**](https://huggingface.co/brgroup/TurnSense) |
| Smart-Turn-v3 | 8M | ❌ | [pipecat-ai/smart-turn-v3](https://huggingface.co/pipecat-ai/smart-turn-v3) |
| FireRedChat-turn-detector | -- | ❌ | [FireRedTeam/FireRedChat-turn-detector](https://huggingface.co/FireRedTeam/FireRedChat-turn-detector) |

</div>

> 💡 TurnSense 以仅 **47M** 的参数量实现了三分类能力,在精度与体积之间取得了最优平衡。

<br/>

---

<br/>

## 📊 基准测试结果

> 以下所有结果均基于开源中文评测集。延迟标注 `(GPU)` 表示 GPU 环境评测,未标注则为 **CPU 环境**

<br/>

### 📋 easyturn_real_test_ZH(300 条)

> 数据来源:[Easy-Turn-Testset](https://huggingface.co/datasets/ASLP-lab/Easy-Turn-Testset) 真实数据样本

| 模型 | P (complete) | R (complete) | **F1 (complete)** | P (incomplete) | R (incomplete) | **F1 (incomplete)** | p50 延迟 | p90 延迟 |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| Easy-Turn | 97.26% | 94.67% | 95.95% | 94.81% | 97.33% | 96.05% | 183.87 (GPU) | 300.37 (GPU) |
| Smart-Turn-v3 | 64.97% | 76.67% | 70.34% | 71.54% | 58.67% | 64.47% | 36.84 | 39.10 |
| TEN-Turn | **99.25%** | 88.00% | 93.29% | 89.22% | **99.33%** | 94.01% | 17.66 (GPU) | 19.41 (GPU) |
| FireRedChat | 70.65% | 94.67% | 80.91% | 91.92% | 60.67% | 73.09% | 98.30 | 99.42 |
| NAMO-Turn | 81.53% | 85.33% | 83.39% | 84.62% | 80.67% | 82.59% | 3.60 | 83.44 |
| **⭐ TurnSense** | 96.03% | **96.67%** | **🏆 96.35%** | **96.64%** | 96.00% | **🏆 96.32%** | 54.65 | 58.00 |

> **🔍 关键发现:** TurnSense 在 complete 和 incomplete 两类上均取得 **最高 F1**,且是唯一在 CPU 上 p50 < 60ms 同时 F1 > 96% 的模型。

<br/>

### 📋 semantic_test_ZH(2000 条)

> 数据来源:[KE-Team/SemanticVAD-Dataset](https://huggingface.co/datasets/KE-Team/SemanticVAD-Dataset) 中文测试集

| 模型 | P (complete) | R (complete) | **F1 (complete)** | P (incomplete) | R (incomplete) | **F1 (incomplete)** | p50 延迟 | p90 延迟 |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| Easy-Turn | 78.14% | 98.30% | 87.07% | 97.64% | 70.30% | 81.74% | 183.87 (GPU) | 300.37 (GPU) |
| Smart-Turn-v3 | 59.25% | 88.10% | 70.85% | 76.80% | 39.40% | 52.08% | 36.84 | 39.10 |
| TEN-Turn | 85.25% | **99.60%** | 91.87% | **99.52%** | 82.70% | 90.33% | 17.66 (GPU) | 19.41 (GPU) |
| FireRedChat | 66.76% | 99.40% | 79.87% | 98.83% | 50.50% | 66.84% | 98.30 | 99.42 |
| NAMO-Turn | 71.48% | 86.70% | 78.36% | 83.10% | 65.40% | 73.20% | 3.60 | 83.44 |
| **⭐ TurnSense** | **88.96%** | 95.90% | **🏆 92.30%** | 95.55% | **88.00%** | **🏆 91.62%** | 54.65 | 58.00 |

> **🔍 关键发现:** 在 2000 条的大规模测试集上,TurnSense 依然保持 F1 最优,验证了模型的泛化能力。

### 📋 TurnSense 1.1 英文增强结果

> 模型下载地址:[Hugging Face - brgroup/TurnSense](https://huggingface.co/brgroup/TurnSense)

> TurnSense 1.1 重点增强英文场景下的语义完整度判断能力。以下结果展示其在英文测试集上的 `complete / incomplete` 表现。

### 📋 Ten_test_EN

| 模型 | P (complete) | R (complete) | **F1 (complete)** | P (incomplete) | R (incomplete) | **F1 (incomplete)** |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: |
| Smart-Turn-v3 | 70.66% | 72.46% | 71.55% | 65.05% | 63.02% | 64.02% |
| TEN-Turn | **98.61%** | 90.25% | **94.25%** | 89.15% | **98.44%** | **93.56%** |
| FireRedChat | 76.41% | **97.46%** | 85.66% | **95.28%** | 63.02% | 75.86% |
| NAMO-Turn | <u>92.65%</u> | 26.69% | 41.45% | 51.94% | <u>97.40%</u> | 67.75% |
| **⭐ TurnSense 1.1 int8** | 83.01% | 91.10% | 86.87% | 87.57% | 77.08% | <u>81.99%</u> |

### 📋 semantic_test_EN

| 模型 | P (complete) | R (complete) | **F1 (complete)** | P (incomplete) | R (incomplete) | **F1 (incomplete)** |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: |
| Smart-Turn-v3 | 68.18% | 75.00% | 71.43% | 72.22% | 65.00% | 68.42% |
| TEN-Turn | **97.98%** | 97.00% | **97.49%** | **97.03%** | **98.00%** | **97.51%** |
| FireRedChat | 72.06% | **98.00%** | 83.05% | 96.88% | 62.00% | 75.61% |
| NAMO-Turn | <u>93.55%</u> | 87.00% | <u>90.16%</u> | 87.85% | <u>94.00%</u> | <u>90.82%</u> |
| **⭐ TurnSense 1.1 int8** | 74.60% | 94.00% | 83.19% | <u>91.89%</u> | 68.00% | 78.16% |


<br/>
<br/>

### 📋 NonverbalVocalization_invalid(728 条)

> 数据来源:OpenSLR [Deeply Nonverbal Vocalization Dataset(SLR99)](https://openslr.elda.org/99/)

| 模型 | R (invalid) |
| :--- | :---: |
| **⭐ TurnSense** | **90.37%** |

<br/>

---

<br/>

## 🚀 快速开始

### 1. 安装

```bash
git clone https://github.com/Bairong-Xdynamics/TurnSense.git
cd TurnSense

pip install -U numpy onnxruntime torch librosa soundfile pandas scikit-learn huggingface_hub
```

### 2. 获取模型权重

TurnSense 模型权重已发布在 Hugging Face:[Baiji-Team/TurnSense](https://huggingface.co/brgroup/TurnSense)

| 版本 | 体积 | 适用场景 |
| :--- | :--- | :--- |
| FP32 | ~191 MB | 精度优先 |
| INT8 | ~50 MB | 部署优先(推荐) |

**下载方式:**

**方式一:自动下载(推荐)**
推理脚本内置了 Hugging Face 下载逻辑,首次运行时会自动拉取并缓存模型。

**方式二:Git LFS**

```bash
git lfs install
git clone https://huggingface.co/brgroup/TurnSense
```

**方式三:Hugging Face Hub**

```python
from huggingface_hub import snapshot_download
snapshot_download(repo_id="brgroup/TurnSense")
```

### 3. 推理

```bash
python infer.py
```

示例输出:

```
Loading model from brgroup/TurnSense...
Running inference on: "我想问一下那个订单就是昨天..."

Results:
  Input: "我想问一下那个订单就是昨天..."
  TurnSense Detection Result: "incomplete"
```

<br/>

---

<br/>

## 🧪 评测说明

### 1)评测流程

1. 读取 `.jsonl` 格式的测试数据集
2. 每个模型先进行预热(默认 `warmup_iters=20`3. 逐样本推理,统计分类指标与性能指标
4. 自动输出汇总与明细文件

输出文件包括:

| 文件 | 说明 |
| :--- | :--- |
| `report.md` | 汇总评测报告 |
| `results.json` | 结构化评测结果 |
| `config.json` | 本次评测配置 |
| `per_sample__*.jsonl` | 逐条样本预测结果 |

### 2)数据格式要求(JSONL)

每一行是一个 JSON 对象,至少包含以下字段:

| 字段 | 说明 |
| :--- | :--- |
| `audio_path` | 音频文件路径 |
| `text` | 文本内容 |
| `label` | 标签(`complete` / `incomplete` / `invalid`) |

示例:

```jsonl
{"audio_path":"/001.wav","text":"帮我查一下明天上海天气","label":"complete"}
{"audio_path":"/002.wav","text":"我想问一下那个订单就是昨天...","label":"incomplete"}
{"audio_path":"/003.wav","text":"啊…嗯…(持续噪声)","label":"invalid"}
```

### 3)运行评测

```bash
python TurnSense/Turn_benchmark/benchmark.py
```

<br/>

---

<br/>

## 📚 引用

如果你在研究或产品中使用了 TurnSense,请引用:

```bibtex
@misc{turnsense2026,
  author       = {Baiji Team},
  title        = {TurnSense: A Three-Class Semantic Detection Model for Complete, Incomplete, and Invalid Utterances},
  year         = {2026},
  publisher    = {Hugging Face},
  howpublished = {\url{https://huggingface.co/brgroup/TurnSense}},
}
```

<br/>

<br/>

## ❓ 问题与交流

如果有问题或改进建议,欢迎通过以下方式联系我们:

| 渠道 | 联系方式 |
| :--- | :--- |
| 📧 邮箱 | [huan.shen@brgroup.com](mailto:huan.shen@brgroup.com) ・ [yingao.wang@brgroup.com](mailto:yingao.wang@brgroup.com) ・ [wei.zou@brgroup.com](mailto:wei.zou@brgroup.com) |
| 💬 微信 | h2538406363 |
| 👥 微信群聊 | 扫码加入群聊<br><img src="image/wechat.jpg" alt="微信群聊二维码" width="220" /> |
| 🐛 Issues | [GitHub Issues](https://github.com/Bairong-Xdynamics/TurnSense/issues) |
| 🔀 PR | [Pull Requests](https://github.com/Bairong-Xdynamics/TurnSense/pulls) |

<br/>

## 📄 许可证

本项目基于 **Apache License 2.0** 发布,并附加特定限制条件。详情请参见 [LICENSE](./LICENSE)。

<br/>

---

<div align="center">

**由 [Baiji Team](https://github.com/Bairong-Xdynamics) 用 ❤️ 打造**

</div>