小陈是录音棚里最有名的调音师。歌手们录完干音,总爱让他“再调调情绪”——“这一句再温柔一点点”“副歌要燃起来”。小陈的手在调音台上飞快地推动一个个推子,声音的温度随之改变。情感语音合成控制(Emotional Speech Synthesis Control)做的正是这件事:让 AI 在说出“今天天气不错”时,既能平静如水,也能欣喜若狂,还能带着哭腔、压着怒气。只不过,推子推的不是音量,而是模型隐空间里的情绪向量;用来参考的不是某位歌手的干音,而是一段参考音频。本文讲的三件事——细粒度情感强度控制、参考音频情感迁移、跨情感合成——就是这位“机器调音师”最核心的三板斧。
对 AI 从业者而言,掌握情感语音合成控制,意味着你能做出有温度、可操控的语音产品——从有声书角色配音到智能客服的安抚话术,这项技能是语音合成工程师从“能出声”走向“会表达”的必修课。
目录
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
情感强度控制 滑块调节情感强度0~1 波形幅度随强度变化 α: 0(平静)→1(强烈) 细粒度情感强度连续可调
情感强度控制:推子推多高
小陈最常被问的问题是:“小陈,你说这句是高兴还是不高兴?”他笑着回答:“情绪不是台上的开关,只有开和关;它是调音台上的推子,可以停在任何一个位置。”情感强度控制(Emotional Intensity Control)正是把这句话翻译给机器听。早期的情感语音合成把情感当作离散标签——“高兴”就是“高兴”,“难过”就是“难过”,像一个只有两档的开关。而进阶的做法,是把每种情感表示成隐空间中的一个向量,再用一个连续的系数 α 来调节“推子”的位置。
在情感合成的 Transformer 或 VITS 模型中,情感通常由一个情感编码器输出为向量 \(\mathbf{e}_{\text{target}}\),中性情感也有自己的向量 \(\mathbf{e}_{\text{neutral}}\)。合成时,模型并不直接使用目标情感向量,而是先做一次线性插值:以 α 为权重,把中性向量和目标向量按比例混合。α 等于 0 时是纯中性语气,α 等于 1 时是满格情感,α 取 0.3 就只是“带了点情绪的暗示”。这个 α 就是推子的高度。
不过,光有推子还不够。如果推子的行程太短,你很难在“温柔”和“极温柔”之间再做细分。工程师们会在训练时对 α 做随机采样,让模型见过各种强度的情感,这样推理时 α 就能取到任意精度的小数——0.37、0.62 都行。这就像给小陈的调音台换了一根行程更长、刻度更密的推子,让“再激动一点点”成为可能。
- 中性情感向量 \(\mathbf{e}_{\text{neutral}}\)这是模型对“没有明显情绪”的语音韵律、音色、语速特征的编码表示,相当于调音台上推子归零时的默认状态。
- 目标情感向量 \(\mathbf{e}_{\text{target}}\)这是从带标注情感的数据(如“开心”“愤怒”)中学习到的情感表示,相当于推子推到顶时饱满的嗓音状态。
- 加权线性插值用 \((1-\alpha)\) 和 \(\alpha\) 分别给两个向量加权再求和。\(\alpha\) 越大,合成结果越接近目标情感;\(\alpha\) 越小,越接近中性。这里对向量的每个维度都做了同样的混合操作。
- 取值范围约束\(\alpha \in [0,1]\) 保证合成的情感不会“推过头”。如果 α 超过 1,合成语音会出现音色失真、情感空洞等畸变,就像音量推子拉过头导致破音。
情感编码表征:给情绪画像
推子需要一把刻度,情绪需要一张画像。小陈每次调音前,都会先给歌手的嗓音做一份音色画像笔记——胸腔共鸣多不多、气声重不重、尾音抖不抖。情感编码表征做的就是这件事:用一个编码器把一段语音的“情绪长相”画成一张低维向量画像。画像画得好不好,直接决定了推子推下去的声音是否自然。
问题来了:同样一个人说“我没事”,平静地说和哽咽着说,音色是一样的,情绪却完全不同。这说明语音里藏着两股信息:说话人身份(音色)和情感状态(韵律、语调)。如果编码器把这两者搅在一起,我们调节情绪时音色也会跟着漂移,就像给小陈换了一副陌生的嗓子。为了让画像“只画情绪不画人”,研究者引入了解耦设计:说话人编码器负责记录音色,情感编码器只负责记录情感,两者互不干扰。
解耦训练的一种经典手段是对比学习(Contrastive Learning)。训练时,我们从同一句话的两个片段中提取情感向量,它们应该是相似的“正样本”;从不同情绪的话中提取的向量,应该是远离的“负样本”。模型要学的是:让正样本在向量空间里靠近,把负样本推开。这样得到的画像,就是一个“同情绪聚集、异情绪分离”的干净空间。
为了让画像更“干净”,工程师还会加上信息瓶颈:把情感向量的维度压得很低(比如 32 维或 64 维),迫使编码器只保留最重要的情绪信息,丢掉音色、房间混响等无关细节。这就像小陈的画像笔记只记关键参数,而不是把整个录音棚的声音环境都抄进去。
- 查询向量 \(\mathbf{q}\) 与正样本 \(\mathbf{k}^{+}\)\(\mathbf{q}\) 是当前片段的情感画像,\(\mathbf{k}^{+}\) 是同一情绪的另一片段画像。它们的相似度 \(\text{sim}(\mathbf{q}, \mathbf{k}^{+})\) 越高,说明画像越一致。
- 负样本集合 \(\mathbf{k}_i\)这是 K 个情绪不同的片段画像。分母把它们全部加起来,形成“干扰项”——模型必须从中排除干扰,突出正确的那个。
- 温度系数 \(\tau\)\(\tau\) 控制对比的“敏锐度”。\(\tau\) 越小,模型对相似度的差异越敏感,正负样本被分得越开;\(\tau\) 太大则会让所有样本挤在一起,难以区分。
- 负对数运算\(-\log(\cdot)\) 把概率值映射成损失。当正样本被正确识别(概率接近 1)时损失接近 0;认错时损失很大,驱动模型调参。
参考音频迁移:借一首歌的味道
有时候,歌手说不清自己想要什么感觉。小陈的办法是:“你给我听一首歌,我照这个味道给你调。”参考音频情感迁移(Reference Audio Emotion Transfer)干的就是这件事:你说不出“我想要 0.4 强度的怀念感”,但你给出一段参考音频——一段别人朗读的、带着淡淡怀念的录音——模型就能把这段音频里的情感“味道”抽出来,注入到新的合成语音中。
具体的做法是引入一个参考编码器(Reference Encoder)。参考音频先经过它,被编码成一组风格向量,再汇总为若干风格令牌(Style Token)。你可以把风格令牌理解成“味道胶囊”:一个胶囊装一点语调的上扬,一个胶囊装一点语速的放缓,还有一个装一点气声的浓度。解码器合成语音时,会通过注意力机制(Attention)决定每个时刻该服用哪些胶囊、各吃多少,从而让整句话都带上参考音频的情感味道。
为了让注入的情感真的“像参考音频”,训练时还会加一道相似度约束:把合成语音的情感向量与参考音频的情感向量拉近,让模型不敢跑偏。但这里有个坑——如果约束过强,模型可能把参考音频的音色也一并抄过来,导致合成的说话人“换嗓子”了。所以参考编码器同样要做解耦,只准提取情感,不准提取身份。这就是“借味道,不借嗓子”。
- 查询向量 \(\mathbf{Q}\) 与键向量 \(\mathbf{K}\)\(\mathbf{Q}\) 来自当前正在合成的文本状态,\(\mathbf{K}\) 来自参考音频的风格令牌序列。点积 \(\mathbf{Q}\mathbf{K}^{\top}\) 计算“当前这个字”与“参考音频每个令牌”的匹配程度。
- 缩放因子 \(\sqrt{d}\)当向量维度 \(d\) 较大时,点积数值会很大,导致 softmax 进入梯度饱和区。除以 \(\sqrt{d}\) 把数值拉回合理范围,让梯度流动更稳定。这就像调音前先校准音量表,防止数值爆表。
- Softmax 归一化对所有令牌的得分做归一化,得到权重分布 \(\alpha_i\)。注意力权重越高,说明该风格令牌对当前字的影响越大——合成“花”字时可能权重偏向语调上扬,合成“落”字时偏向语速放缓。
跨情感合成:灵魂换装
小陈遇到过一个刁钻需求:“我要同一个歌手,用同一把嗓子,前半段温柔地唱民谣,后半段嘶吼着唱摇滚。”这就是跨情感合成(Cross-Emotion Synthesis):保持说话人音色和文本内容不变,只把情感从一种换成另一种。它不是把两段音频拼接起来,而是在合成阶段直接换用另一套情感画像,同时确保声纹指纹完全一致。
难点在于,语音中音色与情感往往是纠缠的:一个人愤怒时,声带会不自觉地绷紧,音色跟着变。跨情感合成就要求模型把这股“纠缠”拆开。第一道工序是情感重映射:把源情感向量替换为目标情感向量,相当于给声音的灵魂换一件新的情感外衣;第二道工序是分布对齐,让目标情感在隐空间里的分布与真实的目标情感数据分布尽量一致,避免换装后“灵魂”看起来四不像。
跨情感合成对训练数据的要求也更高:需要同一个说话人在多种情感下的大规模语料,模型才能学会“音色不变、情感变”的映射关系。多情感训练时,模型会在每句话上随机抽取源情感和目标情感,强迫自己在隐空间里“搬运”情感向量,同时用说话人编码器死死守住音色不变。这就像给小陈请来了同一个歌手用不同情绪反复录同一首歌——练得多了,机器自然就懂得:灵魂可以换装,骨骼不能换。
- 两个分布 \(P\) 和 \(Q\)\(P\) 是真实目标情感数据的分布(比如大量真实的“愤怒”语音),\(Q\) 是模型合成的“愤怒”语音的分布。目标是让 \(Q\) 无限接近 \(P\)。
- 核函数 \(k(\cdot,\cdot)\)\(k(x,y)\) 计算两个样本在高维空间中的相似度(常用高斯核)。它相当于一把“情绪相似度标尺”,用来测量任意两条语音的情感贴得有多近。
- 三项期望组合第一项是 \(P\) 内部样本的相似度,第二项是 \(P\) 与 \(Q\) 的交叉相似度,第三项是 \(Q\) 内部样本的相似度。当 \(P\) 和 \(Q\) 完全相同时,第一项和第三项都等于第二项,整个式子等于 0。
核心模型结构:调音台的分轨逻辑
小陈的调音台之所以能同时处理人声、吉他、鼓点,是因为它采用分轨设计:每路信号走独立的通道,互不干扰,最后才混在一起。情感语音合成模型的内部结构也是这样一台分轨调音台。理解它的四个核心模块,你就理解了机器是怎么同时管住“说什么、怎么说、像谁在说”的。
第一个模块是编码器-解码器(Encoder-Decoder)框架。编码器把文本和情感条件压缩成隐表征,解码器把隐表征还原成语音波形。第二个模块是VAE 重参数化:隐变量不再是一个固定的点,而是一个带高斯噪声的分布。合成时从分布中采样,这样同一句话每次合成的语音都有自然的韵律波动,不会呆板。这里的“重参数化技巧”让采样过程变得可导,才能反向传播训练。
第三个模块是对抗训练(Adversarial Training)。一个判别器(Discriminator)负责分辨“这是真人录音还是机器合成”,生成器(即合成模型)负责骗过它。两者像调音师和制作人互相较劲:制作人越挑剔,调音师就得越细致,最终波形在听感上逼近真实录音。第四个模块是门控调节(Gating Mechanism),它就是调音台上的那排推子,决定情感信息在每个时刻该放行多少。
有了这四个模块的分工协作,情感强度 α 才能被精确地应用到每一个音素上:文本编码器决定说什么,VAE 决定韵律变化的自然度,对抗训练保证音质,门控调节决定每个时刻的情感浓度。调音台上的每路分轨各司其职,最终汇成一股有温度的声音。
- 拼接向量 \([\mathbf{h}_{t-1};\,\mathbf{e}_{\text{emo}}]\)将上一时刻的解码器隐状态 \(\mathbf{h}_{t-1}\) 与情感向量 \(\mathbf{e}_{\text{emo}}\) 首尾相接,形成一个大向量,让门控同时“看见”上下文和情感目标。
- 权重矩阵 \(\mathbf{W}\) 与偏置 \(\mathbf{b}\)线性变换 \(\mathbf{W}\cdot[\cdot] + \mathbf{b}\) 把这个大向量压缩成一个标量分数,相当于给推子位置打分。这个权重是训练中学出来的:哪些时刻该多放行情感,哪些时刻该收敛,都由它决定。
- Sigmoid 激活 \(\sigma\)把任意实数分数压到 \([0,1]\) 区间。输出 0 表示完全关上门(纯中性),输出 1 表示情感全开。这样就实现了逐字逐句的情感强度微调。
工程实践:从调音台到母带房
调音台调好了,还要进母带房做最后的打磨和打包。情感语音合成控制从实验室走向产品,同样要过四道关。第一道关是数据标注。情感标注天然带有主观性——你觉得“开心”的程度,别人可能觉得只是“平静”。工程上通常采用多人投票 + 连续值打分(如 1 到 5 分)的方式,把主观情绪变成相对客观的标签,同时记录 α 强度值作为训练目标。
第二道关是两阶段训练。直接端到端训练情感控制容易让模型顾此失彼——又要学音色,又要学情感,还要学对齐。稳妥的做法是:第一阶段先用大规模中性语音训练基础合成模型(把“嗓子”练好);第二阶段冻结部分参数,用带情感标注的数据微调情感编码器和门控模块(把“情绪”练好)。这就像小陈先让歌手把发声练扎实,再进录音棚谈感情。
第三道关是评估指标。最常用的是 MOS(Mean Opinion Score,平均意见分):让一批听者对合成语音的自然度、情感相似度、音色一致性打分(1 到 5 分),取平均。工程技术团队还会额外让情感分类模型对合成语音做预测,计算情感识别准确率,确保“机器认为它愤怒,人听着也愤怒”。
第四道关是部署推理。情感合成模型的推理延迟直接决定产品体验:有声书平台要求一句话合成延迟低于 200 毫秒。工程上常用 ONNX Runtime 做模型导出与量化,把 FP32 权重压缩到 FP16 或 INT8,再用批量推理(Batch Inference)一次合成多句话。模型体积从几百 MB 压到几十 MB,手机上也能跑得动。这就是把调音台从录音棚搬到用户口袋里的过程。
- 单个听者打分 \(s_i\)每位听者按 1-5 分对合成语音打分,5 分代表“和真人没区别”。为了避免主观偏差,通常至少请 20 位听者,且覆盖不同年龄段和听音设备。
- 平均操作 \(\frac{1}{N}\sum_{i=1}^{N}\)把所有打分相加除以人数。样本量越大,MOS 越稳定可信,不会因为某一个人偏好而跑偏。
AI 应用场景
有声书角色配音:让旁白“渐入情绪”
阶段:情感强度控制 + 推理部署
解决的问题:传统有声书配音需要人工逐句录制,且情绪转换不够细腻——旁白从平静到激动往往需要编辑手工拼接,成本高且不自然。利用细粒度情感强度控制,编辑只需在时间轴上拖动 α 曲线,AI 就能在几秒内让旁白情绪从 0.2 平滑过渡到 0.8。
具体案例:某头部有声书平台上线“AI 情感旁白”功能,编辑先选择基础音色,再用滑块绘制“情感强度曲线”:悬疑章节前半段平静,关键转折点强度拉满。合成后的音频情绪过渡自然,用户收听时长提升了 15%。
智能客服安抚话术:借一位温柔客服的声音
阶段:参考音频情感迁移
解决的问题:智能客服的机械应答在用户愤怒时容易火上浇油(用户问“我非常生气,你们怎么赔偿?”,机器人却用平稳语调回答)。使用参考音频情感迁移,企业可以先请一位资深客服录制一段标准的“安抚话术”音频,系统提取其中的关怀情感风格令牌,并迁移到机器人的合成语音中。
具体案例:某电信运营商在投诉场景中引入“共情模式”:用户情绪识别模型判断为愤怒时,客服机器人自动切换到从参考音频迁移而来的“温和关怀”音色,语速放慢、语调下沉。上线三个月后,投诉解决率提升 9%,用户满意度上升 12 个百分点。
游戏 NPC 情绪切换:同一个角色,会哭会笑
阶段:跨情感合成 + 门控调节
解决的问题:游戏 NPC 的语音往往由配音演员录制固定台词,无法根据剧情实时变换情绪。跨情感合成技术让 NPC 在战斗、解谜、对话三种状态中,使用同一套音色自然切换愤怒、专注、友好三种情绪,且每句台词都可以实时生成。
具体案例:一款开放世界 RPG 游戏引入情感语音合成引擎:服务器根据玩家当前任务状态动态选择情感向量,通过门控机制逐句控制情绪浓度。NPC 的语音在“被攻击时愤怒呵斥”与“完成任务时兴奋欢呼”之间无缝切换,玩家评价“角色真正活了起来”。
Python 演示
import numpy as np class EmotionControlEngine: def __init__(self, emotion_dim=64): self.emotion_dim = emotion_dim self.alpha = 0.6 self.ref_style = None self.style_tokens = { "neutral": self._random_vector(seed=0), "happy": self._random_vector(seed=1), "sad": self._random_vector(seed=2), "angry": self._random_vector(seed=3), } def _random_vector(self, seed): rng = np.random.RandomState(seed) vec = rng.randn(self.emotion_dim) return vec / (np.linalg.norm(vec) + 1e-8) def encode_reference(self, mel_spectrogram): mean = np.mean(mel_spectrogram, axis=1) return mean / (np.linalg.norm(mean) + 1e-8) def load_reference(self, mel_spectrogram): self.ref_style = self.encode_reference(mel_spectrogram) def set_strength(self, alpha): self.alpha = float(np.clip(alpha, 0.0, 1.0)) def get_target(self, emotion): if emotion == "ref": return self.ref_style if self.ref_style is not None else self.style_tokens["neutral"] return self.style_tokens[emotion] def interpolate(self, vec_a, vec_b, alpha): return (1 - alpha) * vec_a + alpha * vec_b def synthesize(self, text, emotion): neutral = self.style_tokens["neutral"] target = self.get_target(emotion) emotion_vec = self.interpolate(neutral, target, self.alpha) frames = max(8, int(10 * (0.5 + self.alpha * 3))) mel = np.tile(emotion_vec.reshape(-1, 1), (1, frames)).T return {"text": text, "emotion": emotion, "mel": mel, "alpha": self.alpha} if __name__ == "__main__": engine = EmotionControlEngine() engine.load_reference(np.random.randn(64, 80)) engine.set_strength(0.35) out1 = engine.synthesize("今天天气不错", "happy") engine.set_strength(0.85) out2 = engine.synthesize("今天天气不错", "ref") print("强度0.35 happy mel:", out1["mel"].shape, "alpha =", out1["alpha"]) print("强度0.85 ref mel:", out2["mel"].shape, "alpha =", out2["alpha"])
class EmotionControlEngine定义情感控制引擎,封装情感向量存储、强度调节和合成接口,对应生产系统中的“情感控制核心模块”。self.style_tokens字典存储各情感类型的基准向量,相当于调音台上的“预设情感档位”。_random_vector(seed)用固定随机种子生成单位长度的模拟情感向量,保证多次运行结果可复现。encode_reference(mel_spectrogram)对参考音频的 Mel 谱做均值池化并归一化,模拟参考编码器提取风格向量的过程。load_reference(mel_spectrogram)将参考音频的风格向量存入self.ref_style,供后续“参考情感迁移”使用。set_strength(alpha)设置情感强度,用np.clip将 α 限制在 [0,1] 区间,防止推子推过头。interpolate(vec_a, vec_b, alpha)实现公式 \((1-\alpha)\mathbf{a} + \alpha\mathbf{b}\) 的向量线性插值,是情感强度控制的核心运算。np.tile(emotion_vec.reshape(-1, 1), (1, frames)).T把情感向量复制成 Mel 频谱的帧数,模拟“情感向量驱动每一帧语音生成”的过程。engine.set_strength(0.35)演示细粒度强度控制:同一句话可以先用 0.35 的轻快感,再切换到 0.85 的强烈情感。
常见误区
误区我一直以为把音频音量调大,语音听起来就更“激动”,所以情感强度控制应该就是调音量推子。
正解情感强度是隐空间中的向量距离和加权系数 α,与声波振幅(音量)完全是两回事。一个人轻声颤抖着说“我没事”,音量虽小,悲伤强度却极高;一个人大声念通知,音量很大,情感依然中性。调节 α 改变的是韵律、语调、气声等情感表征,而非响度。
为何常见:因为“激动时说话声音大”这个日常经验太强了,让人误把声音的物理属性(响度)和情感属性(强度)混为一谈。
误区我做参考音频迁移时,特意找了一段和用户音色很像的参考音频,结果合成出来的声音变得不男不女,既不像参考也不像用户。
正解参考编码器本应只提取情感风格,不提取音色身份。如果参考音频和用户音色过于接近,模型会分不清“该抄情绪还是抄嗓子”,导致身份信息泄漏。正确的做法是:参考音频要多样化,覆盖不同音色,并在训练时用解耦损失和相似度约束强制编码器忽略音色,只关注韵律和语调。
为何常见:因为“参考”两个字的日常语义让人以为参考得越充分越好,忽略了情感迁移的目标是“借味道不借嗓子”。
误区我觉得把情感分成 100 个细类(比如“微喜”“欣喜”“狂喜”),模型就能合成更精确的情绪。
正解情感本身是连续维度(如效价 Valence 和唤醒度 Arousal),离散类别越多,标注一致性越差——10 个人对“微喜”和“欣喜”的边界判断几乎不可能一致。工程实践更推荐用连续强度值(如 α)加少量基础类别(4-8 种)来标注,再通过插值获得无限细粒度的情感。
为何常见:分类思维符合人对词汇的直觉,但忽视了情绪标注的主观性和连续本质,落入“词表越细越精确”的陷阱。
误区我想实现“一句话从平静变成开心”,就分别合成两句再拼接,中间加个淡入淡出效果。
正解拼接会破坏韵律连贯性和自然度,还可能在拼接点产生明显音色突变。跨情感合成需要在模型内部完成:同一个说话人向量贯穿始终,情感向量按 α 曲线逐帧插值替换,解码器平滑生成完整波形。本质上是在隐空间里渐变,而不是在声波上切分。
为何常见:因为音频编辑软件里淡入淡出是常态操作,人们容易把信号处理层面的拼接误当成生成模型层面的情感控制。
面试题
Q1. 情感强度控制中的 α 参数直接控制什么?
- A.混合情感向量的比例← 正确答案
- B.输出音频的采样率
- C.说话人的声纹特征
- D.文本内容的长度
答案:A。α 是情感向量线性插值的加权系数,控制中性情感与目标情感的混合比例,α=0 为纯中性,α=1 为满格情感。采样率、声纹和文本长度都与 α 无关。
Q2. 参考音频情感迁移中,参考编码器的主要作用是什么?
- A.提取参考音频的情感风格向量← 正确答案
- B.压缩音频文件节省存储
- C.提高语音合成的声音响度
- D.将文本转换为音素序列
答案:A。参考编码器把参考音频映射为情感风格向量(风格令牌),再通过注意力机制注入解码器。它不负责压缩文件、提升响度或文本转音素。
Q3. 情感编码中引入对比学习的主要目的是什么?
- A.使同情感样本靠近,异情感样本远离← 正确答案
- B.增大模型参数量以提升能力
- C.降低训练数据的采集成本
- D.加快合成时的推理速度
答案:A。对比学习通过拉近正样本(同情感)推开负样本(异情感),让情感编码器输出干净的“情绪画像”,是实现情感与身份解耦的关键手段。
Q4. 以下哪些属于实现细粒度情感强度控制的必要条件?
- A.情感标签附带连续强度值← 正确答案
- B.训练时对强度值随机采样增广← 正确答案
- C.模型只用离散情感类别训练
- D.合成器支持隐空间向量插值← 正确答案
答案:ABD。细粒度控制需要连续强度值标注、训练时随机采样增广让模型见过各种强度,以及推理时支持向量插值。只用离散类别训练无法产生 0.37 这样的细腻强度。
Q5. 参考音频迁移时,为什么参考编码器要做情感与身份解耦?
- A.防止模型抄袭参考音频的音色← 正确答案
- B.提高音频文件的压缩率
- C.减少训练所需的数据量
- D.让文本转音素更准确
答案:A。解耦确保模型只提取参考音频的情感风格,不把说话人音色一并抄过来,从而实现“借味道不借嗓子”。这与音质压缩、数据量和文本处理无关。
Q6. 跨情感合成需要满足哪些条件?
- A.保持说话人音色一致← 正确答案
- B.保留原文的语义内容← 正确答案
- C.强制改变文本用词
- D.目标情感分布与真实分布对齐← 正确答案
答案:ABD。跨情感合成要求在音色和文本语义不变的前提下,通过情感重映射和 MMD 分布对齐让输出呈现出目标情感,而不是改变文本内容。
Q7. 在 InfoNCE 损失函数中,负样本集合的作用是什么?
- A.提供对比,迫使模型识别正样本的独有特征← 正确答案
- B.增加模型训练时的计算开销
- C.降低正样本对模型的干扰
- D.替代正样本参与梯度更新
答案:A。负样本在分母中提供“干扰项”,模型必须从多个候选里认出真正的正样本,从而学到“同情感聚集”的表征。增加计算开销不是目的,而是代价。
Q8. MMD(最大均值差异)在跨情感合成中主要用于什么?
- A.度量合成情感分布与真实分布的距离← 正确答案
- B.提升合成语音的音量动态范围
- C.降低模型推理时的内存占用
- D.控制参考音频的编码维度
答案:A。MMD 用核函数比较两个分布:合成语音的情感分布与真实目标情感分布。MMD 值越小,说明“换装后的情绪”越接近真实情绪,这是跨情感合成的关键对齐手段。
Q9. VAE 重参数化技巧解决的核心问题是什么?
- A.让随机采样过程对梯度可导← 正确答案
- B.让生成语音的响度更均匀
- C.让编码器参数量更小
- D.让解码器输出固定长度
答案:A。直接从分布中采样是一个不可导操作,无法反向传播。重参数化技巧把“从分布采样”改写成“从标准噪声缩放平移”,使采样过程可导,模型得以端到端训练。
Q10. 关于情感门控机制与注意力机制,下列说法正确的有哪些?
- A.门控机制输出标量控制信息放行比例← 正确答案
- B.注意力机制是多个位置的加权汇总← 正确答案
- C.两者在数学上完全等价
- D.门控机制不计算跨位置的相似性← 正确答案
答案:ABD。门控用 Sigmoid 输出 0 到 1 的标量,控制当前时刻情感信息的放行强度,不涉及跨位置相似度计算;注意力则用 softmax 对所有候选位置加权求和。两者功能不同,只是常配合使用。