完全合成的双人对话,用户和助手各占一个声道,重叠是真的同时发声。 每一行的助手行为由一条说出口的指令决定,而这条指令下的正确答案 是算出来的,不是写死的。
公开数据集:huggingface.co/datasets/zetianli/FD_data_v2 · 本文件自带音频,离线可听
下面每组例子里,同一个 base_conv_id 的几行共享逐样本相同的用户声道——
所以听得出来的任何差别,只可能来自指令。戴耳机效果最好:左声道是用户,右声道是助手。
播放器不出现的话,说明你所在的环境挡掉了内联音频;
点每个播放器下面的「下载」按钮,或者直接用浏览器打开本地的
duplex_report.html,就能听。
用户说错了一个事实并据此做计划。第一条没有指令,助手等他说完;第二条的指令说「平时别打断——但我说错事实就当场纠正」,助手切了进去。
第二条约 15.9 秒,助手在用户说到「stick to the」时切进来说 Wait, it was already huge in the twenties;用户的话在 16.2 秒被截断,最后 5 个词没说出口。两人有约 0.25 秒真正同时发声。
两行的用户声道逐样本相同,所以差别只可能来自助手。这条的策略名叫 listen,但正确行为是打断——例外条款触发了。只认策略名字的模型必错。
同一段对话、同一处插话(「你是说二十四小时吧?」)。两条指令对同一个时刻要求相反的反应,音频上一个没停、一个停下来道歉改正。
两条都在约 23.5 秒被用户插话「Wait, you mean twenty four hours, right?」。第一条助手压着继续说完;第二条助手在 23.8 秒停住,0.29 秒后接「Yeah, sorry about that, I totally meant twenty four hours」。
这是 continue 与 acknowledge 的对照。两条指令是采样出来的程序,在同一个时刻要求相反的动作,构建器据此决定助手让不让出发言权——不这么做的话姊妹行听起来会一模一样,指令就只是说明文字。
助手嘴上说着 hold 语,文本流同时发出工具调用;用户中途取消。调用已经在途中,所以有 tool_call —— 但绝不能报结果。
助手说 hold 语的同时,文本流上出现 tool_call;用户随后取消,助手确认放弃,并且不报任何结果。
工具调用走文本流,和语音并行,所以时间线上有第三条轨。取消行只有 tool_call、没有 result——给已取消的调用报结果,正是这个场景存在的意义。
数据里出现过的每一个情境都在下面,而且给的是对照组——
同一段对话的几个变体,用户声道逐样本相同,所以听得出的差别只可能来自指令。
每条都写了这个情境在考什么,以及这一条该听见什么
(时间点是从这一行自己的时间线读出来的,不是我写的)。
八个 policy 取值全部覆盖。
考什么一口气讲完,子句边界清楚但完全没有停顿。边界不等于可以插话——考的是模型会不会把语法边界误当轮次边界
(无指令对照基线)
全程没有重叠事件;0 处停顿,助手始终没出声
You are an attentive listener: small acknowledgments at the natural gaps, never a sentence of your own until I stop.
57.3s 助手附和「got it」
考什么纯沉默,没有任何口头信号。停顿多长算「让出发言权」?这条考的是模型有没有把绝对时长当阈值用
(无指令对照基线)
全程没有重叠事件;2 处停顿,助手始终没出声
You are an attentive listener: small acknowledgments at the natural gaps, never a sentence of your own until I stop.
32.0s 助手附和「mm-hmm」
考什么带情绪的私人经历加一个沉重的停顿。这里的停顿不是让你说话,是需要你别说话
(无指令对照基线)
全程没有重叠事件;2 处停顿,助手始终没出声
Small signals only, and only where I leave room for them.
33.2s 助手附和「oh no」
考什么用户在烦躁。他首先需要的是被听见,不是被解决方案打断
(无指令对照基线)
全程没有重叠事件;2 处停顿,助手始终没出声
It's unnerving when you're completely silent — a quick 'right' at the breaks is enough. Nothing longer than that.
22.3s 助手附和「oh man」
考什么错误明确、代价明确,是最容易的一档。模型如果连这个都不敢插,说明它把「别打断」学成了「永远别说话」
(无指令对照基线)
全程没有重叠事件;0 处停顿,助手始终没出声
Don't let a mistake stand: the moment I say something that isn't right, jump in and fix it. Any other time, just let me talk, but if I get a plain fact wrong, correct me on the spot rather than waiting.
16.4s 助手切入「Wait, it was actually way earlier than that」 · 16.7s 轮次被截断,2 个词没说出口
Please don't talk over me, and please don't fill the silences either — I'll tell you when I'm finished, but if I get a plain fact wrong, correct me on the spot rather than waiting.
15.9s 助手切入「Wait, it was already huge in the twenties」 · 16.2s 轮次被截断,5 个词没说出口
考什么长时间迟疑,但用户还在组织语言。和上一条的区别在于他不需要你补词,只需要你别打断
(无指令对照基线)
全程没有重叠事件;4 处停顿,助手始终没出声
Small signals only, and only where I leave room for them, but if I'm obviously hunting for a word, just supply it instead of leaving me hanging.
29.3s 助手切入「Like, sandy or something?」 · 29.6s 轮次被截断,2 个词没说出口
考什么【诱饵】句子里确实有一个错误说法,但用户明说那是别人的看法。只看「有没有错误陈述」的模型会上钩
(无指令对照基线)
全程没有重叠事件;0 处停顿,助手始终没出声
One thing: when it's the first thing I say or I change the subject, give me a short mm-hmm; but when I finish a turn, hold off and let me get through it. Otherwise just listen.
5.6s 助手附和「oh really」 · 20.4s 助手附和「oh really」 · 应答延迟 1.07s(listen)
One thing: when it's the first thing I say and I finish a turn, just listen; but when I don't change the subject, jump straight in. Otherwise a quiet mm-hmm is fine.
20.3s 助手附和「oh really」 · 应答延迟 0.11s(interrupt)
考什么句中真提了一个能回答的问题,而且不等回答继续说。和上一条正好构成一对:形式相似,正确反应相反
(无指令对照基线)
全程没有重叠事件;0 处停顿,助手始终没出声
Let me finish. No interjections, no mm-hmms, nothing until I'm done, unless I ask you something outright mid-sentence, in which case answer it right away.
19.9s 助手切入「Yeah, it closes at nine」 · 20.2s 轮次被截断,7 个词没说出口
考什么同样是纠错,但代价更高。这里考的是模型会不会因为「用户语气很随意」就跟着放松
(无指令对照基线)
全程没有重叠事件;0 处停顿,助手始终没出声
Quick ground rule: from the second time I finish a turn onwards, give me a quick confirmation. Otherwise just listen.
22.3s 助手附和「(turn-end acknowledgment)」 · 应答延迟 0.21s(backchannel)
One thing: from the third time it's the first thing I say or I state what I plan to do onwards, keep listening — but when I ask if you agree with me, break off and address it. Otherwise a quiet mm-hmm is fine.
3.1s 助手附和「oh wow」 · 应答延迟 1.18s(listen)
考什么矛盾跨轮次,不在当前这句话里。要发现它,模型必须记住用户几轮之前说过什么——纯声学线索在这里帮不上忙
(无指令对照基线)
全程没有重叠事件;0 处停顿,助手始终没出声
When the user states something factually wrong, interrupt immediately to correct it. Do not wait for them to finish. Otherwise, listen.
17.0s 助手切入「Wait, didn't you just say they were totally fine?」 · 17.3s 轮次被截断,4 个词没说出口
考什么用户在念地址或编号。这里反过来:不出声才是错的,用户需要逐条确认收到
(无指令对照基线)
全程没有重叠事件;5 处停顿,助手始终没出声
You are an attentive listener: small acknowledgments at the natural gaps, never a sentence of your own until I stop.
21.6s 助手附和「got it」
考什么【诱饵】用户扭头对房间里另一个人说话。表层特征和真提问一模一样,区别只在语义
(无指令对照基线)
全程没有重叠事件;2 处停顿,助手始终没出声
Here's how I want this to go: when I ask you something outright, jump straight in. Otherwise just listen.
24.2s 助手切入「Oh, got it.」 · 24.5s 轮次被截断,2 个词没说出口
When I finish a turn and it isn't that it's the first thing I say, cut in right away — but when I ask you to do something, hold off and let me get through it. Otherwise just listen.
应答延迟 0.24s(interrupt)
考什么「你懂我意思吧」——像提问但其实是要一个确认。给长答案就是理解错了
(无指令对照基线)
全程没有重叠事件;1 处停顿,助手始终没出声
Small signals only, and only where I leave room for them.
19.8s 助手附和「mm-hmm」
考什么带「呃」「嗯」的规划性停顿。这些填充词是「我还没说完」的信号,不是间隙
(无指令对照基线)
全程没有重叠事件;4 处停顿,助手始终没出声
It's unnerving when you're completely silent — a quick 'right' at the breaks is enough. Nothing longer than that.
29.0s 助手附和「mm-hmm」
考什么【诱饵】用户已经自己改过来了。这里插话不是帮忙,是打断一次本来已经完成的自我修复
(无指令对照基线)
全程没有重叠事件;0 处停顿,助手始终没出声
One thing: when it's the first thing I say, hold off and let me get through it. That said, when you've already sent the lookup, just acknowledge it briefly. Otherwise a quiet mm-hmm is fine.
13.3s 助手附和「oh okay」 · 16.4s 助手附和「(turn-end acknowledgment)」 · 应答延迟 0.17s(backchannel)
One thing: when I show that I am excited about the idea, say something immediately. Otherwise just listen.
应答延迟 1.32s(listen)
考什么用户卡词,绕着概念描述。补词是帮忙,但补早了就是抢话——考的是时机不是意愿
(无指令对照基线)
全程没有重叠事件;4 处停顿,助手始终没出声
Here's how I want this to go: when I don't struggle to find the right word, cut in right away. Otherwise a quiet mm-hmm is fine.
19.5s 助手切入「You mean a rotating schedule?」 · 19.9s 轮次被截断,16 个词没说出口
The second time I ask you something outright, keep talking; but when I finish a turn, jump straight in. That said, when it's the first thing I say, cut in right away. Otherwise a quiet mm-hmm is fine.
19.5s 助手附和「right」 · 应答延迟 0.06s(interrupt)
考什么助手正在讲方案,用户加一条新约束。停下来还不够,后面的方案要跟着改
(无指令对照基线)
42.8s 用户插话「Wait, we can't use spreadsheets because the staff can't use computers」 · 43.2s 轮次被截断,15 个词没说出口
The moment I cut in with a change, drop what you were saying and work the change in — don't finish the old version first.
42.9s 用户插话「Wait, we can't use spreadsheets because the staff can't use computers」 · 43.2s 轮次被截断,15 个词没说出口
考什么助手自己说错了,用户指出。纠错对象是助手不是用户,这一条考的是模型接不接受被纠正
(无指令对照基线)
28.9s 用户插话「Wait, no, you actually want them cold to keep them fresh」 · 29.2s 轮次被截断,4 个词没说出口
If I add a condition halfway through, I need you to actually use it, not to repeat the plan you already had.
28.9s 用户插话「Wait, no, you actually want them cold to keep them fresh」 · 29.2s 轮次被截断,4 个词没说出口
考什么用户说没听清。要重说,不是接着往下讲
(无指令对照基线)
23.8s 用户插话「Tilden where?」 · 24.2s 轮次被截断,2 个词没说出口
If I add a condition halfway through, I need you to actually use it, not to repeat the plan you already had.
23.8s 用户插话「Tilden where?」 · 24.2s 轮次被截断,2 个词没说出口
考什么用户把范围收窄。同样是停下来改,但改的是粒度不是方向
(无指令对照基线)
29.3s 用户插话「Like, how do I actually calculate those hours?」 · 29.6s 轮次被截断,34 个词没说出口
Quick ground rule: when I break in while you're talking, stop there and adjust. Otherwise just listen.
29.2s 用户插话「Like, how do I actually calculate those hours?」 · 29.7s 轮次被截断,34 个词没说出口 · 应答延迟 0.18s(acknowledge)
When I finish a turn, make a little noise so I know you're there; but for the first bit of this, when I ask you something outright, give me a quick confirmation. Otherwise just listen.
29.3s 用户插话「Like, how do I actually calculate those hours?」 · 被插话但没有让出发言权
考什么「等一下」「不是」这类短促信号。短,但确实是要你停
(无指令对照基线)
全程没有重叠事件;0 处停顿,助手始终没出声
One thing: when I finish a turn and it isn't that it's the first thing I say, cut in right away. That said, when it isn't that I'm reading a list out to you, cut in right away, for the first bit of this, but only the once; but when I check if you are following along, stop and deal with what I said, but at most twice. Otherwise just listen.
全程没有重叠事件;0 处停顿,助手始终没出声
One thing: when it's the first thing I say, make a little noise so I know you're there. Otherwise just listen.
全程没有重叠事件;0 处停顿,助手始终没出声
考什么用户转向另一件更要紧的事。改的是方向
(无指令对照基线)
23.8s 用户插话「Wait, I just remembered my car is being towed right now!」 · 24.2s 轮次被截断,34 个词没说出口
The moment I cut in with a change, drop what you were saying and work the change in — don't finish the old version first.
23.9s 用户插话「Wait, I just remembered my car is being towed right now!」 · 24.3s 轮次被截断,34 个词没说出口
考什么用户紧急叫停。让出发言权必须快——考的是反应延迟,不只是让不让
(无指令对照基线)
27.0s 用户插话「Wait, stop right now!」 · 27.3s 轮次被截断,15 个词没说出口
Here's how I want this to go: when I break in while you're talking, keep talking. Otherwise just listen.
27.0s 用户插话「Wait, stop right now!」 · 被插话但没有让出发言权
One thing: when I break in while you're talking, break off and address it, but only the once. Otherwise just listen.
27.0s 用户插话「Wait, stop right now!」 · 27.3s 轮次被截断,15 个词没说出口 · 应答延迟 0.14s(acknowledge)
考什么用户短暂重叠一句附和。这不是要发言权——停下来就错了
(无指令对照基线)
26.8s 用户附和「got it」
Quick ground rule: the second time I've been going on for a while, don't stop and don't restart, but at most twice, except that when I provide a justification for my action, stay quiet and let me finish; but when I describe a problem I am having, jump straight in, but at most twice. Otherwise just listen.
26.8s 用户附和「got it」
Quick ground rule: once we're a few turns in, when it's the first thing I say and I don't describe a problem I am having, stay quiet and let me finish, but only the once; but when I say something short like mm-hmm while you're talking, pause and take it on board. Otherwise just listen.
26.7s 用户附和「got it」
考什么「接着说」类信号。和上一条一样是不该让出发言权的情况,信号更明确
(无指令对照基线)
24.7s 用户附和「mm-hmm」
While you are speaking, if the user gives a short acknowledgment like mm-hmm or right, treat it as support. Keep talking and finish your thought without yielding.
24.7s 用户附和「mm-hmm」
考什么同上,但调用的是执行类动作,代价更高
(无指令对照基线)
14.5s 文字流发出调用 · 16.5s 结果返回
考什么hold 语还没说完,用户就改了需求。调用必须反映改动——发早了就发错了
(无指令对照基线)
53.9s 用户插话「Actually, make that for the next two days.」 · 56.6s 文字流发出调用 · 58.4s 结果返回 · 54.3s 轮次被截断,1 个词没说出口
Yield fast when I break in, then adapt.
53.9s 用户插话「Actually, make that for the next two days.」 · 56.6s 文字流发出调用 · 57.8s 结果返回 · 54.3s 轮次被截断,1 个词没说出口
考什么用户取消。调用已经在途中,所以有 tool_call,但**绝不能报结果**——给已取消的调用报结果正是这条要教反的东西
(无指令对照基线)
26.6s 用户插话「Actually, never mind, I'm good」 · 25.4s 文字流发出调用 · 26.9s 轮次被截断,1 个词没说出口
If I add a condition halfway through, I need you to actually use it, not to repeat the plan you already had.
26.6s 用户插话「Actually, never mind, I'm good」 · 25.5s 文字流发出调用 · 26.9s 轮次被截断,1 个词没说出口
考什么用户补了一条约束。调用参数要反映补充后的要求,不是原始要求
(无指令对照基线)
15.8s 文字流发出调用 · 17.0s 结果返回
考什么口播 hold 语的同时文字流发出查询调用。考的是语音和文本流能不能真的并行
(无指令对照基线)
13.6s 文字流发出调用 · 15.4s 结果返回
下面三张表覆盖数据里出现过的全部取值。 说明文字与 HuggingFace 数据卡同源,任何一个没有说明的取值都会让发布流程直接失败。
| 取值 | 说明 | 本数据集 |
|---|---|---|
| proactive | 用户持有发言权,助手判断要不要以及何时介入(打断 / 附和 / 继续听) | 218 |
| responsive | 助手持有发言权,用户压着它说话,助手决定让不让出发言权 | 57 |
| tool | 助手嘴上说 hold 语的同时,文本流并行发出工具调用 | 20 |
none 是同组的无指令对照行。prog0 / prog1 只是编号,真实语义在 program 字段的规则里,口语渲染在 instruction。其余是固定策略名,取自 Instruct-FD 的动作集合。
| 取值 | 说明 | 本数据集 |
|---|---|---|
| none | 无指令基线。同组的对照行,用来看模型在没有指令时的默认行为 | 128 |
| prog0 | 采样出来的指令程序(第 1 条)。真实语义在 `program` 字段,不在这个名字里 | 36 |
| prog1 | 采样出来的指令程序(第 2 条),与 prog0 在同一段对话上要求不同的行为 | 36 |
| listen | 安静听着,不打断也不附和,等用户明确说完再接话 | 32 |
| interrupt | 用户说错时立刻打断纠正,不等他说完 | 28 |
| backchannel | 在用户停顿或寻求确认时给简短回应(嗯、好的),不夺发言权 | 27 |
| acknowledge | 自己正在说话时,用户插入纠正或新约束,立刻停下、确认并调整 | 7 |
| continue | 自己正在说话时,用户给出简短附和,视为支持,说完不让 | 1 |
标【诱饵】的场景里,出现的东西看着像该介入的信号,但正确做法是不动。
| 取值 | 大类 | 说明 | 本数据集 |
|---|---|---|---|
| safety_correction | proactive | 用户轻描淡写地说了一个有安全风险的错误认知,并打算照做 | 24 |
| sequential_info_capture | proactive | 用户在念结构化信息(地址、编号),需要逐条确认收到 | 24 |
| factual_misinformation | proactive | 用户很自信地说错了一个日常事实,并开始据此做计划 | 17 |
| word_retrieval_assist | proactive | 用户想不起某个词,绕着这个概念描述——要不要替他补上 | 17 |
| mid_turn_direct_question | proactive | 用户句中真问了助手一个能回答的问题(不是反问),并且不等回答继续说 | 16 |
| emotional_disclosure | proactive | 用户讲一段带情绪的私人经历,中途留下一个沉重的停顿 | 16 |
| self_contradiction | proactive | 用户这句话和自己前面说过的直接矛盾 | 16 |
| user_attention_check | proactive | 用户中途确认助手还跟得上(「你懂我意思吧」) | 14 |
| user_self_correction_midstream | proactive | 【诱饵】用户正要说错一个数字或事实,自己中途察觉并当场改正 | 14 |
| user_continuer | responsive | 助手解释时用户重叠一个「接着说」类的信号 | 14 |
| user_acknowledgment | responsive | 助手解释时用户短暂重叠一句附和,表示在听 | 12 |
| hesitation_prompt | proactive | 用户在排练发言,卡住并出现长时间迟疑 | 11 |
| hypothetical_framing | proactive | 【诱饵】用户明说那是别人的看法或一个假设,不是他自己信的 | 10 |
| third_party_aside | proactive | 【诱饵】用户扭头对房间里另一个人说话——听着像在问助手,但不是 | 10 |
| clause_boundary_tracking | proactive | 用户一口气讲一条多段推理,子句边界清楚但完全没有停顿或确认 | 9 |
| topic_redirect | responsive | 助手在答一件事,用户插话转向另一件更要紧的事 | 8 |
| emotional_escalation | proactive | 用户对一直修不好的事情明显烦躁起来 | 8 |
| user_filler_pause | proactive | 用户边想边说,带着「呃」「嗯」和规划性的停顿 | 7 |
| tool_followup_constraint | tool | 用户先提要求,随后补一个额外约束,调用要反映补充后的要求 | 7 |
| hearing_check | responsive | 用户插话说没听清最后一段,要求重说 | 7 |
| tool_action_request | tool | 用户要求执行一个动作,助手说 hold 语的同时发出调用 | 6 |
| assistant_self_repair | responsive | 助手自己说错了一处,用户插话指出 | 5 |
| cognitive_pause | proactive | 用户句子说到一半陷入沉默思考,没有任何口头信号,然后继续 | 5 |
| tool_info_request | tool | 用户问的问题只能靠查询工具回答,助手说 hold 语的同时发出调用 | 3 |
| urgent_stop | responsive | 助手正在执行,用户紧急叫停 | 3 |
| scope_narrowing | responsive | 助手在泛泛回答,用户插话把范围收窄到某一点 | 3 |
| short_stop_repair | responsive | 用户用「等一下」「不是」这类短促信号打断 | 3 |
| add_constraint | responsive | 助手正在讲方案,用户插进来加一条新约束,方案要跟着改 | 2 |
| tool_barge_in_during_hold | tool | 助手正说 hold 语时用户插话改需求,调用必须反映改动 | 2 |
| tool_cancel_during_hold | tool | 助手正说 hold 语时用户取消——调用已在途中,且**不能**报结果 | 2 |
| 音频里的事件 | 次数 |
|---|---|
| 用户停顿 | 310 |
| 助手附和(压在用户说话上) | 67 |
| 用户打断助手 | 32 |
| 助手主动打断用户 | 22 |
| 用户附和 | 20 |
| 工具调用(语音与文本流并行) | 20 |
| 其中被取消、且不报结果 | 2 |
| 动作标签 | 含义 | 数量 |
|---|---|---|
| listen | 安静听着,不打断也不附和 | 212 |
| backchannel | 短促回应,不夺发言权 | 124 |
| interrupt | 立刻切进去说 | 58 |
| acknowledge | 停下、确认、调整 | 11 |
| continue | 说完不让 | 7 |
动作集合与 Instruct-FD(arXiv 2607.20460)一致,分数可以直接对齐。
acknowledge 和 continue 偏薄——它们只能出现在
「助手正在说、用户压过来」的时刻,这类时刻天然稀少,是下一步要补的。
其中 72 行的指令是采样出来的程序,其余走固定策略。
原来的做法是一张手写表:几个策略乘几种措辞,再加几条例外。表有多大,数据的天花板就有多高。 现在指令是一段小程序——原子上的规则,带与或非、序数、作用域和优先级—— 每个决策点的正确动作由解释器跑出来,AST 和逐点标签都存进数据行。 拿程序在同一段对话上重跑,必须逐条复现同样的标签:295 行 0 处不一致。
原子也不是手写的。一个标注模型读完成稿,说出它看见了什么
(changes_subject、struggles_for_word、corrects_misconception…),
在语料里跨话题反复出现过的才允许进指令。词表跟着数据长,不跟着我长。
| 检验 | 问的问题 | 结果 |
|---|---|---|
| 标签复算 | 把存下来的程序重跑一遍,标签还是那些吗 | 0 处不一致 |
| 泄漏 | 只看对话、不看指令,能猜对吗 | 低于基线 0.029 |
| Track A | 从合成好的音频重新推导,结构对得上吗 | 295 / 295 |
泄漏用留一组交叉验证,不是样本内。样本内的版本一度读到 0.609、 看着像失败,其实是特征太细导致分类器把每一行背了下来——留一组是 0.428, 比多数类基线还低。指标本身也要被怀疑。
在这之前所有批次都只到脚本为止,没有一行被真正渲染成音频。 一旦把音频建出来跑校验,问题立刻出现——而且每一个都只有在这一层才暴露。
新加的「让不让出地板」「应答延迟」记录被塞进了 events,
而 events 是带时间戳的时间线,校验器按 t 字段遍历它。
这两条是关于这一行的标注,不是时间线上的事件。
往一个有 schema 契约的列表里加东西之前没读契约。
调用在用户说完「算了」四秒之后才发出——那就没有东西可取消。 更糟的是已取消的调用还发出了结果事件,而「给已取消的调用报结果」 正是这个场景存在的意义。
校验按 policy 名字判断助手该不该出声,但组合指令是
「平时听着,但我念清单时逐条确认」——例外触发时它就该出声。
同一类混淆先后出现在生成器、采样器、校验器里。每次都是能力扩展 暴露了旧假设,不是新代码写错。
读一条行的 JSON 就发现:某一轮 t_end 是 15.18,
词表却列到 15.77,而「没说出口」的尾巴少了第一个词。
两个缺陷:被切断的那个词按「开始时刻」判定,于是只发出 12 毫秒的词被算成说过了;
更严重的是 43 个被切轮次里共 641 个词的时间戳指向静音,没有任何标记。
现在每个词带 spoken 标志,并且有专门的检查会让这类问题当场变红。