论文题目:《SpeakerLM: End-to-End Versatile Speaker Diarization and Recognition with Multimodal Large Language Models》

论文地址:https://arxiv.org/pdf/2508.06372

咱们先通俗说下通义实验室这篇论文的核心目标:解决“说话人分割与识别(SDR)”任务,简单讲就是从音频里搞清楚“谁在什么时候说了什么”——比如会议转录、对话系统里都特别需要这功能。之前的方法总有各种坑,所以作者团队搞了个叫SpeakerLM的多模态大模型,主打端到端统一处理,还加了灵活的说话人注册机制,效果比之前的主流方法都好。


01、引言:为啥要搞SpeakerLM?

先说说传统SDR系统的问题——以前大家都用“级联架构”(SD+ASR),就是先做说话人分割(SD,搞清楚“谁何时说”),再做语音识别(ASR,搞清楚“说啥”),但这路子缺点太明显:
  • 误差传递:SD要是标错了说话人边界或标签,ASR跟着错,最后转录结果就乱了;
  • 处理重叠语音难:现实对话里经常有人抢话,但传统SD搞不定这个;
  • 没联合优化:SD和ASR分开训,用的数据集、框架都不一样,没法发挥两者的协同作用。
后来也有人想改进,比如“说话人归属ASR(SA-ASR)”,能联合训SD和ASR,但必须提前提取好说话人的embedding;还有人用大模型(LLM)做后处理,帮着修正SD+ASR的输出,但还是依赖前端的初始结果,没法根治误差传递。所以作者就想:能不能让LLM不只是“修修补补”,而是直接当核心,搞个端到端的统一模型?这就是SpeakerLM的由来。


02、相关工作:之前的方法差在哪?

这里先铺垫下背景,方便理解SpeakerLM的优势:
  1. 传统说话人分割(SD):一般要三步——语音活性检测(VAD,找有声音的片段)、提取说话人embedding、聚类分组。后来有人用“神经网络说话人活性检测”代替VAD(比如Pyannote、Diarizen),能更好处理重叠语音,但还是没和ASR结合好。
  2. SDR的三种架构(重点分析):

(a):SD+ASR级联,就是刚才说的“先分割再识别”,有误差传递、无联合优化的坑;
(b):SD+ASR+LLM,在级联后加LLM修正,但还是依赖前端输出,改不了上游的错;
(c):E2E-SDR(端到端),用一个模型统一做,SpeakerLM就属于这种,但之前的E2E模型(比如SA-ASR)没法处理“注册说话人不匹配”的情况(比如多注册了人、少注册了人)。
3. 多模态大模型(MLLM):之前的MLLM(比如MinMo、Qwen2-Audio)大多只处理单说话人,就算是Multi-Talker LLM(MT-LLM),也只能检测说话人什么时候换了,没法给转录内容标上“谁讲的”——所以SpeakerLM是第一个能完整做SDR的音频-文本MLLM。

03、SpeakerLM核心设计:创新点都在这!

这部分是重点,SpeakerLM的三个核心创新得讲透,还有它的模型架构和训练策略。
1. 模型架构:端到端的“音频-文本-说话人”融合

  1. 前端:用预训练的SenseVoice-large当“音频编码器”,把音频转成特征;再用一个两层Transformer+卷积的“音频projector”,把音频特征转到LLM能理解的空间里。
  2. 说话人注册模块:如果要注册说话人,先拿预训练的ERes2NetV2提取注册人的embedding,再用一个线性层projector转成LLM能接的格式;同时用文本tokenizer把注册人的名字、还有/标记转成token。
  3. backbone:用Qwen2.5-7B-Instruct这个LLM,还加了LoRA(低秩适配),既能保留LLM的语言理解能力,又能高效微调。
  4. 输出差异:图2里能看到——有注册时,输出是“Mike: hi…”;没注册时,就用“spk 0: hi…”这种匿名ID,特别灵活。
2. 灵活的说话人注册机制:应对各种现实场景
这是SpeakerLM的大亮点,解决了之前模型“注册不匹配”的问题,分三种情况(看图3):

  • (a)No-Regist(无注册):不提供任何说话人信息,输出用匿名ID(比如spk 0、spk 1),和传统级联系统一样,适合不知道说话人是谁的场景;
  • (b)Match-Regist(匹配注册):注册的说话人数量和音频里实际的一样多,模型要把内容正确对应到名字上(比如图里“Mike、Lucy、Jack”都注册了,输出就标对名字),适合已知参会人的场景(比如公司会议);
  • (c)Over-Regist(过量注册):注册的人比实际说话人多(比如注册了10人,但只有3人说话),模型要排除没说话的人,只给实际说话人标归属——这特别贴近现实,比如企业系统里注册了很多员工,但每次会议只有少数人参加。 公式里也明确了:No-Regist时注册人数Nrg=0,Match-Regist时Nrg=实际说话人数Ngt,Over-Regist时Nrg=Ngt+多余人数Nov(N_ov>0)。
3. 多阶段训练策略:从简单到复杂,逐步提升能力
作者没直接训,而是分了4个阶段,让模型循序渐进掌握SDR能力:
  1. Stage1:只训ASR,得到“SpeakerLM-ASR”。用60万小时ASR数据,加LoRA训LLM,不加载说话人相关模块——目的是先把“听清楚内容”的能力拉满,毕竟ASR准了,后续SDR才好做。
  2. Stage2:用模拟SDR数据训projector。冻结LLM和音频编码器,只训随机初始化的projector——模拟数据是把不同人的近场语音拼起来,加了噪音和混响(SNR 10-20dB),目的是让音频和文本特征先“粗对齐”,适应SDR任务。
  3. Stage3:用真实SDR数据训音频编码器+projector。冻结LLM,联合训前两个模块——真实数据更复杂(比如会议远场语音),这一步是让模型抓真实场景的声学特征。
  4. Stage4:联合训所有模块。给LLM加LoRA,一起训音频编码器、projector和LLM——最后一步整合语言(文本)和声学(音频)信息,搞定复杂多说话人场景。


04、实验准备:数据、设置都得讲清楚

实验做得很细致,先说说数据和评估方式,不然结果不好理解。
1. 数据构成:真实+模拟,覆盖各种场景
真实数据:

主要是中文数据集,用来训和测SDR:
  • 公开数据:AliMeeting(会议场景,训104.75h、测10h)、AISHELL4(会议场景,训107.5h、测12.72h)、AISHELL5(车内场景,测3.58h,有风声、轮胎声、空调声,特别难,用来测泛化性);
  • 内部数据:7426.7h训练、30.29h验证,是近场录音,用来提升模型数据量。
模拟数据:用AliMeeting、AISHELL2等的近场语音混出来的,5000h训练、5.6h测试(叫Simulation-Test),每段50秒,2-4个说话人,加了真实噪音和混响——用来做Stage2的训练数据。
2. 评估设置:怎么判断模型好不好?
核心指标(越低越好):
  • CER:只看ASR准不准,不管说话人(比如把“你好”写成“你郝”,CER就高);
  • cpCER:联合看ASR和SD,无注册时找“最优标签排列”(比如模型标spk0,实际是spk1,只要内容对、排列对就算对);
  • saCER:联合看ASR和SD,有注册时直接按名字对齐(比如模型把Mike的话标成Lucy,就算错);
  • ∆cp=cpCER-CER、∆sa=saCER-CER:反映“说话人归属误差”——比如CER很低但∆cp高,说明ASR准但说话人标错了,这俩指标不受ASR影响,更准。
基线模型(用来对比SpeakerLM):
  • SD+ASR:用Paraformer-large(ASR里的SOTA)当ASR,配4个SD工具(3D-Speaker、Pyannote3.1、Diarizen-base/large),共4个基线;
  • SD+ASR+LLM:用Diarizen-large+Para当前端,加LLM修正(ChatGPT4.5零样本、Qwen2.5-7B零样本、Qwen2.5-7B微调),共3个基线;
  • E2E-SDR:只有SpeakerLM自己。
3. 实现细节:训练参数得提一嘴
  • 音频都转成16kHz,片段长度40-50秒;
  • 注册说话人的embedding:取2-10秒语音片段,平均得到;Over-Regist时多余人数N_ov随机1-50个;
  • 优化器AdamW,学习率从1e-5 warm-up到5e-5,再余弦衰减;
  • 用4个NVIDIA A800 GPU,每个阶段训1M步,每10K步验证一次。


05、实验结果:SpeakerLM到底有多强?

分“无说话人注册”和“有说话人注册”两种情况说,还得分析图表里的关键信息。
1. 无说话人注册:数据越多,性能越炸

这是核心对比表,重点看SpeakerLM随数据量增长的表现:
  • 先看基线的问题:LLM零样本(ChatGPT4.5、Qwen2.5零样本)特别差,CER反而升高——因为LLM会“ hallucination(幻觉)”,明明让它只改说话人标签,它却改了内容;就算微调Qwen2.5,也只比最强的SD+ASR(Diarizen-large+Para)好一点。
  • SpeakerLM的“数据缩放能力”:
    • 数据少的时候(212.25h,只有公开数据):SpeakerLM不如大部分基线,cpCER和∆cp都高;
    • 数据多了(7638.95h,公开+内部数据):直接碾压所有基线!比如:
    • AliMeeting-Eval(域内):cpCER比Diarizen-large+Para低6.60%,∆cp只有2.08%(说明说话人标得很准);
    • AISHELL5-Eval(域外、难):cpCER低13.82%,∆cp才0.57%——这说明SpeakerLM泛化性超强,就算是车内噪音环境也hold住。
  • 为啥CER提升不多?因为内部数据是近场录音,对远场带混响的语音,ASR提升有限,但SD(说话人归属)能力提升巨大,这正是SDR需要的。

  • 趋势:在AliMeeting-Eval和Simulation-Test上,从Stage1到Stage4,cpCER和∆cp稳步下降,说明多阶段训练有效;
  • 小插曲:Stage2(模拟数据)在AISHELL4、AISHELL5上CER反而比Stage1高——因为模拟数据和这两个数据集“域不匹配”(模拟是简单拼的,真实是复杂场景);但Stage3、4用真实数据训完,性能就回来了,证明后两个阶段能解决域不匹配问题。
2. 有说话人注册:灵活应对各种注册情况

先对比SpeakerLM和SA-Transformer(之前的E2E模型),还有两种注册机制的差异:
  • 比SA-Transformer强太多:在AliMeeting-Eval上,SpeakerLM的saCER比SA-Transformer低25.98%——因为SA-Transformer只能处理“注册和实际完全匹配”的情况,而SpeakerLM能应对各种注册场景;
  • Match-Regist vs Over-Regist:两者的CER、cpCER差不多,但Over-Regist的∆sa更高(比如AliMeeting-Eval上,Match-Regist的∆sa=1.59%,Over-Regist=1.75%)——说明多余的注册信息会轻微影响说话人归属,但整体影响不大,模型能过滤冗余。
再看Over-Regist时,多余说话人数量对saCER的影响。

结论:不管多余1个还是50个,saCER基本没变化——证明SpeakerLM能稳定处理“注册人多、实际说话人少”的场景,特别实用。
最后看不同embedding提取器的影响:

  • 用ERes2NetV2比CAM++好:比如No-Regist时,ERes2NetV2的CER=13.97%、cpCER=16.05%,都比CAM++低——说明“说话人embedding质量”会影响SpeakerLM性能,好的embedding能让模型更准识别说话人。


06、结论:SpeakerLM的价值在哪?

总结下,这篇论文干了三件关键的事:
  1. 搞出第一个“端到端SDR的多模态大模型(SpeakerLM)”,不用拆SD和ASR,解决了级联系统的误差传递问题;
  2. 加了“灵活的说话人注册机制”,能应对无注册、匹配注册、过量注册三种场景,特别贴合现实需求;
  3. 用“多阶段训练”让模型从简单到复杂逐步学习,数据越多性能越强,在域内、域外(比如车内噪音)都比现有基线好。
简单说,SpeakerLM证明了多模态大模型在SDR任务上的潜力——既能听清楚内容,又能准确标对说话人,还能适应各种实际场景,后续在会议转录、智能客服这些领域应该能派上大用场。