上一篇拆了 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):同时听与说。你打断它,它能立刻闭嘴让位。
今天的语音助手绝大多数停在半双工。不是模型不够聪明,而是自回归生成的数学形式就写死了:下一个 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
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 概率迅速抬升,一旦采到,生成立即终止。
论文的可视化实验证实了这条曲线:IRQ 概率平时贴着地板,打断开始后先小幅爬升(模型在「分辨这是人声还是噪声」),确认后陡然拉起直到被采样。打断检测不是外挂的 VAD 模块,是语言模型自己的一个 token 的概率——这个思路和 Moshi 把「让位」表示为静音 token 异曲同工:双工行为都被吸收进了词表与序列建模本身。
顺带一提训练配方里的对抗设计:除了 50% 概率插打断,还有 50% 概率往听觉通道混入 MUSAN 数据集的背景噪声——电话铃、爆炸声、白噪声、车流声。模型必须学会「人声才停,噪声不停」,否则会退化成听见任何动静都闭嘴的胆小鬼。
四、关键实验:「听」应该接在网络的哪一层
听觉特征拿到了,往说话主干的哪里灌?这是全文最有价值的消融。三个候选位置:
- 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:同一个月的两条路
把两篇放在一起看,几乎每个设计维度都选了相反的方向:
| 维度 | LSLM | Moshi |
|---|---|---|
| 定位 | 全双工机制研究(能被打断的 TTS) | 完整对话系统 |
| 规模 | 106M 主干 + 34M 编码器 | 7B 主干 + 深度 Transformer |
| 训练数据 | 585 小时 LibriTTS | 700 万小时音频 |
| 说话内容来源 | 外部给定文本 | 模型自己「想」(内心独白) |
| 说的表示 | 单码本 vq-wav2vec token | 8 码本 Mimi RVQ token |
| 听的表示 | 连续 SSL 嵌入(不量化) | 离散 token(与说共用 Mimi) |
| 双工机制 | 双通道融合,逐层注入 | 17 条并行流联合建模 |
| 「闭嘴」的形式 | 显式 IRQ token,截断生成 | 隐式,输出流坍缩为自然静音 |
两条路各有代价。LSLM 的局限论文自己列得很清楚:输入是文本,所以它还不是对话系统;打断后只会闭嘴,不会理解打断内容、不会附和、也没有 Moshi 那种重叠说话的能力;说话人跟踪(谁在打断我)和视听协同都留给了未来。它本质上回答的是机制问题,不是系统问题。
但正因为小,它的结论才干净:听觉通道逐层注入优于输入或输出融合;打断可以表示为词表里的一个 token;连续听觉特征在小模型上比离散化更稳;噪声鲁棒性必须靠训练数据里的对抗构造。这些结论不依赖 7B 参数和百万小时数据,谁都可以在自己的系统里验证——这也是它与 Moshi 并列为全双工开端的原因:一个证明了「能造出来」,一个讲清了「为什么能行」。
参考资料
- Language Model Can Listen While Speaking(arXiv:2408.02622,Ma et al., SJTU X-LANCE & ByteDance, 2024)
- LSLM 官方 Demo
- 相关论文:vq-wav2vec(听/说共用的语音表示)、VALL-E(被拒绝的 AR+NAR 路线)、SpeechGPT(半双工代表)
- 站内相关:深入拆解 Moshi、深入拆解 OmniFlatten、全双工语音对话系统三张地图、语音 tokenizer