Model card: add FullDuplexBench v1.0 + v1.5 results vs base
Browse files
README.md
CHANGED
|
@@ -9,18 +9,72 @@ tags:
|
|
| 9 |
|
| 10 |
# MiniCPM-duplex-rl
|
| 11 |
|
| 12 |
-
|
| 13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
-
|
| 16 |
-
-
|
| 17 |
-
|
| 18 |
-
- **Serving:** text-only full-duplex server (`server.py --cpm`), ~1.7 s decision blocks,
|
| 19 |
-
monotonic ASR commit.
|
| 20 |
|
| 21 |
-
|
| 22 |
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
|
| 10 |
# MiniCPM-duplex-rl
|
| 11 |
|
| 12 |
+
A full-duplex turn-taking RL fine-tune of
|
| 13 |
+
[`enochlev/MiniCPM-duplex`](https://huggingface.co/enochlev/MiniCPM-duplex)
|
| 14 |
+
(MiniCPM-duplex, from `xinrongzhang2022/MiniCPM-duplex`). The model decides every
|
| 15 |
+
~1.7 s block whether to speak or stay silent while the user may also be speaking;
|
| 16 |
+
this checkpoint was trained with REINFORCE over block-level turn-taking rewards
|
| 17 |
+
(interruption penalties, timely-response rewards, silence penalties) for 180 steps.
|
| 18 |
|
| 19 |
+
**Effect:** compared to the base model it interrupts the user less, yields to
|
| 20 |
+
barge-ins, and resumes after overlapping speech — trading away some take-turn
|
| 21 |
+
responsiveness on direct interruptions.
|
|
|
|
|
|
|
| 22 |
|
| 23 |
+
Training + serving code: [enochlev/text-only-duplex-model](https://github.com/enochlev/text-only-duplex-model)
|
| 24 |
|
| 25 |
+
## Serving
|
| 26 |
+
|
| 27 |
+
Serve **bf16** (fp8 + greedy sampling breaks the idle/speak decision):
|
| 28 |
+
|
| 29 |
+
```bash
|
| 30 |
+
vllm serve enochlev/MiniCPM-duplex-rl \
|
| 31 |
+
--served-model-name cpm-text-duplex --max-model-len 3000 \
|
| 32 |
+
--gpu_memory_utilization 0.30 --trust-remote-code
|
| 33 |
+
```
|
| 34 |
+
|
| 35 |
+
then point the repo's `server.py --cpm` at it for the real-time audio stack
|
| 36 |
+
(Kokoro TTS + Parakeet ASR + WebSocket client protocol).
|
| 37 |
+
|
| 38 |
+
## FullDuplexBench results (base vs this model)
|
| 39 |
+
|
| 40 |
+
Evaluated with [Full-Duplex-Bench](https://github.com/DanielLin94144/Full-Duplex-Bench)
|
| 41 |
+
(GPT-4o behavior classification).
|
| 42 |
+
|
| 43 |
+
### v1.5 — behavior distribution + stop/response latency (pooled, seconds)
|
| 44 |
+
|
| 45 |
+
| Task (desired) | Model | n | RESPOND | RESUME | Stop (s) | Resp (s) |
|
| 46 |
+
|---|---|---|---|---|---|---|
|
| 47 |
+
| user_interruption (RESPOND ↑) | base | 200 | **0.65** | 0.20 | 2.17 | 1.93 |
|
| 48 |
+
| | rl | 175 | 0.49 | 0.36 | 2.21 | 2.60 |
|
| 49 |
+
| user_backchannel (RESUME ↑) | base | 98 | 0.00 | 0.52 | 0.73 | 1.93 |
|
| 50 |
+
| | rl | 98 | 0.00 | **0.63** | 0.67 | 2.03 |
|
| 51 |
+
| talking_to_other (RESUME ↑) | base | 100 | 0.47 | 0.24 | 1.43 | 1.90 |
|
| 52 |
+
| | rl | 100 | 0.28 | **0.43** | 1.53 | 2.18 |
|
| 53 |
+
| background_speech (RESUME ↑) | base | 100 | 0.63 | 0.25 | 1.21 | 2.27 |
|
| 54 |
+
| | rl | 98 | 0.45 | **0.31** | 1.19 | 2.32 |
|
| 55 |
+
|
| 56 |
+
The RL model wins the three tasks whose desired behavior is *staying quiet /
|
| 57 |
+
resuming* (backchannels, third-party speech, background speech) and is less eager
|
| 58 |
+
on direct user interruptions.
|
| 59 |
+
|
| 60 |
+
### v1.0 — turn-taking dimensions
|
| 61 |
+
|
| 62 |
+
| Metric | base | rl |
|
| 63 |
+
|---|---|---|
|
| 64 |
+
| Candor Pause Handling · take-turn | 0.916 | 0.635 |
|
| 65 |
+
| Candor Turn Taking · take-turn / latency | 0.992 / 0.31s | 0.861 / 0.85s |
|
| 66 |
+
| ICC Backchannel · JSD / TOR / Freq | 0.44 / 0.71 / 0.44 | 0.69 / 0.73 / 0.15 |
|
| 67 |
+
| Synthetic Pause Handling · take-turn | 0.934 | 0.653 |
|
| 68 |
+
| Synthetic User Interruption · rating / take-turn / latency | 4.15 / 1.0 / 0.71s | 4.04 / 0.98 / 1.76s |
|
| 69 |
+
|
| 70 |
+
v1.0's take-turn/latency conventions favor the eager base model; the consistent
|
| 71 |
+
direction across both versions reflects the RL objective — restraint over
|
| 72 |
+
eagerness.
|
| 73 |
+
|
| 74 |
+
## Training summary
|
| 75 |
+
|
| 76 |
+
- 180 REINFORCE steps, lr 5e-6, 32 episodes/step, γ=0.90, per-batch z-scored advantages
|
| 77 |
+
- Block-level rewards: interruption penalty, timely-response reward, silence
|
| 78 |
+
penalty, missed-turn penalty, backchannel-loop penalty
|
| 79 |
+
- Seed-reproducible (two independent seeds: best avg reward +1.36 / +1.35);
|
| 80 |
+
replay eval cut stale-overlap speech ~45% vs base without going over-silent
|