上一篇拆了 Moshi——7B 参数、700 万小时音频、17 条并行 token 流,一座全双工语音对话的大教堂。这一篇换个尺度:2024 年 8 月,Moshi 演示上线一个月后,上海交大 X-LANCE 实验室与字节跳动发布了 LSLM(Listening-while-Speaking Language Model,arXiv:2408.02622)。全双工综述一篇把它和 Moshi 并列为「学出来的全双工」的两个开端,但两者的路数完全不同:LSLM 只有 1.06 亿参数、585 小时训练数据,它甚至不是一个对话系统——它是一个能被打断的 TTS

这恰恰是它的价值。Moshi 把全双工能力溶进了一个庞大系统,很难说清哪个设计贡献了什么;LSLM 反过来,把「边说边听」这一件事从对话系统里剥出来,做成一个变量干净的解剖标本:听觉信号应该在网络的哪一层接进来?模型怎么学会「该闭嘴了」?噪声和人声怎么区分?每个问题都配了消融实验。读 Moshi 知道全双工系统长什么样,读 LSLM 才知道全双工机制本身怎么工作。

一、单工、半双工、全双工:先把词说清楚

论文借了电信的术语给语音模型分类:

  • 单工(simplex):只有一个方向。只会听的模型(LLM 加个语音理解头:ASR、语音翻译、情感识别)和只会说的模型(LLM-based TTS)都是单工。
  • 半双工(half duplex):能听也能说,但同一时刻只能干一件事。SpeechGPT、LauraGPT 这类轮次制模型是典型——你说完,它才开始想;它说话时,你喊破喉咙它也听不见。
  • 全双工(full duplex):同时听与说。你打断它,它能立刻闭嘴让位。
单工 · 只听模型ASR / 理解人 → 模型单工 · 只说模型TTS模型 → 人半双工 · 轮流模型SpeechGPT 等轮次制:同一时刻只通一个方向全双工 · 同时模型双向同时连通,打断随时生效具备全双工建模(FDM)能力的语音语言模型,论文称为交互式语音语言模型(iSLM)
从电信视角给语音模型分类:单工只有一个方向,半双工同一时刻只能听或只能说,全双工同时双向——打断随时生效

今天的语音助手绝大多数停在半双工。不是模型不够聪明,而是自回归生成的数学形式就写死了:下一个 token 只依赖自己已生成的历史和固定的上下文,外部世界在生成过程中没有输入通道

二、FDM:一行公式的改动

论文把这件事形式化为「全双工建模」(Full Duplex Modeling,FDM),改动小到可以写在一行里。半双工的自回归模型这样预测下一个 token:

P(r_t | R_{1:t-1}, C)            # 只看自己的历史 R 和固定上下文 C

全双工只加了一项:

P(r_t | R_{1:t-1}, S_{1:t-1}, C)  # 再看实时听到的 S——它不可预测、随时变化

S 是听觉通道到 t−1 时刻为止的信号。关键在「实时且不可预测」:C 是开始生成前就固定的条件,S 却在生成过程中不断流入——用户可能沉默、可能咳嗽、可能突然喊停。模型的每一步预测都要把此刻听到的东西考虑进去。全双工综述里那套「五状态可达性」的说法,落到数学上就是这一项条件的差别。

Moshi 的 17 流联合序列是这个公式的一种豪华实现(S 是用户的 8 条 token 流,还顺带建模它);LSLM 给出的是最小实现:S 不建模、不预测,只作为条件流入。

三、解剖 LSLM:说话通道、听觉通道、一个 IRQ token

说话通道(token TTS)文本 C(要念的内容)+ 已生成的语音 tokenTransformer 块Transformer 块Transformer 块×12106Mt₁t₂t₃IRQ自回归输出语音 token(单码本)词表新增的打断 token:采样到 → 立即停止说话下一步回喂GAN 声码器token → 波形声学提示 A决定音色LSLM 的声音听觉通道(流式、连续)麦克风:打断语音+ 背景噪声流式 SSL 编码器vq-wav2vec · 全卷积 · 34M取量化前的连续嵌入线性投影对齐到主干表示空间逐层注入(middle fusion)训练时:50% 概率混入 MUSAN 噪声、50% 概率插入打断——学会「人声才停,噪声不停」
LSLM 架构:说话通道是 decoder-only 的 token TTS(文本→离散语音 token→声码器),听觉通道是流式 SSL 编码器的连续嵌入经线性投影后融合进主干;词表里多一个 IRQ token,采样到它就立即停止

3.1 说话通道:一个刻意简化的 token TTS

LSLM 的「说」是一个 decoder-only 自回归 TTS:给定要念的文本 C,逐个生成离散语音 token,最后由一个 GAN 声码器还原成波形。两个设计选择都冲着实时性去:

  • 单码本,不用 RVQ。 VALL-E 那套「AR 出第一层、NAR 补其余层」的组合被明确拒绝——NAR 要等 AR 整段出完才能开工,天然不流式。LSLM 用 vq-wav2vec 把语音量化成单层离散 token,出一个就能往下走一个。代价是音质上限,但这篇论文的主角本来就不是音质。
  • 音色外包给声码器。 声码器拿一段声学提示(acoustic prompt)决定音色,AR 主干只管内容。音色与内容解耦后,语言模型的容量全花在语义上——106M 的小模型也够用。

3.2 听觉通道:连续嵌入,不量化

「听」用的是同一个 vq-wav2vec 编码器,但走到量化前就停下:取连续嵌入,过一个线性投影层对齐到主干的表示空间。和 Moshi 把用户音频也离散化成 token 不同,LSLM 认为听的一侧没必要过量化这道有损工序——保留连续特征,噪声、音色、韵律的细节都还在。

选 vq-wav2vec 还有个实用原因:它是 20 层一维卷积的全卷积网络(34M 参数),感受野有限、天然因果,流式提取不需要任何改造。推理时音频边进边编码,每一步的听觉特征实时可得。

3.3 IRQ token:把「被打断」放进词表

全双工的行为怎么落地成训练目标?LSLM 的答案朴素得漂亮:往 TTS 的词表里加一个 IRQ token(interruption 的缩写,借了硬件中断的名字)。

  • 训练时:一半样本的听觉通道里会在随机时刻插入一段打断语音。构造目标序列时,在打断开始后 μ = 0.5 秒的位置放一个 IRQ,之后的语音 token 全部截断——教模型「听到打断,半秒内停」。
  • 推理时:模型每步都在所有 token 上采样。没人打断时,IRQ 的概率低于千分之一,几乎不可能被采到;打断信号流入后,IRQ 概率迅速抬升,一旦采到,生成立即终止。
时间打断开始判定窗口 2μ = 1 s(窗口内停下算打断成功)说话通道IRQ此后停止输出正常自回归输出语音 token……听觉通道安静 / 背景噪声(不该停)打断语音(人声)IRQ 概率(对数刻度)10⁻³ 以下被采样 → 生成终止先小幅爬升:分辨人声还是噪声训练目标:打断开始后 μ = 0.5 s 处放置 IRQ 并截断后续 token——「听到打断,半秒内停」
IRQ 机制的时间线:无打断时 IRQ 概率低于 0.001;打断语音进入听觉通道后概率快速抬升直至被采样,模型停止说话。判定标准:打断开始后 1 秒(2μ)内停下算成功

论文的可视化实验证实了这条曲线:IRQ 概率平时贴着地板,打断开始后先小幅爬升(模型在「分辨这是人声还是噪声」),确认后陡然拉起直到被采样。打断检测不是外挂的 VAD 模块,是语言模型自己的一个 token 的概率——这个思路和 Moshi 把「让位」表示为静音 token 异曲同工:双工行为都被吸收进了词表与序列建模本身。

顺带一提训练配方里的对抗设计:除了 50% 概率插打断,还有 50% 概率往听觉通道混入 MUSAN 数据集的背景噪声——电话铃、爆炸声、白噪声、车流声。模型必须学会「人声才停,噪声不停」,否则会退化成听见任何动静都闭嘴的胆小鬼。

四、关键实验:「听」应该接在网络的哪一层

听觉特征拿到了,往说话主干的哪里灌?这是全文最有价值的消融。三个候选位置:

Early:输入处相加输出 logits块 N块 1说话嵌入听觉嵌入WER 33.56%(TTS 崩坏)Middle:逐层注入 ✓输出 logits块 N块 1说话嵌入听觉特征WER 4.05% · F1 98.0%生成与交互双保全(最优)Late:logits 处相加说话主干听觉通道两路独立前向,只在决策面上叠加WER 4.37%;噪声 F1 94.89%分不清噪声与人声,误判↑基线 Vanilla TTS(无听觉通道)WER 4.28%;结果为 command-based FDM 设定
三种融合位置与命令式打断场景的结果:early 在输入嵌入处相加(TTS 崩坏,WER 33.56%);middle 在每个 Transformer 块的输入处都注入听觉特征(WER 4.05%,双能力平衡);late 只在输出 logits 处相加(噪声下打断误判率上升)
  • Early fusion:听觉嵌入和说话嵌入在输入处相加,一起进 Transformer。结果是灾难:WER 从基线的 4.28% 飙到 33.56%。两路信号在最底层就搅在一起,模型分不清哪些信息该复述、哪些该警惕,下一 token 预测直接被污染。
  • Late fusion:两路各自独立前向,只在输出 logits 处相加。TTS 能力保住了(WER 4.37%),但打断判断变得肤浅——噪声环境下 precision 掉到 93.06%、F1 掉到 94.89%。只在「决策面」上叠加,网络没有机会在中间层慢慢分辨人声与噪声。
  • Middle fusion:在每个 Transformer 块的输入处都把听觉特征加进来(连同位置嵌入)。TTS 几乎无损(clean 4.05%,比基线还略好;噪声下 4.51%),打断能力也稳(F1 clean 98.00%、噪声 97.38%)。

结论干脆:middle fusion 全面胜出。直觉上也讲得通——early 混得太早,底层表示互相污染;late 混得太浅,没有足够深度做「这是不是有人在叫我」的判断;middle 让每一层都能参考听觉信息,又不动摇各自的输入表示。这个「逐层注入旁路信息」的形状,后来在各家全双工系统里反复出现。

五、两个考场:口令打断与自由打断

机制验证分两档难度:

  • Command-based FDM(口令打断,说话人相关):只有特定口令能打断——用 SEED-TTS 的 22 个精品音色合成的「Honey」。这是「智能音箱唤醒词」式的简化设定。结果如上节:middle fusion 下 F1 98%,噪声几乎不掉点。
  • Voice-based FDM(自由打断,说话人无关):打断词换成 Speech Commands 数据集里的任意单词,而且测试集说话人从未在训练中出现。难度立刻上来:clean 下 F1 95.50%,加噪后 precision 87.69%、recall 82.77%、F1 85.15%;TTS 的 WER 也从 4.28% 升到 5.33%(clean)、8.50%(噪声)。

从 98 到 85 的落差,就是「实验室口令」到「真实世界任意人任意词」的距离。LSLM 诚实地把这个 gap 摆了出来:对未见说话人、任意词汇、有噪声的三重叠加,一个 106M 的模型开始吃力——但仍然远好于「完全不会被打断」的基线水平。

消融实验还回答了「预训练怎么用」:说话主干和听觉编码器都加载预训练权重并继续微调时效果最好(WER 4.05%、F1 98.00%);把 SSL 编码器冻住则是明显的瓶颈——它预训练时没见过噪声,冻结后无法适应「人声混噪声」的输入,recall 一度掉到 83.60%。

六、LSLM 与 Moshi:同一个月的两条路

把两篇放在一起看,几乎每个设计维度都选了相反的方向:

维度LSLMMoshi
定位全双工机制研究(能被打断的 TTS)完整对话系统
规模106M 主干 + 34M 编码器7B 主干 + 深度 Transformer
训练数据585 小时 LibriTTS700 万小时音频
说话内容来源外部给定文本模型自己「想」(内心独白)
说的表示单码本 vq-wav2vec token8 码本 Mimi RVQ token
听的表示连续 SSL 嵌入(不量化)离散 token(与说共用 Mimi)
双工机制双通道融合,逐层注入17 条并行流联合建模
「闭嘴」的形式显式 IRQ token,截断生成隐式,输出流坍缩为自然静音

两条路各有代价。LSLM 的局限论文自己列得很清楚:输入是文本,所以它还不是对话系统;打断后只会闭嘴,不会理解打断内容、不会附和、也没有 Moshi 那种重叠说话的能力;说话人跟踪(谁在打断我)和视听协同都留给了未来。它本质上回答的是机制问题,不是系统问题。

但正因为小,它的结论才干净:听觉通道逐层注入优于输入或输出融合;打断可以表示为词表里的一个 token;连续听觉特征在小模型上比离散化更稳;噪声鲁棒性必须靠训练数据里的对抗构造。这些结论不依赖 7B 参数和百万小时数据,谁都可以在自己的系统里验证——这也是它与 Moshi 并列为全双工开端的原因:一个证明了「能造出来」,一个讲清了「为什么能行」。

参考资料