Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
A
AML-Notes
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
wangchenglong
AML-Notes
Commits
50775350
Commit
50775350
authored
Jul 23, 2026
by
陈丹
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新 ch5_multimodal.tex
parent
d5cc709e
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
911 行增加
和
13 行删除
+911
-13
chapters/ch5_multimodal.tex
+911
-13
没有找到文件。
chapters/ch5_multimodal.tex
查看文件 @
50775350
...
@@ -151,8 +151,34 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
...
@@ -151,8 +151,34 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
无论输入是原始波形还是梅尔频谱,语音编码器的目标都是把每一帧或一小段连续信号映射为一个高维向量,从而得到按时间排列的
\keyword
{
声学 token
}
序列。这里的声学 token 通常是连续向量,并不一定对应一个完整的音节、词或字符;其语义粒度往往比文本 token 更细,还会保留部分说话人、情绪和韵律信息。与图像中“图块
$
\rightarrow
$
视觉 token”的过程类似,语音也可视为“时间帧
$
\rightarrow
$
声学 token”的过程;区别在于,图像主要在二维空间上展开,而语音沿一维时间轴展开,前后 token 的顺序具有更强的因果性和动态性。同一句话在不同语速下持续时间不同,因此语音 token 序列通常也比对应文本 token 序列长得多。
无论输入是原始波形还是梅尔频谱,语音编码器的目标都是把每一帧或一小段连续信号映射为一个高维向量,从而得到按时间排列的
\keyword
{
声学 token
}
序列。这里的声学 token 通常是连续向量,并不一定对应一个完整的音节、词或字符;其语义粒度往往比文本 token 更细,还会保留部分说话人、情绪和韵律信息。与图像中“图块
$
\rightarrow
$
视觉 token”的过程类似,语音也可视为“时间帧
$
\rightarrow
$
声学 token”的过程;区别在于,图像主要在二维空间上展开,而语音沿一维时间轴展开,前后 token 的顺序具有更强的因果性和动态性。同一句话在不同语速下持续时间不同,因此语音 token 序列通常也比对应文本 token 序列长得多。
早期语音系统通常依赖人工设计的声学特征,如梅尔频率倒谱系数(MFCC),再结合隐马尔可夫模型或循环神经网络进行建模。近年来,端到端语音编码器逐渐直接从波形或梅尔频谱中学习表示。例如,wav2vec~2.0
\cite
{
wav2vec2
}
通过自监督学习从原始波形中提取上下文相关的语音表示;HuBERT
\cite
{
hubert
}
和WavLM
\cite
{
wavlm
}
进一步提高了表示对语音内容、说话人和噪声变化的鲁棒性;Whisper
\cite
{
whisper
}
则以梅尔频谱为输入,通过大规模弱监督训练获得了较强的跨语言语音识别能力。另一类语音编解码模型,如 EnCodec
\cite
{
encodec
}
,会把连续语音压缩为离散的声学编码单元,常用于语音生成与语音大模型。无论具体结构如何,这些方法的共同目标都是:将原始、连续且冗余的声学信号转化为更紧凑、更适合后续模型处理的 token 表示。
\begin{figure}
[t]
\centering
\begin{tikzpicture}
[
font=
\small
,
>=Latex,
node distance=8mm and 10mm,
box/.style=
{
draw,
rounded corners=2pt,
minimum height=8mm,
minimum width=20mm,
align=center,
inner sep=3pt
}
]
\node
[box]
(wave)
{
原始波形
}
;
\node
[box, right=of wave]
(frame)
{
分帧
}
;
\node
[box, right=of frame]
(stft)
{
STFT
}
;
\node
[box, right=of stft]
(spec)
{
频谱图
}
;
\draw
[->, thick]
(wave) -- (frame);
\draw
[->, thick]
(frame) -- (stft);
\draw
[->, thick]
(stft) -- (spec);
\end{tikzpicture}
\label
{
fig:wave-to-spec-simple
}
\end{figure}
\paragraph
{
文本表示:分词、词表与词嵌入。
}
文本的表示相对直接,其流程如图~
\ref
{
fig:text-repr
}
所示:先把一段文字切分为基本单元(词或子词),称为
\keyword
{
分词
}
;每个单元在
\keyword
{
词表
}
中对应一个编号;再通过一张可学习的
\keyword
{
词嵌入
}
(word embedding)表,把编号映射为向量。于是一句话最终成为一串词向量,与图像的视觉 token、语音的声学 token 在形式上一致。
\paragraph
{
文本表示:分词、词表与词嵌入。
}
文本的表示相对直接,其流程如图~
\ref
{
fig:text-repr
}
所示:先把一段文字切分为基本单元(词或子词),称为
\keyword
{
分词
}
;每个单元在
\keyword
{
词表
}
中对应一个编号;再通过一张可学习的
\keyword
{
词嵌入
}
(word embedding)表,把编号映射为向量。于是一句话最终成为一串词向量,与图像的视觉 token、语音的声学 token 在形式上一致。
...
@@ -194,7 +220,13 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
...
@@ -194,7 +220,13 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
\paragraph
{
对比学习。
}
对同一对象施加两种不同的随机变换(如对图像做不同的裁剪与颜色扰动),得到的两个视图视为同一语义,称为
\keyword
{
正样本对
}
,要求其表示接近;来自不同对象的视图为
\keyword
{
负样本对
}
,要求其表示远离。其训练目标使正样本对的相似度高于负样本对,从而学到对无关变化(如位置、颜色)较不敏感、对语义较敏感的表示。代表工作包括 SimCLR
\cite
{
simclr
}
与 MoCo
\cite
{
moco
}
;此外 DINO
\cite
{
dino
}
等自蒸馏方法也取得了较好效果。下一小节的跨模态对齐,可视为对比学习思想从“不同视图”到“不同模态”的推广。
\paragraph
{
对比学习。
}
对同一对象施加两种不同的随机变换(如对图像做不同的裁剪与颜色扰动),得到的两个视图视为同一语义,称为
\keyword
{
正样本对
}
,要求其表示接近;来自不同对象的视图为
\keyword
{
负样本对
}
,要求其表示远离。其训练目标使正样本对的相似度高于负样本对,从而学到对无关变化(如位置、颜色)较不敏感、对语义较敏感的表示。代表工作包括 SimCLR
\cite
{
simclr
}
与 MoCo
\cite
{
moco
}
;此外 DINO
\cite
{
dino
}
等自蒸馏方法也取得了较好效果。下一小节的跨模态对齐,可视为对比学习思想从“不同视图”到“不同模态”的推广。
\paragraph
{
语音的自监督。
}
\paragraph
{
语音的自监督。
}
\todochen
{
介绍语音的自监督训练目标,如掩码式声学预测、对比式预测、以及把语音离散为声学单元后再预测等;说明其作用是从大规模无标注语音学到通用表示,并与上文图像的“掩码重建 / 对比学习”两类目标对照,简要点出代表工作。
}
语音的自监督学习同样从数据自身构造预测目标,但由于语音是连续且具有强时间相关性的信号,其训练任务通常沿时间轴展开。具体而言,模型可以随机遮挡一段连续的语音帧或声学 token,再利用前后未被遮挡的上下文预测其中的信息。这与图像中的掩码重建相似,但语音中相邻采样点和相邻帧之间具有较强冗余,因此模型通常不直接逐点恢复原始波形,而是预测更稳定的潜在表示或离散声学单元。
一类典型方法采用
\keyword
{
对比式预测
}
。早期的对比预测编码(contrastive predictive coding, CPC)利用当前上下文预测未来时刻的潜在表示,并要求真实的未来表示与上下文更加接近、随机采样的干扰表示与上下文更加远离
\cite
{
cpc
}
。wav2vec~2.0
\cite
{
wav2vec2
}
进一步首先使用卷积编码器将原始波形转换为连续声学表示,在其中遮挡若干连续时间片段,再由 Transformer 根据上下文恢复被遮挡位置的信息。其预测目标由量化模块产生,模型需要从一个真实目标和多个干扰目标中识别出与当前位置对应的表示。因此,wav2vec~2.0同时结合了掩码建模、表示离散化与对比学习。
另一类方法先将连续语音转换为
\keyword
{
离散声学单元
}
,再进行类似文本掩码语言建模的预测。以 HuBERT
\cite
{
hubert
}
为例,它首先对梅尔倒谱系数或已有模型的中间表示进行聚类,将每一帧映射为一个离散的聚类编号,并将这些编号作为无需人工标注的伪标签。预训练时,模型遮挡连续的语音片段,并根据未遮挡的上下文预测被遮挡位置所属的聚类。由于模型不需要准确重建每个声学细节,而只需判断其对应的声学单元,它能够逐渐学习音素结构及更长范围的语言上下文。HuBERT还可以使用上一轮模型产生的表示重新聚类,通过迭代训练获得更稳定的预测目标。
除了离散单元,也可以直接预测
\keyword
{
连续潜在表示
}
。例如,data2vec
\cite
{
data2vec
}
采用教师--学生结构:教师模型接收完整语音并产生上下文化表示,学生模型只接收经过遮挡的语音,再预测教师模型在相应位置产生的表示。这种方法不依赖显式的负样本或离散码本,可视为对被遮挡内容进行特征层面的重建。
% ----------------------------------------------------------
% ----------------------------------------------------------
\subsection
{
跨模态对齐
}
\subsection
{
跨模态对齐
}
...
@@ -239,7 +271,81 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
...
@@ -239,7 +271,81 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
经过对齐,文本与图像被纳入同一向量空间,于是“用文字检索图像”“判断图文是否相符”等任务,大体可归结为在该空间中计算相似度。更重要的是,对齐后的文本表示常被用作图像生成的
\emph
{
条件
}
——
\ref
{
sec:generation
}
的文本生成图像,往往依赖这种图文对应关系,使文本描述能够引导图像的生成方向。
经过对齐,文本与图像被纳入同一向量空间,于是“用文字检索图像”“判断图文是否相符”等任务,大体可归结为在该空间中计算相似度。更重要的是,对齐后的文本表示常被用作图像生成的
\emph
{
条件
}
——
\ref
{
sec:generation
}
的文本生成图像,往往依赖这种图文对应关系,使文本描述能够引导图像的生成方向。
\paragraph
{
语音、音频的对齐。
}
\paragraph
{
语音、音频的对齐。
}
\todochen
{
说明语音—文本对齐(可用语音转写、翻译等配对数据)与音频—文本对齐(用“声音事件+文字描述”的配对数据,如 CLAP 一类工作)。强调其与图文对齐共用同一套对比学习目标(式~
\eqref
{
eq:infonce
}
的形式),仅将图像编码器替换为语音/音频编码器。
}
语音和文本之间天然存在配对关系。例如,语音识别数据提供
“语音--文字转写”,语音翻译数据提供“语音--文字翻译”。
语音编码器和文本编码器分别将二者映射为向量:
\begin{equation}
\mathbf
{
s
}_
i = f
_{
\mathrm
{
speech
}}
(S
_
i),
\qquad
\mathbf
{
u
}_
i = f
_{
\mathrm
{
text
}}
(T
_
i).
\end{equation}
匹配的语音--文本为正样本,不匹配的组合为负样本。训练仍采用
式~
\eqref
{
eq:infonce
}
的对比损失,使正确配对的表示相互靠近,
错误配对的表示相互远离,如图~
\ref
{
fig:speech-text-alignment
}
所示。
\begin{figure}
[htbp]
\centering
\includegraphics
[width=0.92\linewidth]
{
figures/image.png
}
\caption
{
语音--文本表示的对齐过程。左图为对齐前,右图为对齐后;
圆形表示语音,三角形表示对应的文字转写。
}
\label
{
fig:speech-text-alignment
}
\end{figure}
\noindent\textbf
{
句级与词级对齐。
}
句级对齐将整段语音与整句话分别压缩为一个向量,适合语音检索和
语音翻译。词级对齐则进一步确定某段语音帧对应哪个文本 token。
例如,WACO
\cite
{
waco
}
通过拉近语音词片段与对应文本词的表示,
提升低资源语音翻译效果。
\noindent\textbf
{
音频--文本对齐。
}
更广义的音频还包括音乐、动物叫声、交通声和环境声等。
这类音频通常与“狗在吠叫”“雨声伴随雷声”等文字描述配对。
CLAP
\cite
{
clap
}
将 CLIP 中的图像编码器替换为音频编码器,
在共享空间中对齐音频和文字描述,如图~
\ref
{
fig:audio-text-pairs
}
所示。
\begin{figure}
[htbp]
\centering
\begin{tikzpicture}
[
>=Latex,
node distance=8mm and 14mm,
box/.style=
{
draw,
rounded corners=2pt,
minimum width=25mm,
minimum height=8mm,
align=center
}
]
\node
[box]
(audio)
{
音频
\\
狗叫、雨声、音乐
}
;
\node
[box, right=of audio]
(aenc)
{
音频编码器
}
;
\node
[box, right=18mm of aenc]
(tenc)
{
文本编码器
}
;
\node
[box, right=of tenc]
(text)
{
文字描述
\\
“一只狗在叫”
}
;
\draw
[->,thick]
(audio) -- (aenc);
\draw
[->,thick]
(text) -- (tenc);
\coordinate
(mid) at (
$
(
aenc
)!
0
.
5
!(
tenc
)
$
);
\node
[draw,rounded corners=2pt,below=9mm of mid,
minimum width=31mm,minimum height=8mm,align=center] (space)
{
共享表示空间
}
;
\draw
[->,thick]
(aenc) -- (space);
\draw
[->,thick]
(tenc) -- (space);
\node
[below=3mm of space,font=\scriptsize]
{
匹配的音频与描述相互接近
}
;
\end{tikzpicture}
\caption
{
音频--文本对齐的基本结构。
}
\label
{
fig:audio-text-pairs
}
\end{figure}
\noindent\textbf
{
需要注意。
}
文字转写主要描述语音中的“说了什么”,通常不会完整记录说话人、
情绪、音色和韵律。因此,只使用转写进行对齐时,模型更容易学习
语言内容;若要保留副语言信息,还需加入说话人、情绪或韵律相关的
训练目标。
% ----------------------------------------------------------
% ----------------------------------------------------------
\subsection
{
跨模态融合
}
\subsection
{
跨模态融合
}
...
@@ -301,7 +407,90 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
...
@@ -301,7 +407,90 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
三者的差别,直观上就是图~
\ref
{
fig:fusion
}
中融合点由上至下逐渐后移:越靠早融合,模态间交互越深、越依赖联合训练;越靠后融合,各模块越独立、越易复用已有的视觉编码器与语言模型。需要说明的是,这一划分并非绝对,实际模型可能兼有多种方式。融合不仅服务于理解,也服务于生成控制:文本可用于约束图像生成,图像内容可用于辅助生成相应的语音或文字描述。
三者的差别,直观上就是图~
\ref
{
fig:fusion
}
中融合点由上至下逐渐后移:越靠早融合,模态间交互越深、越依赖联合训练;越靠后融合,各模块越独立、越易复用已有的视觉编码器与语言模型。需要说明的是,这一划分并非绝对,实际模型可能兼有多种方式。融合不仅服务于理解,也服务于生成控制:文本可用于约束图像生成,图像内容可用于辅助生成相应的语音或文字描述。
\paragraph
{
语音的融合。
}
\paragraph
{
语音的融合。
}
\todochen
{
说明语音 token 如何与图像、文本 token 共同进入统一序列或交叉注意力,并指出语音具有较强的时序结构,融合时需兼顾时间顺序。
}
语音首先经过语音编码器,被转换为按时间排列的声学 token
$
\mathbf
{
a
}_
1
,
\mathbf
{
a
}_
2
,
\ldots
,
\mathbf
{
a
}_
T
$
。这些 token 可以通过两种常见方式
与文本或图像信息融合。
一种方式是将声学 token、图像 token 和文本 token 拼接成统一序列,
再交给同一个 Transformer 处理;另一种方式是保留独立的语音编码器,
让文本 token 通过交叉注意力读取语音特征,如图~
\ref
{
fig:speech-fusion
}
所示。
\begin{figure}
[htbp]
\centering
\begin{tikzpicture}
[
>=
{
Latex[length=2mm]
}
,
box/.style=
{
draw,
rounded corners,
minimum height=0.65cm,
minimum width=1.6cm,
align=center,
font=
\scriptsize
}
,
tok/.style=
{
draw,
minimum width=0.45cm,
minimum height=0.55cm,
inner sep=1pt,
font=
\scriptsize
}
,
lab/.style=
{
font=
\scriptsize\bfseries
}
]
% ---------- 统一序列 ----------
\node
[lab]
at (-2.3,0)
{
统一序列
}
;
\node
[box]
(speech1) at (-0.7,0)
{
语音编码器
}
;
\node
[tok]
(a1) at (1.0,0)
{$
a
_
1
$}
;
\node
[tok]
(a2) at (1.55,0)
{$
a
_
2
$}
;
\node
at (2.05,0)
{$
\cdots
$}
;
\node
[tok]
(aT) at (2.55,0)
{$
a
_
T
$}
;
\node
[tok]
(i1) at (3.45,0)
{$
v
_
1
$}
;
\node
at (3.95,0)
{$
\cdots
$}
;
\node
[tok]
(iK) at (4.45,0)
{$
v
_
K
$}
;
\node
[tok]
(t1) at (5.35,0)
{$
u
_
1
$}
;
\node
at (5.85,0)
{$
\cdots
$}
;
\node
[tok]
(tN) at (6.35,0)
{$
u
_
N
$}
;
\node
[box]
(joint) at (8.0,0)
{
统一
\\
Transformer
}
;
\draw
[->]
(speech1) -- (a1);
\draw
[->]
(tN) -- (joint);
\node
[font=\tiny]
at (1.75,0.62)
{
声学 token
}
;
\node
[font=\tiny]
at (3.95,0.62)
{
图像 token
}
;
\node
[font=\tiny]
at (5.85,0.62)
{
文本 token
}
;
% ---------- 交叉注意力 ----------
\node
[lab]
at (-2.3,-2.0)
{
交叉注意力
}
;
\node
[box]
(speech2) at (-0.7,-1.65)
{
语音编码器
}
;
\node
[box]
(audiofeat) at (1.45,-1.65)
{
声学特征
\\
$
a
_
1
,
\ldots
,a
_
T
$}
;
\node
[box]
(text) at (-0.7,-2.45)
{
文本 token
}
;
\node
[box,minimum width=2.0cm]
(cross) at (3.75,-2.05)
{
交叉注意力
}
;
\node
[box]
(lm) at (6.1,-2.05)
{
语言模型
}
;
\node
at (7.6,-2.05)
{
\scriptsize
输出
}
;
\draw
[->]
(speech2) -- (audiofeat);
\draw
[->]
(audiofeat) -- (cross);
\draw
[->]
(text) -- (cross);
\draw
[->]
(cross) -- (lm);
\draw
[->]
(lm) -- (7.25,-2.05);
\end{tikzpicture}
\caption
{
语音与其他模态的两种常见融合方式。上:将声学、图像和文本
token 拼接为统一序列;下:文本通过交叉注意力读取语音特征。
}
\label
{
fig:speech-fusion
}
\end{figure}
与文本相比,语音 token 数量更多,并且具有明确的时间顺序。因此,
融合前通常需要通过卷积或池化进行下采样,以缩短序列;同时加入位置编码,
保留“先说什么、后说什么”的时序关系。对于语音问答、语音翻译等任务,
模型还应避免在处理当前时刻时破坏语音原有的时间结构。
% ============================================================
% ============================================================
...
@@ -340,7 +529,99 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
...
@@ -340,7 +529,99 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
连接模块的形式多样。较简单的做法是线性投影或多层感知机,如 LLaVA
\cite
{
llava
}
用一个投影层把视觉特征映射到语言模型的词向量空间;较复杂的做法是引入注意力模块对视觉特征做压缩,如前述 BLIP-2 的 Q-Former,以及 Flamingo 采用的门控交叉注意力。无论何种形式,其作用都是把模态编码器输出的向量,转换为若干与文本 token 处于同一空间的向量,相当于把图像或语音“翻译”为语言模型可读取的一段输入。训练上常采用
\keyword
{
分阶段
}
策略:先冻结模态编码器与大语言模型、只训练连接模块,使两个表示空间先行对齐,这样既降低计算开销,又有助于保留语言模型已有的能力;随后再对整体做小幅微调。
连接模块的形式多样。较简单的做法是线性投影或多层感知机,如 LLaVA
\cite
{
llava
}
用一个投影层把视觉特征映射到语言模型的词向量空间;较复杂的做法是引入注意力模块对视觉特征做压缩,如前述 BLIP-2 的 Q-Former,以及 Flamingo 采用的门控交叉注意力。无论何种形式,其作用都是把模态编码器输出的向量,转换为若干与文本 token 处于同一空间的向量,相当于把图像或语音“翻译”为语言模型可读取的一段输入。训练上常采用
\keyword
{
分阶段
}
策略:先冻结模态编码器与大语言模型、只训练连接模块,使两个表示空间先行对齐,这样既降低计算开销,又有助于保留语言模型已有的能力;随后再对整体做小幅微调。
\paragraph
{
语音的接入。
}
\paragraph
{
语音的接入。
}
\todochen
{
说明语音/音频编码器如何套用同一通用结构接入大语言模型,并指出语音是连续且较长的信号,连接模块往往需先做时序压缩,以免输入序列过长。
}
语音和音频同样可以按照“编码器--连接模块--大语言模型”的结构接入。
首先,语音编码器将波形或梅尔频谱转换为声学表示:
\[
\mathbf
{
a
}_
1
,
\mathbf
{
a
}_
2
,
\ldots
,
\mathbf
{
a
}_
T .
\]
连接模块再对这些表示进行
\keyword
{
时序压缩
}
和空间投影,得到较短的
语音 token 序列:
\[
\mathbf
{
z
}_
1
,
\mathbf
{
z
}_
2
,
\ldots
,
\mathbf
{
z
}_
K,
\qquad
K
\ll
T .
\]
这些语音 token 与文本指令一起输入大语言模型,使其能够完成语音问答、
语音翻译和音频理解等任务,如图~
\ref
{
fig:speech-access
}
所示。
\begin{figure}
[htbp]
\centering
\begin{tikzpicture}
[
>=
{
Latex[length=2mm]
}
,
node distance=6mm,
io/.style=
{
draw,
rounded corners,
fill=CourseGreen!16,
minimum width=1.6cm,
minimum height=0.7cm,
align=center,
font=
\scriptsize
}
,
box/.style=
{
draw,
rounded corners,
fill=CourseGray,
minimum width=1.8cm,
minimum height=0.7cm,
align=center,
font=
\scriptsize
}
,
seq/.style=
{
draw,
rounded corners,
fill=CourseGold!18,
minimum width=2.4cm,
minimum height=0.7cm,
align=center,
font=
\scriptsize
}
]
\node
[io]
(speech)
{
语音/音频
}
;
\node
[box,right=of speech]
(encoder)
{
语音编码器
}
;
\node
[seq,right=of encoder]
(long)
{
长声学序列
\\
$
a
_
1
,a
_
2
,
\ldots
,a
_
T
$
}
;
\node
[box,right=of long]
(connector)
{
连接模块
\\
压缩与投影
}
;
\node
[seq,right=of connector]
(short)
{
短语音 token
\\
$
z
_
1
,
\ldots
,z
_
K
$
}
;
\node
[box,right=of short]
(llm)
{
大语言模型
}
;
\node
[io,right=of llm]
(output)
{
文本输出
}
;
\node
[io,below=7mm of llm]
(text)
{
文本指令
}
;
\draw
[->]
(speech) -- (encoder);
\draw
[->]
(encoder) -- (long);
\draw
[->]
(long) -- (connector);
\draw
[->]
(connector) -- (short);
\draw
[->]
(short) -- (llm);
\draw
[->]
(text) -- (llm);
\draw
[->]
(llm) -- (output);
\node
[font=\tiny,below=2mm of long]
{$
T
$
较大
}
;
\node
[font=\tiny,below=2mm of short]
{$
K
\ll
T
$}
;
\end{tikzpicture}
\caption
{
语音接入大语言模型的基本结构。连接模块先压缩较长的声学序列,
再将其投影为大语言模型可读取的语音 token。
}
\label
{
fig:speech-access
}
\end{figure}
语音与图像接入的主要区别在于,语音沿时间轴连续展开,声学 token
通常数量更多。如果直接将全部声学 token 输入语言模型,不仅计算开销较大,
还可能挤占文本上下文长度。因此,连接模块常采用卷积下采样、池化、
查询向量或注意力压缩等方法,在尽量保留语义和时间顺序的同时缩短序列。
% ----------------------------------------------------------
% ----------------------------------------------------------
\subsection
{
视觉语言模型:图像理解中的多模态建模
}
\subsection
{
视觉语言模型:图像理解中的多模态建模
}
...
@@ -481,7 +762,218 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
...
@@ -481,7 +762,218 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
与视觉语言模型相对应,
\keyword
{
语音语言模型
}
把语音表示接入大语言模型,以完成语音识别、语音理解、语音问答与语音对话等任务,其结构大体遵循
\ref
{
sub:arch
}
的通用框架。二者的主要差异在于数据结构:图像更多体现空间结构,语音更多体现时间结构,且语音中常同时包含语言内容、说话人信息、情感与噪声。因此语音语言模型的一个核心,是把连续声学信号压缩、映射为大语言模型可处理的语义序列。
与视觉语言模型相对应,
\keyword
{
语音语言模型
}
把语音表示接入大语言模型,以完成语音识别、语音理解、语音问答与语音对话等任务,其结构大体遵循
\ref
{
sub:arch
}
的通用框架。二者的主要差异在于数据结构:图像更多体现空间结构,语音更多体现时间结构,且语音中常同时包含语言内容、说话人信息、情感与噪声。因此语音语言模型的一个核心,是把连续声学信号压缩、映射为大语言模型可处理的语义序列。
\todochen
{
将本小节展开为连贯的教学正文:从语音如何先被编码再接入大语言模型讲起,说明模型如何从“转写语音”发展到“理解语音指令并完成任务”(语音问答、翻译、对话);解释语音 token 与文本 token 的对齐;并讨论口语化、方言、噪声、多人重叠等现实难点。叙述以结构与训练目标为主线,与上文视觉语言模型形成对照,并简要梳理代表工作(如语音识别、语音大模型方向的代表性工作)。
}
\paragraph
{
从语音识别到语音理解。
}
传统语音识别主要学习
\[
p
(
\text
{
转写文本
}
\mid\text
{
语音
}
)
,
\]
目标是准确回答“语音中说了什么”。语音语言模型则进一步结合文本指令,
学习
\[
p
(
\text
{
回答
}
\mid\text
{
语音
}
,
\text
{
指令
}
)
,
\]
因此输出不必是逐字转写,也可以是问题答案、翻译结果或对话回复。
二者的区别如图~
\ref
{
fig:asr-to-slm
}
所示。
\begin{figure}
[htbp]
\centering
\begin{tikzpicture}
[
>=
{
Latex[length=2mm]
}
,
box/.style=
{
draw,
rounded corners,
minimum height=0.72cm,
minimum width=1.8cm,
align=center,
font=
\scriptsize
}
,
lab/.style=
{
font=
\scriptsize\bfseries
}
]
% 传统 ASR
\node
[lab]
(lab1) at (-2.4,0)
{
传统语音识别
}
;
\node
[box,fill=CourseGreen!16]
(sp1) at (-0.6,0)
{
语音
}
;
\node
[box,fill=CourseGray]
(asr) at (1.7,0)
{
语音识别模型
}
;
\node
[box,fill=CourseBlue!14]
(tr) at (4.3,0)
{
文字转写
\\
“下午三点开会”
}
;
\draw
[->]
(sp1)--(asr);
\draw
[->]
(asr)--(tr);
% 语音语言模型
\node
[lab]
(lab2) at (-2.4,-1.8)
{
语音语言模型
}
;
\node
[box,fill=CourseGreen!16]
(sp2) at (-0.6,-1.5)
{
语音
}
;
\node
[box,fill=CoursePurple!12]
(ins) at (-0.6,-2.8)
{
指令:“几点开会?”
}
;
\node
[box,fill=CourseGold!18]
(enc) at (1.7,-1.85)
{
语音编码器
\\
与连接模块
}
;
\node
[box,fill=CourseGray]
(llm) at (4.1,-1.85)
{
大语言模型
}
;
\node
[box,fill=CourseBlue!14]
(ans) at (6.3,-1.85)
{
回答
\\
“下午三点”
}
;
\draw
[->]
(sp2)--(enc);
\draw
[->]
(ins)--(enc);
\draw
[->]
(enc)--(llm);
\draw
[->]
(llm)--(ans);
\end{tikzpicture}
\caption
{
从语音识别到语音语言模型:传统模型主要输出逐字转写,
语音语言模型则结合语音和指令完成问答、翻译与对话等任务。
}
\label
{
fig:asr-to-slm
}
\end{figure}
\paragraph
{
语音如何进入语言模型。
}
常见方法有两类,如图~
\ref
{
fig:speech-token-access
}
所示。
\begin{enumerate}
\item
\keyword
{
连续特征接入
}
:语音编码器输出连续声学表示,
再由连接模块进行压缩和投影,使其维度与文本词向量一致。
Qwen-Audio
\cite
{
qwenaudio
}
和 SALMONN
\cite
{
salmonn
}
等模型主要采用
这种结构。
\item
\keyword
{
离散 token 接入
}
:先将语音量化为有限集合中的离散单元,
再把这些单元加入语言模型词表,使同一个模型能够统一处理文本 token
和语音 token。SpeechGPT
\cite
{
speechgpt
}
采用了这种思路。
\end{enumerate}
\begin{figure}
[htbp]
\centering
\begin{tikzpicture}
[
>=
{
Latex[length=2mm]
}
,
box/.style=
{
draw,
rounded corners,
minimum height=0.68cm,
minimum width=1.65cm,
align=center,
font=
\scriptsize
}
,
tok/.style=
{
draw,
minimum width=0.48cm,
minimum height=0.52cm,
inner sep=1pt,
font=
\tiny
}
,
lab/.style=
{
font=
\scriptsize\bfseries
}
]
% 连续表示
\node
[lab]
at (-2.4,0)
{
连续特征
}
;
\node
[box,fill=CourseGreen!16]
(wave1) at (-0.8,0)
{
语音
}
;
\node
[box,fill=CourseGray]
(enc1) at (1.15,0)
{
语音编码器
}
;
\node
[box,fill=CourseGold!18]
(proj) at (3.25,0)
{
压缩与投影
}
;
\node
[tok,fill=CourseBlue!14]
(z1) at (5.05,0)
{$
z
_
1
$}
;
\node
[tok,fill=CourseBlue!14,right=0mm of z1]
(z2)
{$
z
_
2
$}
;
\node
[right=0mm of z2,font=\scriptsize]
(zdots)
{$
\cdots
$}
;
\node
[tok,fill=CourseBlue!14,right=0mm of zdots]
(zk)
{$
z
_
K
$}
;
\node
[box,fill=CourseGray,right=5mm of zk]
(llm1)
{
语言模型
}
;
\draw
[->]
(wave1)--(enc1);
\draw
[->]
(enc1)--(proj);
\draw
[->]
(proj)--(z1);
\draw
[->]
(zk)--(llm1);
% 离散表示
\node
[lab]
at (-2.4,-1.65)
{
离散 token
}
;
\node
[box,fill=CourseGreen!16]
(wave2) at (-0.8,-1.65)
{
语音
}
;
\node
[box,fill=CourseGold!18]
(quant) at (1.15,-1.65)
{
离散化
}
;
\node
[tok,fill=CoursePurple!14]
(s1) at (2.9,-1.65)
{$
s
_{
17
}$}
;
\node
[tok,fill=CoursePurple!14,right=0mm of s1]
(s2)
{$
s
_{
42
}$}
;
\node
[right=0mm of s2,font=\scriptsize]
(sdots)
{$
\cdots
$}
;
\node
[tok,fill=CoursePurple!14,right=0mm of sdots]
(sm)
{$
s
_{
8
}$}
;
\node
[box,fill=CourseGray,right=6mm of sm]
(llm2)
{
统一语言模型
}
;
\node
[font=\tiny,below=1mm of llm2]
{
语音 token 与文本 token 共用序列
}
;
\draw
[->]
(wave2)--(quant);
\draw
[->]
(quant)--(s1);
\draw
[->]
(sm)--(llm2);
\end{tikzpicture}
\caption
{
语音 token 接入语言模型的两种方式。上:将连续声学特征
压缩并投影到词向量空间;下:将语音离散化,与文本 token 统一建模。
}
\label
{
fig:speech-token-access
}
\end{figure}
\paragraph
{
语音与文本 token 的对齐。
}
连续接入方法通过连接模块,使语音表示落入语言模型能够读取的词向量空间;
离散接入方法则让语音 token 与文本 token 使用同一个自回归模型。
训练时,一段语音通常与转写、翻译或回答配对,模型根据语音和指令预测
目标文本:
\begin{equation}
\mathcal
{
L
}_{
\mathrm
{
speech
}}
=
-
\sum
_{
l=1
}^{
L
}
\log
p
\left
(
y
_
l
\mid
y
_{
<l
}
,
\mathbf
{
z
}_{
1:K
}
,
\mathbf
{
q
}
\right
),
\end{equation}
其中
$
\mathbf
{
z
}_{
1
:K
}$
为语音表示,
$
\mathbf
{
q
}$
为文本指令,
$
y
_
l
$
为第
$
l
$
个目标文本 token。模型必须从语音中提取与答案有关的内容,
才能正确预测后续文本,从而逐渐建立语音与文本语义之间的对应关系。
\paragraph
{
训练能力的逐步扩展。
}
语音语言模型通常经过以下三个阶段:
\begin{enumerate}
\item
\keyword
{
语音--文本训练
}
:利用语音与转写或翻译数据,
先学习语音内容与文字之间的对应关系。
\item
\keyword
{
语音指令微调
}
:加入“语音+问题+回答”数据,
使模型从简单转写扩展到问答、翻译、摘要和信息提取。
\item
\keyword
{
语音对话训练
}
:使用多轮对话数据,使模型结合前文,
持续理解用户语音并生成连贯回复。
\end{enumerate}
Whisper
\cite
{
whisper
}
是大规模多语言语音识别与语音翻译的代表,
说明了大规模语音--文本训练可以显著增强跨语言和跨场景的识别能力。
在此基础上,SpeechGPT
\cite
{
speechgpt
}
进一步使用离散语音表示,
使语言模型能够接收和生成语音;Qwen-Audio
\cite
{
qwenaudio
}
将训练范围
扩展到语音、音乐和环境声等多种音频任务;SALMONN
\cite
{
salmonn
}
则把语音编码器、通用音频编码器与语言模型结合,用于语音识别、翻译、
音频问答和情感识别等任务。
\paragraph
{
现实语音中的困难。
}
真实语音比书面文本更加复杂,主要体现在以下几方面:
\begin{itemize}
\item
\keyword
{
口语化与方言
}
:语音中常有重复、停顿、口头语和不完整句子,
不同地区的口音与方言也可能在训练数据中分布不均。
\item
\keyword
{
噪声与混响
}
:交通声、音乐和远距离录音会遮盖发音内容,
使声学表示不稳定。
\item
\keyword
{
多人重叠
}
:多人同时说话时,模型还需判断“谁说了什么”,
往往需要结合语音分离或说话人分段。
\item
\keyword
{
长语音与实时性
}
:语音 token 序列很长,过度压缩可能丢失
细节,而保留全部 token 又会增加计算量和回答延迟。
\end{itemize}
\begin{importantnote}
语音理解并不完全等于“先转写,再让语言模型回答”。逐字转写主要保留
“说了什么”,却可能丢失语气、情绪、停顿、说话人和环境声音。
因此,语音语言模型通常仍需直接读取声学表示,而不能只依赖转写文本。
\end{importantnote}
% ----------------------------------------------------------
% ----------------------------------------------------------
\subsection
{
多模态指令微调与对齐
}
\subsection
{
多模态指令微调与对齐
}
...
@@ -492,7 +984,75 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
...
@@ -492,7 +984,75 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
其特殊性主要体现在两方面。其一,
\keyword
{
指令数据须包含非文本模态
}
:多模态指令数据通常由“图像/语音+指令+目标回答”构成,如图像问答、图像描述、图文推理等;其构造成本较高,实践中常借助已有的强文本模型,依据图像的文字标注自动生成大量问答样本(LLaVA 即采用了类似做法)。其二,
\keyword
{
对齐须兼顾模态一致性
}
:除一般的有用性与安全性外,多模态对齐往往还需抑制前述视觉幻觉,使模型的回答尽量忠实于实际输入的图像或语音,而非依赖语言先验作出臆测。
其特殊性主要体现在两方面。其一,
\keyword
{
指令数据须包含非文本模态
}
:多模态指令数据通常由“图像/语音+指令+目标回答”构成,如图像问答、图像描述、图文推理等;其构造成本较高,实践中常借助已有的强文本模型,依据图像的文字标注自动生成大量问答样本(LLaVA 即采用了类似做法)。其二,
\keyword
{
对齐须兼顾模态一致性
}
:除一般的有用性与安全性外,多模态对齐往往还需抑制前述视觉幻觉,使模型的回答尽量忠实于实际输入的图像或语音,而非依赖语言先验作出臆测。
\paragraph
{
语音侧的指令数据。
}
\paragraph
{
语音侧的指令数据。
}
\todochen
{
补充语音问答、语音翻译、语音对话等指令数据的构造方式,以及语音场景下的多轮对话训练与安全对齐。
}
语音指令数据通常由
\[
\text
{
语音输入
}
+
\text
{
文本指令
}
+
\text
{
目标回答
}
\]
组成。它不再只要求模型逐字转写语音,而是要求模型根据语音内容完成指定任务。
常见数据形式如图~
\ref
{
fig:speech-instruction-data
}
所示。
\begin{figure}
[htbp]
\centering
\begin{tikzpicture}
[
>=
{
Latex[length=2mm]
}
,
box/.style=
{
draw,
rounded corners,
minimum height=0.68cm,
align=center,
font=
\scriptsize
}
,
input/.style=
{
box,fill=CourseGreen!16,minimum width=1.8cm
}
,
inst/.style=
{
box,fill=CoursePurple!12,minimum width=2.4cm
}
,
output/.style=
{
box,fill=CourseBlue!14,minimum width=2.5cm
}
,
task/.style=
{
font=
\scriptsize\bfseries
,anchor=east
}
]
% ASR
\node
[task]
at (-3.0,0)
{
语音识别
}
;
\node
[input]
(a1) at (-1.6,0)
{
一段语音
}
;
\node
[inst]
(q1) at (0.9,0)
{
“请转写这段语音”
}
;
\node
[output]
(o1) at (4.0,0)
{
对应文字转写
}
;
\draw
[->]
(a1)--(q1);
\draw
[->]
(q1)--(o1);
% Translation
\node
[task]
at (-3.0,-1.1)
{
语音翻译
}
;
\node
[input]
(a2) at (-1.6,-1.1)
{
中文语音
}
;
\node
[inst]
(q2) at (0.9,-1.1)
{
“请翻译成英文”
}
;
\node
[output]
(o2) at (4.0,-1.1)
{
英文翻译
}
;
\draw
[->]
(a2)--(q2);
\draw
[->]
(q2)--(o2);
% QA
\node
[task]
at (-3.0,-2.2)
{
语音问答
}
;
\node
[input]
(a3) at (-1.6,-2.2)
{
会议录音
}
;
\node
[inst]
(q3) at (0.9,-2.2)
{
“会议几点开始?”
}
;
\node
[output]
(o3) at (4.0,-2.2)
{
“下午三点”
}
;
\draw
[->]
(a3)--(q3);
\draw
[->]
(q3)--(o3);
% Audio understanding
\node
[task]
at (-3.0,-3.3)
{
音频理解
}
;
\node
[input]
(a4) at (-1.6,-3.3)
{
环境声音
}
;
\node
[inst]
(q4) at (0.9,-3.3)
{
“发生了什么?”
}
;
\node
[output]
(o4) at (4.0,-3.3)
{
“有人敲门”
}
;
\draw
[->]
(a4)--(q4);
\draw
[->]
(q4)--(o4);
\end{tikzpicture}
\caption
{
语音侧指令数据的常见形式:同一模型根据不同指令,对语音完成转写、翻译、问答或音频理解。
}
\label
{
fig:speech-instruction-data
}
\end{figure}
已有的语音识别和语音翻译数据可直接改写为指令格式。例如,将
“语音--转写”样本包装为“请转写这段语音--目标转写”,将
“语音--翻译”样本包装为“请翻译成某种语言--目标译文”。
对于语音问答和摘要,还可以先利用语音转写、场景标签或人工标注,
再由较强的文本模型生成问题与参考答案。SpeechGPT
\cite
{
speechgpt
}
、
Qwen-Audio
\cite
{
qwenaudio
}
和 SALMONN
\cite
{
salmonn
}
等工作均通过混合多种
语音和音频任务,使模型能够根据指令选择不同的处理方式。
% ----------------------------------------------------------
% ----------------------------------------------------------
\subsection
{
图像—语音—文本联合建模
}
\subsection
{
图像—语音—文本联合建模
}
...
@@ -501,7 +1061,72 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
...
@@ -501,7 +1061,72 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
现实信息往往多模态并存:视频同时包含画面、声音与字幕;课堂同时包含板书、讲解与文字资料。
\keyword
{
联合建模
}
要求模型在同一上下文中同时处理图像、语音与文本,分别对应空间结构、时间结构与符号结构,并在统一表示中完成跨模态的理解与生成。其主要挑战,在于协调这几种异质结构,尽量保持空间、时间与语义上的一致。从双模态系统推广到三模态及以上的统一系统,是近年多模态模型的一个发展方向,一些较新的模型已尝试在统一框架内原生支持多种模态的输入与输出。
现实信息往往多模态并存:视频同时包含画面、声音与字幕;课堂同时包含板书、讲解与文字资料。
\keyword
{
联合建模
}
要求模型在同一上下文中同时处理图像、语音与文本,分别对应空间结构、时间结构与符号结构,并在统一表示中完成跨模态的理解与生成。其主要挑战,在于协调这几种异质结构,尽量保持空间、时间与语义上的一致。从双模态系统推广到三模态及以上的统一系统,是近年多模态模型的一个发展方向,一些较新的模型已尝试在统一框架内原生支持多种模态的输入与输出。
\paragraph
{
以语音/音频为核心的联合场景。
}
\paragraph
{
以语音/音频为核心的联合场景。
}
\todochen
{
补充以语音/音频为主的联合建模内容,如视频中画面、声音、字幕的融合,看图配语音讲解,以及多路信息在长上下文中的时间同步等。
}
在视频、课堂和会议等场景中,语音或音频通常沿时间连续展开,
可作为组织其他模态的
\keyword
{
时间轴
}
。模型需要把同一时刻附近的画面、
声音和字幕组合起来,才能完整理解正在发生的事件。
\begin{figure}
[htbp]
\centering
\begin{tikzpicture}
[
>=
{
Latex[length=2mm]
}
,
box/.style=
{
draw,
rounded corners,
minimum height=0.7cm,
minimum width=1.8cm,
align=center,
font=
\scriptsize
}
,
input/.style=
{
box,fill=CourseGreen!16
}
,
mid/.style=
{
box,fill=CourseGold!18,minimum width=2.2cm
}
,
model/.style=
{
box,fill=CourseGray,minimum width=2.2cm
}
,
output/.style=
{
box,fill=CourseBlue!14
}
]
\node
[input]
(video) at (0,0.9)
{
画面帧
}
;
\node
[input]
(audio) at (0,0)
{
语音/音频
}
;
\node
[input]
(text) at (0,-0.9)
{
字幕/文字
}
;
\node
[mid]
(sync) at (3.0,0)
{
时间同步
\\
按时间片对齐
}
;
\node
[model]
(fusion) at (6.0,0)
{
联合模型
\\
跨模态融合
}
;
\node
[output]
(out) at (8.8,0)
{
问答、摘要
\\
讲解或生成
}
;
\draw
[->]
(video) -- (sync);
\draw
[->]
(audio) -- (sync);
\draw
[->]
(text) -- (sync);
\draw
[->]
(sync) -- (fusion);
\draw
[->]
(fusion) -- (out);
\end{tikzpicture}
\caption
{
以语音或音频时间轴为核心的联合建模:先对齐同一时间片内的
画面、声音与字幕,再进行统一理解与生成。
}
\label
{
fig:audio-centered-joint
}
\end{figure}
\noindent\textbf
{
视频理解。
}
画面提供人物、物体和动作,语音提供说话内容,环境声音则可提示画面外
发生的事件。例如,仅凭画面可能看不出门外有人,而敲门声能够补充这一信息;
字幕还可以帮助模型理解口音较重或受噪声干扰的语音。
\noindent\textbf
{
看图配语音讲解。
}
模型也可以同时接收图像和文本指令,再生成相应的语音讲解。例如,根据
一幅医学图像生成口头说明,或根据课件内容生成教学讲解。此时不仅要保证
语音内容与图像一致,还要控制语速、停顿和语气,使生成结果适合具体场景。
\noindent\textbf
{
长上下文中的时间同步。
}
对于长视频、课堂录音或多人会议,模型通常先将输入切分为若干时间片,
形成
\[
(
V
_
1
,A
_
1
,T
_
1
)
,
\,
(
V
_
2
,A
_
2
,T
_
2
)
,
\,
\ldots
,
\,
(
V
_
L,A
_
L,T
_
L
)
,
\]
其中
$
V
_
l
$
、
$
A
_
l
$
和
$
T
_
l
$
分别表示第
$
l
$
个时间片内的画面、音频和文字。
模型需要保留这些时间片的先后顺序,并正确判断一句话、一个动作和一种声音
是否发生在同一时刻。若时间对齐错误,就可能把后面的声音解释为前面的画面,
从而产生错误的事件描述。
% ============================================================
% ============================================================
...
@@ -645,7 +1270,91 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
...
@@ -645,7 +1270,91 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
\end{equation}
\end{equation}
它与图像生成的一个根本差异在于:图像多为空间结构的一次性生成,语音则是随时间展开的连续序列生成。较好的语音合成不仅要准确传达文本内容,通常还需生成较自然的音色、韵律、语速与停顿。
它与图像生成的一个根本差异在于:图像多为空间结构的一次性生成,语音则是随时间展开的连续序列生成。较好的语音合成不仅要准确传达文本内容,通常还需生成较自然的音色、韵律、语速与停顿。
\todochen
{
将本小节展开为连贯正文:先讲文本到语音的基本流程(文本前端、声学建模、声码器),再讲音色、韵律与情感的控制,以及零样本合成与声音克隆;强调目标是自然、可懂且符合说话人特征的连续声学信号,并与文本生成图像对照,指出连续时间信号生成与空间生成的差异;简要梳理代表工作。同时讨论声音克隆带来的安全与伦理问题。
}
\paragraph
{
文本到语音的基本流程。
}
典型语音合成系统包含三个部分,如图~
\ref
{
fig:tts-pipeline
}
所示。
首先,
\keyword
{
文本前端
}
将文字规范化,并转换为字符、音素等语言单元;
随后,
\keyword
{
声学模型
}
根据文本预测梅尔频谱或声学 token;
最后,
\keyword
{
声码器
}
将这些中间表示还原为可播放的语音波形。
\begin{figure}
[htbp]
\centering
\begin{tikzpicture}
[
>=
{
Latex[length=2mm]
}
,
node distance=4.5mm,
box/.style=
{
draw,
rounded corners,
minimum height=0.72cm,
minimum width=1.55cm,
align=center,
font=
\scriptsize
}
]
\node
[box,fill=CoursePurple!12]
(text)
{
输入文本
}
;
\node
[box,fill=CourseGray,right=of text]
(front)
{
文本前端
\\
字符/音素
}
;
\node
[box,fill=CourseGold!18,right=of front]
(acoustic)
{
声学模型
}
;
\node
[box,fill=CourseGreen!16,right=of acoustic]
(mel)
{
梅尔频谱
\\
或声学 token
}
;
\node
[box,fill=CourseGray,right=of mel]
(vocoder)
{
声码器
}
;
\node
[box,fill=CourseBlue!14,right=of vocoder]
(wave)
{
语音波形
}
;
\node
[box,fill=CoursePurple!12,above=7mm of acoustic,
minimum width=3.0cm] (condition)
{
说话人、风格、情感
\\
或参考语音
}
;
\draw
[->]
(text)--(front);
\draw
[->]
(front)--(acoustic);
\draw
[->]
(acoustic)--(mel);
\draw
[->]
(mel)--(vocoder);
\draw
[->]
(vocoder)--(wave);
\draw
[->]
(condition)--(acoustic);
\end{tikzpicture}
\caption
{
文本到语音的基本流程。声学模型根据文本和说话人、风格等条件
生成声学表示,再由声码器转换为连续语音波形。
}
\label
{
fig:tts-pipeline
}
\end{figure}
\noindent\textbf
{
音色与韵律控制。
}
同一句文本可以对应多种正确读法,因此语音生成是一种
“
\keyword
{
一对多
}
”任务。说话人条件决定声音像谁,音高、时长和能量
共同影响语速、重音、停顿和语气;情感标签则可控制高兴、悲伤或平静等
表达方式。模型需要同时满足三项基本要求:内容
\emph
{
可懂
}
、声音
\emph
{
自然
}
,并符合指定的说话人和表达风格。
\noindent\textbf
{
零样本合成与声音克隆。
}
多说话人模型可以从一段参考语音中提取说话人的音色和风格,再使用该声音
朗读新的文本。若模型能够为训练中未出现的说话人直接生成语音,而不需要
重新训练,便称为
\keyword
{
零样本语音合成
}
。参考语音提供“用谁的声音说”,
输入文本提供“说什么”,二者应尽量相互独立。
\noindent\textbf
{
连续时间信号的特点。
}
图像生成主要组织二维空间中的像素或图像 token,而语音生成必须沿时间轴
保持顺序。一个字或音素通常对应若干连续声学帧,因此模型还需学习文本与
语音之间近似单调的时间对应关系。对齐错误可能造成漏词、重复、异常停顿
或语速不稳定;生成时间越长,还越难保持音色和韵律的一致。
\paragraph
{
代表工作。
}
Tacotron~2
\cite
{
tacotron2
}
采用“文本到梅尔频谱,再由 WaveNet 声码器生成
波形”的两阶段结构;FastSpeech~2
\cite
{
fastspeech2
}
使用非自回归生成,并
显式建模时长、音高和能量,提高了速度与可控性。VITS
\cite
{
vits
}
通过变分
推断、流模型和对抗训练,将声学建模与波形生成进行端到端联合训练。
VALL-E
\cite
{
valle
}
则将语音表示为离散神经音频编码 token,像语言模型预测
文本 token 一样预测语音 token,并可根据较短的参考语音进行零样本合成。
\begin{importantnote}
\textbf
{
声音克隆的安全与伦理。
}
声音具有明显的个人身份属性,未经许可复制他人声音,可能被用于冒充、
虚假信息和诈骗。因此,实际系统应确认声音授权,明确标识合成内容,
限制高风险人物或场景的克隆,并结合音频水印、来源记录和伪造语音检测
等措施降低滥用风险
\cite
{
nist-synthetic
}
。
\end{importantnote}
% ----------------------------------------------------------
% ----------------------------------------------------------
\subsection
{
音频生成:声音事件与声景的条件生成
}
\subsection
{
音频生成:声音事件与声景的条件生成
}
...
@@ -653,7 +1362,108 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
...
@@ -653,7 +1362,108 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
除语音外,还有更广泛的声音:环境声、音乐片段、声音事件与复杂声景。令模型据文字描述生成此类声音,即一般
\keyword
{
音频生成
}
,建模
$
p
(
\text
{
音频
}
\mid\text
{
文本描述
}
)
$
。它与语音合成都需生成连续声音信号,但语音有较明确的语言内容与发音规则,一般音频则更强调声音事件、环境层次与时间上的变化,且常有多个声源叠加,建模难度往往更高。
除语音外,还有更广泛的声音:环境声、音乐片段、声音事件与复杂声景。令模型据文字描述生成此类声音,即一般
\keyword
{
音频生成
}
,建模
$
p
(
\text
{
音频
}
\mid\text
{
文本描述
}
)
$
。它与语音合成都需生成连续声音信号,但语音有较明确的语言内容与发音规则,一般音频则更强调声音事件、环境层次与时间上的变化,且常有多个声源叠加,建模难度往往更高。
\todochen
{
将本小节展开为正文:文本到音频、声音事件生成、声景生成、音频上的扩散建模与文本引导的音频编辑等;重点说明模型如何依据高层文字描述,生成具有时间结构与声学真实感的音频,并说明它是上一小节声音生成从语音到一般音频的推广;简要梳理代表工作。
}
\paragraph
{
文本到音频的基本流程。
}
文本到音频生成不是朗读文字,而是根据文字描述还原相应的声音。例如,
输入“雨夜的街道上有汽车经过”,模型需要生成雨声、车辆声及相应的空间环境。
其基本流程如图~
\ref
{
fig:t2a-pipeline
}
所示:文字描述先被编码为条件表示,
生成模型据此产生频谱、潜在表示或离散音频 token,最后再还原为音频波形。
\begin{figure}
[htbp]
\centering
\begin{tikzpicture}
[
>=
{
Latex[length=2mm]
}
,
box/.style=
{
draw,
rounded corners,
minimum height=0.72cm,
minimum width=1.8cm,
align=center,
font=
\scriptsize
}
]
% 文本到音频
\node
[box,fill=CoursePurple!12]
(text) at (0,0)
{
文字描述
}
;
\node
[box,fill=CourseGold!18]
(gen) at (2.7,0)
{
音频生成模型
\\
自回归或扩散
}
;
\node
[box,fill=CourseGreen!16]
(repr) at (5.5,0)
{
频谱或
\\
音频 token
}
;
\node
[box,fill=CourseBlue!14]
(wave) at (8.1,0)
{
生成音频
}
;
\draw
[->]
(text)--(gen);
\draw
[->]
(gen)--(repr);
\draw
[->]
(repr)--(wave);
% 音频编辑
\node
[box,fill=CourseGreen!16]
(source) at (0,-1.8)
{
原始音频
}
;
\node
[box,fill=CoursePurple!12]
(inst) at (2.4,-2.5)
{
编辑指令
\\
“加入鸟叫声”
}
;
\node
[box,fill=CourseGold!18]
(edit) at (5.1,-1.8)
{
音频编辑模型
}
;
\node
[box,fill=CourseBlue!14]
(edited) at (8.1,-1.8)
{
编辑后音频
}
;
\draw
[->]
(source)--(edit);
\draw
[->]
(inst)--(edit);
\draw
[->]
(edit)--(edited);
\node
[font=\scriptsize\bfseries]
at (-1.6,0)
{
生成
}
;
\node
[font=\scriptsize\bfseries]
at (-1.6,-1.8)
{
编辑
}
;
\end{tikzpicture}
\caption
{
文本引导的音频生成与编辑。生成模型从文字描述产生新的音频;
编辑模型则根据文字指令修改已有音频。
}
\label
{
fig:t2a-pipeline
}
\end{figure}
\paragraph
{
声音事件与声景生成。
}
较简单的目标是生成单个
\keyword
{
声音事件
}
,如狗叫、玻璃破碎或汽车鸣笛;
更复杂的
\keyword
{
声景
}
则包含多个同时或依次出现的声源。例如,“雨声中,
远处有汽车驶过,随后传来雷声”同时规定了声音种类、背景环境和发生顺序。
模型不仅要生成每种声音,还要确定它们何时开始、持续多久以及如何相互叠加。
因此,音频生成通常需要满足三个要求:声音内容与文字描述一致,音质具有
较强的真实感,并且多个事件在时间上的顺序正确。同一段文字也可能对应许多
合理声音,因此模型学习的不是唯一答案,而是符合描述的声音分布。
\paragraph
{
音频上的扩散建模。
}
扩散模型训练时逐步向真实音频表示加入噪声,生成时则从随机噪声出发,
在文字条件的引导下反复去噪:
\begin{equation}
\mathbf
{
z
}_{
T
}
\longrightarrow
\mathbf
{
z
}_{
T-1
}
\longrightarrow
\cdots
\longrightarrow
\mathbf
{
z
}_{
0
}
\longrightarrow
\text
{
音频
}
.
\end{equation}
为降低计算量,模型通常不直接在高采样率波形上扩散,而是先将音频压缩为
频谱或低维潜在表示,在潜在空间完成去噪,再通过解码器和声码器恢复波形。
文字表示在每一步去噪中提供条件,使最终声音逐渐接近描述中的事件和环境。
\paragraph
{
文本引导的音频编辑。
}
音频生成还可扩展为对已有声音的修改。模型同时接收原始音频和编辑指令,
完成“加入雨声”“删除狗叫”“将钢琴替换为吉他”或“修复缺失片段”等操作。
编辑时既要改变指定内容,又应尽量保留无关部分,避免整段音频的音色、背景
或节奏发生不必要的变化。
\paragraph
{
代表工作。
}
AudioGen
\cite
{
audiogen
}
将音频量化为离散 token,再使用自回归模型根据文本
逐步预测声音;AudioLDM
\cite
{
audioldm
}
和
Make-An-Audio
\cite
{
makeanaudio
}
则将扩散模型应用于压缩后的音频表示,
提高生成效率与音质。Make-An-Audio~2
\cite
{
makeanaudio2
}
进一步强调声音事件
的先后顺序和长音频中的时间一致性。AUDIT
\cite
{
audit
}
则使用
“原始音频+编辑指令+目标音频”数据训练潜在扩散模型,可执行声音添加、
删除、替换和片段修复等编辑任务。
总体而言,音频生成是上一小节语音合成从“人类说话声”向一般声音的推广。
语音合成重点保证文字发音和说话人特征正确,而一般音频生成还需组织多个
声源、背景环境与时间变化,生成具有完整声景结构的连续声音。
% ----------------------------------------------------------
% ----------------------------------------------------------
\subsection
{
跨模态交互生成
}
\subsection
{
跨模态交互生成
}
...
@@ -666,10 +1476,98 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
...
@@ -666,10 +1476,98 @@ M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
例如:依据图像生成语音讲解;依据语音指令修改图像;依据图像与文本共同生成配套音效;或在多轮对话中不断修订生成结果。其主要难点在于不同模态的结构不一致——图像较重空间、语音/音频较重时间、文本较重逻辑——模型需在生成过程中尽量同时保持语义对应、空间一致、时间同步与用户意图一致。这与本讲前两节相呼应:往往需先具备跨模态对齐与多模态理解能力,才能实现较为可控的多模态生成。近年也出现了一些尝试在统一框架内支持“任意模态到任意模态”生成的工作,如 CoDi
\cite
{
codi
}
。
例如:依据图像生成语音讲解;依据语音指令修改图像;依据图像与文本共同生成配套音效;或在多轮对话中不断修订生成结果。其主要难点在于不同模态的结构不一致——图像较重空间、语音/音频较重时间、文本较重逻辑——模型需在生成过程中尽量同时保持语义对应、空间一致、时间同步与用户意图一致。这与本讲前两节相呼应:往往需先具备跨模态对齐与多模态理解能力,才能实现较为可控的多模态生成。近年也出现了一些尝试在统一框架内支持“任意模态到任意模态”生成的工作,如 CoDi
\cite
{
codi
}
。
\paragraph
{
以语音/音频为目标或条件的交互生成。
}
\paragraph
{
以语音/音频为目标或条件的交互生成。
}
\todochen
{
补充以语音/音频参与的交互生成,如视频配音与看图讲解、语音驱动的多轮修改,以及跨模态生成一致性与可控性的评价。
}
语音和音频既可以作为模型需要生成的
\keyword
{
目标
}
,也可以作为理解用户意图的
\keyword
{
条件
}
,如图~
\ref
{
fig:audio-interactive-generation
}
所示。
\begin{figure}
[htbp]
\centering
\begin{tikzpicture}
[
>=
{
Latex[length=2mm]
}
,
box/.style=
{
draw,
rounded corners,
minimum height=0.7cm,
minimum width=1.8cm,
align=center,
font=
\scriptsize
}
,
lab/.style=
{
font=
\scriptsize\bfseries
}
]
% 音频作为目标
\node
[lab]
at (-2.3,0)
{
音频作为目标
}
;
\node
[box,fill=CourseGreen!16]
(img1) at (-0.5,0.35)
{
图像/视频
}
;
\node
[box,fill=CoursePurple!12]
(txt1) at (-0.5,-0.45)
{
文本指令
}
;
\node
[box,fill=CourseGold!18]
(model1) at (2.2,0)
{
多模态模型
}
;
\node
[box,fill=CourseBlue!14]
(audio1) at (4.8,0)
{
语音讲解
\\
配音或音效
}
;
\draw
[->]
(img1)--(model1);
\draw
[->]
(txt1)--(model1);
\draw
[->]
(model1)--(audio1);
% 音频作为条件
\node
[lab]
at (-2.3,-1.8)
{
音频作为条件
}
;
\node
[box,fill=CourseGreen!16]
(audio2) at (-0.5,-1.8)
{
语音指令
\\
或参考音频
}
;
\node
[box,fill=CourseGold!18]
(model2) at (2.2,-1.8)
{
多模态模型
}
;
\node
[box,fill=CourseBlue!14]
(out2) at (4.8,-1.8)
{
修改图像
\\
生成视频或音频
}
;
\draw
[->]
(audio2)--(model2);
\draw
[->]
(model2)--(out2);
\end{tikzpicture}
\caption
{
语音和音频参与交互生成的两种形式:上,依据图像、视频和文字
生成语音或音效;下,将语音指令或参考音频作为条件控制其他模态的生成。
}
\label
{
fig:audio-interactive-generation
}
\end{figure}
\noindent\textbf
{
视频配音与看图讲解。
}
模型可以根据画面内容和文本要求生成语音讲解。例如,输入一段教学视频,
模型需要说明画面中的步骤;输入人物视频时,则可生成与人物动作和场景匹配的
配音。此时不仅要保证“说的内容”与画面一致,还要使停顿、语速和音效出现的
时间与视频同步。
\noindent\textbf
{
语音驱动的修改。
}
用户也可以直接用语音提出修改要求,如“把背景音乐调小一点”、
“在开门时加入脚步声”或“用更平静的语气重新讲一遍”。模型需要结合当前
生成结果和历史指令,只修改用户指定的部分,并尽量保留其他内容。
多轮交互可写为
\begin{equation}
Y
_
t
\sim
p
\!\left
(
Y
_
t
\mid
I,
\,
A,
\,
Q
_{
\leq
t
}
,
\,
Y
_{
<t
}
\right
),
\end{equation}
其中
$
I
$
表示图像或视频,
$
A
$
表示参考语音或音频,
$
Q
_{
\leq
t
}$
表示截至
当前轮的用户指令,
$
Y
_{
<t
}$
表示此前生成结果。模型每一轮都需根据新指令
修订结果,而不是完全重新生成。
\noindent\textbf
{
一致性与可控性。
}
这类系统通常需要同时考察以下几方面:
\begin{itemize}
\item
\keyword
{
语义一致性
}
:生成的语音或音效是否与图像、视频和文字描述相符;
\item
\keyword
{
时间同步
}
:声音事件、动作与字幕是否在正确时间出现;
\item
\keyword
{
指令遵循
}
:模型是否只修改用户指定的内容;
\item
\keyword
{
声音质量
}
:语音是否自然、可懂,音频是否真实且无明显杂音;
\item
\keyword
{
跨轮保持
}
:多轮修改后,人物、音色、场景和未编辑内容是否保持一致。
\end{itemize}
CoDi
\cite
{
codi
}
等统一多模态生成模型尝试将文本、图像、视频和音频纳入
同一框架,使一个模态或多个模态的组合能够控制另一模态的生成。这类模型的
关键不只是“能够生成多种模态”,还在于不同输出之间应描述同一事件,并在
空间、时间和语义上保持协调。
\begin{importantnote}
\begin{importantnote}
本节讨论的是较为通用的条件生成能力。要在真实场景中落地,通常还需应对噪声、实时性、安全性与可靠性等更严苛的要求,这属于后续应用专题(如复杂物理信号分析、复杂环境感知与系统应用)的范畴。
本节讨论的是较为通用的条件生成能力。要在真实场景中落地,通常还需应对噪声、实时性、安全性与可靠性等更严苛的要求,这属于后续应用专题(如复杂物理信号分析、复杂环境感知与系统应用)的范畴。
\end{importantnote}
\end{importantnote}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论