跳转至

简历

Whisper

思想

Whisper 的核心思想可以概括为: 统一建模 + 大规模弱监督 + 多任务 token 控制.

  • 统一建模: 采用标准 Transformer Encoder-Decoder. 先把语音转成 log-Mel 频谱, Encoder 编码声学信息, Decoder 通过自回归生成文本, 并用 cross-attention 对齐音频表示.
  • 多任务一套模型: 不为每个任务单独训练模型, 而是通过特殊 token 控制任务行为, 比如 transcribe(转写), translate(翻译), 语言识别等, 本质是条件生成.
  • 数据驱动优先于结构堆料: Whisper 的提升路径不是一味加参数, 而是靠更大规模的数据和更稳的训练策略提升泛化能力.

版本演进的主线:

  • v1: 用大规模互联网弱监督语音文本对训练, 拿到强鲁棒性.
  • v2: 在参数规模基本不变下, 通过更长训练 + 正则化提升准确率和稳定性: SpecAugment在 Mel 频谱上做时间/频率遮挡与时间扰动, 增强噪声与语速变化鲁棒性; Stochastic Depth训练时随机跳层, 降低过拟合并稳定深层训练; BPE Dropout在分词 merge 时随机跳过部分合并, 让同一句话形成不同子词切分, 提升泛化(注: 发生在训练阶段的文本侧分词, 训练标签文本(转写/翻译结果)要先做 BPE, 变成 token id 给 decoder 学习).
  • v3: 进一步把训练数据量拉大, 并把 Mel bins 从 80 提到 128, 提升频域分辨率和多语言效果.

部署

uv pip install faster-whisper fastapi uvicorn python-multipart

app.py 示例:

from faster_whisper import WhisperModel
from fastapi import FastAPI, UploadFile, File
import tempfile

app = FastAPI()

model = WhisperModel(
    "tiny",
    device="cpu",
    compute_type="int8"
)

@app.post("/asr")
async def asr(file: UploadFile = File(...)):
    with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as f:
        f.write(await file.read())
        audio_path = f.name

    segments, info = model.transcribe(audio_path, vad_filter=True)
    text = "".join([seg.text for seg in segments])

    return {
        "language": info.language,
        "duration": info.duration,
        "text": text
    }

启动:

uvicorn app:app --host 0.0.0.0 --port 8000

语音文本对齐的最优传输正则化面试

Optimal Transport Regularization for Speech Text Alignment in Spoken Language Models.

介绍

这个项目是一个用于 Spoken Language Model 的训练增强方法, 叫 OTReg. 它不改主干模型, 而是在 speech encoder, adapter, LLM 这套标准框架上, 引入 optimal transport regularization, 去显式建模 speech embeddings 和 transcript embeddings 之间的对齐关系. 它的目标是缩小语音和文本的 modality gap, 避免模型过度依赖语速, 停顿这些非语义信息, 从而提升跨数据集泛化. 方法上它比较轻量, 不需要额外标注和新增参数, 并且通过两阶段训练把 alignment loss 稳定地接入现有 SLM 训练流程.

动机

现在一种实用的Spoken Language Model(SLM)构建方式, 是把预训练的speech encoder, adapter和LLM接起来. 这条路线已经在ASR和speech-to-text translation上取得了不错的效果. 但是, 为什么这些模型在训练域内表现不错, 但是一换数据集就开始明显掉性能?

这是一个泛化问题, 模型可能没有真正按照像文本那样的方式理解语音, 而是部分依赖了数据集里面的某些偶然的语音特征, 比如说话速度, 停顿模式, 录音条件之类的变化; 换句话说, 模型可能利用了speech embdding中的额外自由度, 学到了和linguistic content的关的东西, 从而产生了过拟合.

这是因为speech和text之间存在modality gap. speech embedding往往比transcript embedding要长很多, 因为语音具有高频率. 同时, 文本嵌入主要承载语言内容, 而语音嵌入除了语言内容, 还会带上停顿, 语速变化等副语言信息. 这意味着speech比text更加动态, 更加复杂, 也更容易让模型抓到"无关但是好用"的模式, 而不是只聚焦应该对齐的语义内容. 这就是unintended variation.

这种动机具体有两个挑战. 第一, 虽然拿到一段语音和他的transcript很容易, 但是要在两串异构embedding之间定义出有意义的点对点对应关系不容易; 第二, 即使动态地找到了这些对应关系, 还需要一个可微, 稳定, 鲁棒的损失函数, 才能反过来训练模型, 让speech embedding更加贴近transcript embedding; 但动态建立出来的对应关系通常会很噪, 而且在训练过程中不断变化.

CTC是常见的点对点对齐方案, 但是它依赖的是textual label作为目标, 而我们真正想要优化的是speech embedding在表示空间里面更加贴近transcript embedding这件事, 所以CTC和我们的目标并非完全一致. 另一方面, 已有OT方法虽然更加接近直接对齐embedding, 但是很多工作又额外施加了单调性, 局部性, 位置约束. 这在很多语音场景下未必合理, 因为真实的语音中有语速, 停顿, 静音等因素, 强行要求monotonic alignment反而限制了表达.

为啥monotonic alignment会限制表达

因为单调性, 局部性, 位置约束默认语音-文本对齐在时间轴上是规则的, 但是真实语音的时长伸缩, 停顿, 静音会让规则变得脆弱, 一旦约束没错, 就会把无关的时间结构硬注入对齐过程, 反而影响模型学习真正需要的语音对应.

遇到的难点

怎么处理transcript里面的重复token: 如果transcript里面有重复的模式, 例如banana和banan, 那么transcript embedding里面会出现语义非常接近, 甚至基于一样的目标点. 这样一来, 做optimal transportation的时候, 很多speech embedding很可能同样合理地分配到多个重复文本位置上, transport plan就会产生歧义和噪音, 导致对齐不稳定, 学到了一个模糊, 分散的对齐.

我们的解决方案是, 没有直接拿全部transcript embeddings做target, 而是先构造unique transript embeddings, 把语义上等价或者高度相似的重复embedding去掉, 再把这些去重后的目标拿来做OT对齐, 这样target集合更加干净, transport ambiguity更加小, 对齐更加稳定.

多模态融合方法

先记主线: 早-中-高-对-接-图 : 早期融合(拼接/加权/门控) : 中期融合(跨模态注意力/Transformer) : 高阶融合(双线性/张量) : 对比对齐(共享嵌入空间) : 接口式融合(视觉编码器 + LLM + 桥接模块) : 图结构融合(GNN, 场景图, 关系建模)

路线 核心思路 代表关键词 主要优点 主要局限
早期融合 低层直接合并特征 concat / 加权 / gating 简单稳, 并行友好 细粒度交互弱
中期融合 token 级显式交互 cross-attn / co-attn / 多模态 Transformer 对齐更细, 表达力强 计算量大(O(n^2))
高阶融合 显式建模模态乘性交互 bilinear / tensor / 低秩分解 高阶关系强 参数大, 训练难
对比对齐 先学共享语义空间 CLIP / ALIGN / 双塔 可扩展, 零样本强 推理与组合能力有限
接口式融合 强编码器 + 轻桥接 + 语言生成 Q-Former / Adapter / LLM 成本低, 产品化强 幻觉与一致性风险
图结构融合 用图建模对象与关系 GNN / Scene Graph 关系推理强 构图成本高, 流程复杂

SLM架构路线

什么是Optimal Transportation

OT是一种在两个分布之间寻找最小搬运成本匹配方式的方法. 他解决的问题是: 如何把质量从A分布搬到B分布, 使得总成本最小. 给定两个分布: \(a=(a_1, ..., a_T)\), \(b=(b_1, ..., b_N)\), 给定cost矩阵: \(C_{ij}=distance(x_i, y_j)\), OT求: \(\min_{\pi}\sum_{i, j}\pi_{ij}C_{ij}\), 其中, \(\pi_{ij}\)是transport plan. 在speech-text场景里面, 每个frame有质量, 每个token有质量, cost是embedding距离, OT会算出\(\pi_{ij}\)表示第\(i\)个frame有多少概率质量对齐到第\(j\)个token.

OT和contrasive的区别: contrasive拉近正样本, 推远负样本, 是pair-level. OT是全局匹配, 不需要负样本, 是distribution level, 允许many-to-many.

OT和attention的区别: Attention是先计算相似度\(QK^T\), 再按照行softmax, 没有列约束, 不解一个全局优化问题; OT也是基于pairwise相似度矩阵, 但是要求同时满足行列边缘分布. 假设有2个query(q1, q2)和两个key(k1, k2), 如果q1和q2都非常喜欢k1:

  • Attention: q1会给k1很高的权重; q2也会给k1很高的权重, 结果两个query都扎堆k1. 因为attention不限制k1总共能被分配多少
  • OT: 如果列边缘规定每个key总容量差不多, q1和q2不能都把质量塞给k1, 系统会全局协调, 把一部分质量分配k2.

SLM generalization gap的本质原因是啥

核心是 speech 与 text 表征分布不一致(modality gap): speech embedding 含大量与语言无关的变化(语速, 停顿, 能量, 说话人等), 模型在 in-domain 时容易学到"捷径特征"(spurious cues), 跨数据集这些 cues 失效就崩. 所以不是单纯 dataset bias, 而是__表示层面可被利用的多余自由度 + 训练目标缺少"对齐到 LLM embedding 空间"的直接约束共同导致.__

unintended variation在embedding space的几何结构是啥

可以理解为: speech embedding 在 LLM embedding space 中出现额外的自由方向, 形成: 离散内容(linguistic)方向 + 连续扰动(paralinguistic)方向叠加; 表现为: 同一 token/词语对应的 speech embeddings 方差大, 簇拉长, 类间边界模糊; 模型可能用这些"容易拟合但不可迁移"的方向来降低 CE loss(捷径), 而不是学到"像文本那样"的语义轨迹.

为什么说CTC supervision是indirect?

CTC 的 supervision 主要是对齐到 离散 label 序列(字符/子词), 它优化的是"预测 label 的概率", 而不是"speech embeddings 在 LLM 的 embedding metric space 上接近 transcript embeddings". 结果就是: 即使 CTC WER 不错, speech embedding 仍可能不在 LLM 的语义几何里——这就是"监督信号与最终目标(embedding-level alignment)之间有鸿沟".

为什么用uniform marginal?

uniform的含义是: 把source与target当作均匀质量分布, 每个speech embdding, 每个unique transcript enbedding都分到等量质量. 优点是简单, 无需额外超参/先验, 不需要token时长或者对齐标注. 减少了对于重复token的先验偏置. 分别对应OT的两个约束: \(\sum_{j}\gamma_{ij}=1/n_a, \sum_i \gamma_{ij}=1/n_g\).

为什么cost用1 - cosine?

\(f_i\)是第i个speech embedding, \(g_j\)是第\(j\)个unique transcript embedding, cost其实就是OT矩阵里面的一项, 表示第\(i\)个frame有多少的概率质量对齐到第\(j\)个token, 这里被定义为\(1=\cos(f_i, g_j)\). 为啥使用这个cosine, 是因为consine对scale不敏感, 适合不同模块输出的norm波动, 在高纬度embedding上比L2更加稳健. 在高维embedding上比L2更加稳健.

\(\epsilon\)太大/太小会怎样?

  • \(\epsilon\)很小: transport plan 变得尖锐, 接近 hard assignment, 容易受噪声影响, 训练早期不稳定;
  • \(\epsilon\)很大: plan 过于平滑, 接近平均分配, alignment 变弱, loss 约束变"软化", 对齐效果下降.
例子

假设:

  • 3 个 speech embeddings
  • 2 个 transcript tokens

可能 γ 是:

g1 g2
f1 0.33 0
f2 0.17 0.16
f3 0 0.33

每列加起来都是 0.5(满足边际)

但注意:

  • 每行是尖的(接近 one-hot)
  • 每个 speech frame 基本选一个 token

这叫 sharp alignment

γ 可能变成:

g1 g2
f1 0.16 0.17
f2 0.16 0.17
f3 0.18 0.16

仍然:

  • 每列总和 = 0.5
  • 边际不变

但现在:

每个 speech embedding 同时对齐多个 token

这叫 模糊对齐

为什么必须去重 transcript embedding?

因为 transcript 中重复模式会导致 OT 产生多解/歧义: 例如 "banana banana", 两个 token embedding 非常接近, OT 会把大量 speech mass 分散到多个重复目标上, plan 变得不稳定. 用 unique embeddings 相当于把目标变成"词表集合", 让 speech 只需对齐到"出现过的语义原型", 更稳.

OT不依赖temporal order, 会不会前半句对应到后半句

在这篇论文里, OT 是在做:

  • source: speech embeddings(语音特征)
  • target: unique transcript embeddings(文本特征)

OT 只根据 embedding 相似度 做匹配, 它不会看:

  • 这是第几个 token
  • 是不是时间上相邻
  • 是否单调递增

但是, 这篇论文的目标不是做严格 ASR alignment. 它的目标是: 减少 modality gap, 让 speech embedding 落在 transcript embedding 的语义空间里. 也就是说, 它不在乎: 这个语音帧是不是对应第 5 个 token, 或第 8 个 token. 它只在乎: 这个语音 embedding 看起来像不像某个正确的文本 token embedding.

unique阈值怎么选, 影响是什么?

在做OT对齐的时候, target用的是unique transcript embeddings, 这个unique是通过consine similarity阈值来判断的. 如果阈值很高, 很少embedding会被合并, unique token数量多, OT target更细, transport更严格, 对齐更加精细, 但是可能有更多的噪声, 更加敏感. 阈值低的话, 很多embedding被认为是等价, unique token少, OT target更加粗, 对齐更加宽松, 更加鲁棒, 但是语义可能会被过度合并.

\(L_{\text{cost}}\)\(L_{\text{spr}}\)各自优化的是什么?

  • L_cost: 让 transport 发生在高相似度对上(speech embedding 靠近 transcript embedding 集合). 让模型产生的optimal transport plan更加好.
  • L_spr: 让每个 speech embedding 的对齐分布更集中(趋向一对一), 减少"平均对齐/糊成一团".

去掉sparsity会怎么样?

transport plan 会更平滑(尤其在 entropy 正则下), 导致:

  • speech embedding 被"同时拉向多个 token 原型", 产生语义模糊;
  • alignment 变成"distribution matching"而不是"token-like anchoring", 对减少 modality gap 不如带 sparsity 明显. (如果alignment只是让speech embedding的整体分布接近transcript embedding的分布, 那本质上是一种global distribution-level alignment; token-like anchoring的意思是每个speech token都被锚定到某个具体的transcript embedding).

这篇文章推理/训练的流程是啥?

训练阶段

  1. 仅使用CE的监督微调:

    1. 输入: \( \text{Template}(E_P, F_S) \)
    2. 使用 LLM 进行自回归预测
    3. 计算 Cross-Entropy(CE)loss
    4. 仅更新 Adapter

    特点:

    • 不使用 OT
    • 不使用 Compression
    • 目标: 让 speech embedding 初步适配 LLM embedding 空间
  2. 引入OT Reg和Compression

    在 Stage 1 基础上继续训练, 每次迭代包括:

    1. 前向传播

      计算 speech embedding: \( F_S = \text{Adapter}(\text{SpeechEncoder}(X_S)) \)

    2. 计算OT对齐

      • Source: speech embedding \( F_S \)
      • Target: 去重后的 transcript embedding \( G_T \)
      • 使用 Sinkhorn 算法求解 entropic OT, 得到最优 transport plan \( \hat{\gamma} \)
    3. 计算OT正则化损失: \( L_{OT} = L_{cost} + \lambda_{spr} L_{spr} \)

      作用:

      • 拉近 speech embedding 与 transcript embedding
      • 促进稀疏的一对一对齐
      • 减少 modality gap
    4. OT-based Compression: \( K_S = \text{OTCompression}(F_S) \)

      包括:

      • 合并相邻高相似 embedding
      • 删除与 pad embedding 相似的无信息帧

      目的: 去除冗余, 使 speech 表示更接近 text-like 结构

    5. 计算CE损失: \( L_{CE} = \text{CE}(\hat{Y}, Y) \)

    6. 总损失: \( L_{total} = L_{CE} + \lambda_{OT} L_{OT} \)

推理阶段

推理阶段:

  • 没有 transcript
  • 不计算 OT plan
  • 不计算 OT loss

流程如下:

  1. Speech → Encoder → Adapter → \( F_S \)
  2. 应用 OT-based Compression → \( K_S \)
  3. 输入 \( \text{Template}(E_P, K_S) \) 到 LLM
  4. 自回归生成文本

OT-based compression 为什么可微? 梯度怎么走?

因为使用的是熵正则OT++Sinkhorn算法, 这个算法的输出(transport plan)是输入(cost matrix)的连续可微函数. 所以梯度能从loss -> \(\hat{\gamma}\) -> 相似度矩阵 \(C\) -> speech embedding反传. compression的merge/drop实现为软门控/soft mask就同样可微.

OT-based compression是如何实现的?

  1. Merge Step: 把序列\([f_0, f_1, ..., f_5, ...]\)分为\((f_0, f_1), (f_2, f_3), (f_4, f_5), ...\), 然后计算相似度: \(\cos(f_{2k}, f_{2k+1})\), 如果similarity > threshold, 那么认为, 这两个embedding的语义是一样的. 如何 merge? 最自然的可微实现方式是\(f_{\text{merged}} = \frac{f_{2k} + f_{2k+1}}{2}\). 为什么只merge adjacent pairs? 为了防止过度压缩, 例如hheelllloo, 如果不是merge adjacent pairs, 可能会变为helo, 丢失了太多的重复信息.
  2. Drop Step: 因为在unique transcript embedding里面, 我们定义了一个pad token, 表示无信息, 我们可以drop掉那些与pad embedding相似度很高的speech embedding. 具体实现是: 计算\(\cos(f_i, g_{\text{pad}})\), 如果 similarity > threshold, 那么这个frame就被认为是无信息的, 可以被drop. 但是, 为了保持可微, 我们不是真的把它丢掉, 而是给它一个soft mask.

用 pad embedding 判断 non-informative 合理吗?

训练里把 pad 当成"blank/非信息"锚点(augmented transcript 也包含 pad), OTReg 会把 静音/停顿的 speech embedding 拉近 pad embedding, 所以推理时"像 pad 的就 drop"在机制上自洽 ✅. 风险是 pad 在某些 LLM 里可能带点偏置会误删, 但用阈值控制, 删多了 CE 会把它纠回来.

为什么OTReg不在stage1用?

OTReg 依赖"cosine 相似度矩阵"来算 transport plan, 但 Stage 1 的 adapter 输出还没被训练到 LLM embedding 的同一语义空间, 所以此时算出来的 cosine 相似度基本是乱的 → Sinkhorn/OT 会得到噪声 transport plan → 反传的梯度也是错的, 训练容易不稳定/震荡 😵‍💫.

CE和OT会conflict嘛?

CE 和 OTReg 目标不完全一样, 局部可能"拉扯", 但整体是互补的. CE(交叉熵)管的是最终任务: 让模型输出的 token 序列/转写结果正确(直接决定 WER). OTReg更像是结构化对齐/表示约束: 让 speech 内部表示在分布上更接近对应文本表示(更"像文本那样组织"), 有助于减少 modality gap, 提升泛化. 当 OT 权重大, 可能损伤纯 WER; 当 OT 太小, generalization 改善有限. 你通过 λOT sweep 找到 sweet spot.

在文章里面, \(\lambda_{OT}\)设置为\(0.3\).

为什么 Base+CTC cross-domain 反而变差?

CTC 的 classifier 参数大, 容易过拟合. 而且 CTC 对齐的是 label, 不保证 embedding-level 对齐到 LLM; 所以可能学到"CTC 好用的对齐捷径", 但对跨域的 speech variability 仍敏感, 导致泛化下降或收益不稳定.

Fig.4 距离下降说明什么? 会不会只是 norm 变小?

你画的是 speech embeddings 与 transcript embeddings 的 pairwise distance/相似度结构, OTReg 后结构更清晰, 并且非信息段更集中对应到 pad. 同时你用 cosine cost, 本质上对 norm 不敏感, 所以很难用"norm 变小"解释整体结构改善.

为什么 multilingual 下 OTReg 提升更明显?

跨语言/跨数据集时 speech variability 更大, domain shift 更明显. OTReg 提供了"语言无关"的表示约束: 把 speech embedding 拉向 LLM 的 token 语义几何(而不是依赖某数据集的声学风格). 因此越是 shift 大的 setting, 收益越明显.

speech 长 >> transcript 长, 会不会违背 monotonic?

你没有显式追求 monotonic, 对齐目标是"语义集合对齐"而非"严格时间对齐". speech 长带来的冗余通过:

  • OT sparsity 让每个 speech embedding 选一个语义原型;
  • OT-based compression merge/drop 去冗余; 从而把多帧映射到更"token-like"的序列/集合.

OT 复杂度是多少? 长语音怎么办?

na×ng 的 cost matrix 构建是 O(na·ng), Sinkhorn 是迭代缩放, 整体开销与迭代次数线性相关. 每次迭代都要对整个的矩阵\(n_a\times n_g\)做缩放/归一化(行列边缘约束), 所以总开销大致: \(O(T\times n_a n_g)\).

我们的目的是将\(n_a\)或者\(n_g\)的长度压下去:

  • 降低\(n_a\): 比如你提到 adapter 里k=5(等价于把时间长度缩短约 5 倍)这会把 OT 的成本几乎按比例降下来
  • 降低\(n_g\): 通过 unique transcript embedding, 把重复的 token 合并成一个原型, 从而降低目标长度.

OT 能看作 soft CTC 吗?

可以作为一种直觉类比: 两者都在无显式对齐下建立"软对齐". 但差别关键在:

  • CTC 在 label space 做路径求和;
  • OT 在 embedding metric space 做全局运输; OTReg 的监督目标更接近"让 speech embeddings 贴近 LLM transcript embeddings", 而不是贴近离散 label classifier.

换成 Wasserstein-2 直接优化分布距离会怎样?

W2 强调几何结构与平方距离, 但你这里 cost 用 cosine 更贴近语义相似. 此外你需要的是可微且稳定的 plan(用于构造正则项与压缩), entropy-regularized OT + Sinkhorn 是工程上更合适的选择. W2 也可行, 但可能需要重新设计 cost/正则与实现细节(以及处理高维 embedding 的数值稳定).

方法能否用于 speech-to-speech / speech-to-vision / grounding?

可以迁移的部分是 "用 OT 在两模态 embedding 集合之间做软匹配, 并把 plan 变成训练正则".

前提是: 目标模态要有稳定的 embedding 表示(如 text token embeddings, vision token embeddings). speech-to-speech 需要定义"目标语音嵌入的语义原型", 否则会对齐到声学风格而不是语义.

能否做 token-level / multi-layer / hierarchical OT?

  • token-level: 更细粒度, 但更噪;
  • multi-layer: 对齐不同层的抽象语义(浅层更声学, 深层更语义);
  • hierarchical: 先粗对齐(句级/词级), 再细对齐(token/帧).

这也是未来工作方向: 在不引入标注的前提下增强结构性.

transcript 有错误怎么办? OT 会被误导吗?

会有风险, 因为 target 原型错了会把 speech embeddings 拉向错误 token manifold. 但你训练还有 CE loss(ASR 输出)作为主目标, OT 是正则项而不是唯一监督; 因此错误 transcript 的影响会被部分抵消.

情感对话的双信息语音语言模型面试

Dual Information Speech Language Models for Emotional Conversations. 把语音里的"内容"和"情绪/语气"分开表示, 再一起交给 LLM 做情感对话理解与生成.

我主导设计并实现了Equivalence Replacement Regularization (ERR)的训练机制, 并系统性的验证其在避免adapter退化为task-specific vector中的作用(消融实验技术验证).

论文目标是把speech disentangle分成两部分, EC和EA, 分别是linguistic embedding, 一个是paralinguistic embedding. 然后分三类任务:

任务类型 主要依赖 "另一种信息"是什么
Linguistic task(ASR) EC EA
Paralinguistic task(emotion/gender) EA EC
Dual task 两者都用
ERR例子

目标: 输出 transcript

主要依赖: 语义内容(EC)

👉 那"另一种信息"就是 paralinguistic embedding(EA)

所以 ERR 做的事情是:

ASR 任务中:
随机替换 EA 的来源

因为 transcript 不应该依赖情绪, 音调.

如果 ASR 结果会因为 EA 来源不同而变化, 说明:

模型偷偷用了不该用的信息.

目标: 输出情绪标签

主要依赖: EA

👉 那"另一种信息"就是 linguistic embedding(EC)

ERR 会:

emotion task 中:
随机替换 EC 的来源

因为情绪识别不应该依赖具体语义内容.

ERR架构

例如, 在linguistic task中, \(f(E_C, E_A^{\text{speech}}) \approx f(E_C, E_A^{\text{text}}) \approx f(E_C, \text{None})\).

Speech Caption和Speech Transcript的区别

Speech Transcript Speech Caption
描述什么 说了什么 怎么说的
信息类型 Linguistic Paralinguistic
例子(对应同一段语音) I can't believe this. The speaker sounds angry and speaks quickly with high pitch.

为什么要random sampling?

防止模型记住固定组合模式, 迫使adapter encode真正的信息. 如果不随机, 模型会学shortcut.

为什么在训练EC的时候不能干脆不妨EA?

在linguistic task中, 如果完全移除 EA, 模型不会学习在存在 EA 的情况下保持不依赖它, 这会在后续 joint 使用时产生分布偏移. ERR 的目的是在组合输入条件下显式约束模型对非主信息不敏感, 从而保证模块的可组合性.

ERP是如何避免adapter的输出退化为task-specific vector的?

在双 adapter 结构中, 若不加 ERP, 非主 adapter 很容易在单任务训练中退化为任务 ID. ERP 通过随机替换非主 embedding 来源, 使其在同一任务下分布不稳定, 从而无法编码任务 prior, 迫使两个 adapter 各自表示真实的输入信息.

为什么不直接加正交约束

speech embedding的语义空间本来就是inherently entangled, 强行orthogonal肯能会损伤useful correlation, 我们选择behaviour-level constraint而不是representation-level constraint.

为什么stage2不joint train两个adapter?

因为我们需要freeze其中的一个adapter, 才能enforce single-source reliance. 否则, 两个adapter会互相泄露信息, 无法distangle.

如果没有ERR会发生什么?

我们观察到adapter生成高度相似embedding, 不随输入变化.

ERR和Dropout的区别是啥?

dropout是噪声正则, ERR是条件不变性约束.

ERR能完全保证disentangle吗?

不能, 他只能保证功能层面的disentanglement, 不是严格的representation orthogonality.

如果speech caption和真实speech embedding的分布差很大怎么办?

\(E_A^{\text{test}}\)表示从文本caption构造出来的paralinguistic embedding, \(E_A^{\text{speech}}\)表示从真实语音encoder得到的paralinguistic embedding, 如果这两者的分布不匹配, 那么模型很容易会学习到一个捷径. 先判断embedding来源是speech还是text, 然后直接对某个来源忽略或者特殊处理, 结果就是, 训练的时候看起来loss能降低, 但是模型没有真正学习到情绪等paralinguistic信息, 而是学习到了source classifier.

为啥在训练para linguistic adapter的时候, ERR里面不含有caption, 而是含有transcript?

训练 paralinguistic adapter 时, 需要一个语言内容辅助通道; 作者希望语言内容作为外部补充存在, 从而减少 para adapter 自己编码 linguistic content 的动机. 这个角色由 transcript-derived linguistic embedding 承担, 而不是由 caption 承担

如果sampling不均匀会怎样?

模型会学习到偏置, 某种embedding source会成为shortcut, invariance被破坏.

专利面试准备

整体pipeline是啥?

我们的方法核心是将说话人视频从像素空间解耦为结构化的动作空间, 提取眼睛动作, 头部姿态和表情变化等连续细粒度特征, 实现多粒度可控建模; 随后在连续特征空间中通过可逆层进行无损维度对齐, 使动作特征映射到语言模型的隐空间维度, 在此对齐空间上分别使用 VQ-VAE 进行离散化编码, 得到各动作的离散行为 token; 接着将动作 token 的 embedding, 语音 token 以及提示词共同输入多模态 LLM, 建模说话人与聆听人之间的条件反应分布, 生成聆听人的动作 token 序列; 最后通过新增的 video head 将 LLM 输出映射回视频特征空间, 经逆 VQ 与逆可逆变换恢复为连续的眼睛, 头部和表情特征, 并通过 PD-FGC 解码器进行身份融合与渲染, 重建为最终的数字人聆听视频.

为什么整体视频离散化不够好?

原因有:

聆听行为是多因素叠加的, 眼睛, 头部姿态, 表情, 语音, 如果统一VQ, codebook必须同时编码所有因素, 不同因素之间产生统计耦合, 很容易学到场景特定pattern. 整体token无法单独控制: 只动眼神, 只改head nod, 只改微笑幅度, 模型只能整体替换. 但是聆听是subtle的, 局部的.

我们可以通过unified vs disentangled的abaltion study来验证FID是否降低, diversity是否提升, controllability是否增强, token mutual information是否降低.

为什么不能直接使用continuous embedding?

因为continuous embedding分布漂移严重, LLM不擅长连续空间, 对长序列非常不稳定, 无法做自回归生成. 对于LLM, 离散token可以统一建模凡式(像text token), 可以做AR建模, 可以用cross-attention, 可以做token-level alignment.

为什么要用可逆层, 直接用线性投影不行吗?

因为我们不仅要编码进LLM, 还要再解码回原动作空间. 如果是普通线性投影, 映射不可逆, 可逆层保证维度对齐的同时可精确回溯.

LLM是如何融合三种模态的? 是拼接还是cross-attention?

我们采用对齐投影 + 特征拼接作为统一输入. LLM通过自注意力机制自动建模跨模态关系. 相比额外设计cross-attention模块, 我们保持结构轻量化.

为什么新增video head? 而不是微调整个LLM?

保持LLM结构冻结, 可以复用预训练能力. video head专门负责从隐空间映射回动作空间. 这样实现模块化解耦, 提升泛化能力.