Commit d5cc709e by 陈丹

更新 ch5_multimodal.tex

parent 825aff67
...@@ -133,8 +133,26 @@ ...@@ -133,8 +133,26 @@
\paragraph{图像编码器的发展脉络。}把多层卷积叠加起来,可从低层的边缘、纹理逐层组合出更高层的语义,这类网络称为\keyword{卷积神经网络}(CNN)。CNN 的发展大体经历了从 AlexNet\cite{alexnet}确立深度卷积网络在图像识别上的有效性,到 VGG\cite{vgg}、ResNet\cite{resnet}通过残差连接把网络显著加深的过程。另一类做法不依赖卷积,而是把图像切成固定大小的图块(patch):例如把 $224\times224$ 的图像切成 $14\times14$$16\times16$ 的图块,每个图块经线性映射成一个向量,即一个\keyword{视觉 token},随后用自注意力建模这些 token 间的关系,这便是 Vision Transformer\cite{vit}。两类结构的训练目标类似,都是让所得视觉表示服务于具体任务(如分类),并使语义相近的图像表示彼此接近。经过编码后,图像被表示为一组视觉 token,其序列形式与文本 token 较为接近,这为二者进入同一模型创造了条件;不过二者在语义粒度上仍有差异,视觉 token 更接近局部区域特征,而文本 token 通常已对应较完整的语义单位。 \paragraph{图像编码器的发展脉络。}把多层卷积叠加起来,可从低层的边缘、纹理逐层组合出更高层的语义,这类网络称为\keyword{卷积神经网络}(CNN)。CNN 的发展大体经历了从 AlexNet\cite{alexnet}确立深度卷积网络在图像识别上的有效性,到 VGG\cite{vgg}、ResNet\cite{resnet}通过残差连接把网络显著加深的过程。另一类做法不依赖卷积,而是把图像切成固定大小的图块(patch):例如把 $224\times224$ 的图像切成 $14\times14$$16\times16$ 的图块,每个图块经线性映射成一个向量,即一个\keyword{视觉 token},随后用自注意力建模这些 token 间的关系,这便是 Vision Transformer\cite{vit}。两类结构的训练目标类似,都是让所得视觉表示服务于具体任务(如分类),并使语义相近的图像表示彼此接近。经过编码后,图像被表示为一组视觉 token,其序列形式与文本 token 较为接近,这为二者进入同一模型创造了条件;不过二者在语义粒度上仍有差异,视觉 token 更接近局部区域特征,而文本 token 通常已对应较完整的语义单位。
\paragraph{语音表示。} % \paragraph{语音表示。}
\todochen{讲清语音的原始形式(采样点与振幅,上文已先行铺垫),再讲波形、频谱图与梅尔频谱,说明语音编码器如何把连续声学信号切分为帧、编码为声学 token;与图像“图块→视觉 token”对照,并指出图像在空间上展开、语音在时间上展开这一差异。可简要梳理代表性语音编码工作的发展。} % \todochen{讲清语音的原始形式(采样点与振幅,上文已先行铺垫),再讲波形、频谱图与梅尔频谱,说明语音编码器如何把连续声学信号切分为帧、编码为声学 token;与图像“图块→视觉 token”对照,并指出图像在空间上展开、语音在时间上展开这一差异。可简要梳理代表性语音编码工作的发展。}
\paragraph{语音表示:从波形到声学 token。}语音在计算机中的原始形式是一维\keyword{波形}(waveform),即按时间顺序记录的振幅采样点序列。若采样率为 $16000$ Hz,则一秒语音包含 $16000$ 个数值。波形完整保留了原始声学信号,但其数值随时间快速振荡,且会同时混合说话人音色、发音内容、语速、情绪、环境噪声等多种因素,因此通常不直接把整段波形作为高层语义表示。
一种经典处理方式是先把波形转换为\keyword{频谱图}(spectrogram)。具体而言,将连续波形切分为许多短时片段,称为\keyword{}(frame);常见帧长约为 $20$--$25$ ms,相邻帧之间可有重叠。对每一帧进行短时傅里叶变换(short-time Fourier transform, STFT),即可得到该短时间内不同频率成分的强弱。若记波形为 $x[n]$、窗函数为 $w[n]$、第 $t$ 帧的频率索引为 $k$,则其复频谱可写为
\begin{equation}
X(t,k)=\sum_{n} x[n+tH],w[n],e^{-j2\pi kn/N},
\end{equation}
其中 $H$ 是帧移,$N$ 是每帧长度。通常取其模平方 $|X(t,k)|^2$ 作为能量,因此频谱图可以理解为一个“时间 $\times$ 频率”的二维矩阵:横轴表示时间,纵轴表示频率,每个位置的数值表示该时刻附近某个频率成分的能量。
人耳对不同频率的分辨能力并不均匀,低频区域更敏感,因此语音处理中还常将频谱投影到\keyword{梅尔尺度}(Mel scale)上,得到\keyword{梅尔频谱}(Mel spectrogram)。其基本做法是用一组按梅尔尺度分布的三角滤波器,对频谱能量进行加权汇总,再取对数:
\begin{equation}
M(t,m)=\log\left(\sum_k F_m(k),|X(t,k)|^2+\epsilon\right),
\end{equation}
其中 $F_m(k)$ 表示第 $m$ 个梅尔滤波器。梅尔频谱保留了语音中与发音内容、音高、共振峰和韵律相关的重要结构,同时压缩了不必要的频率细节,因此长期以来是语音识别、说话人识别和语音生成中的常用输入特征。
无论输入是原始波形还是梅尔频谱,语音编码器的目标都是把每一帧或一小段连续信号映射为一个高维向量,从而得到按时间排列的\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 表示。
\paragraph{文本表示:分词、词表与词嵌入。}文本的表示相对直接,其流程如图~\ref{fig:text-repr} 所示:先把一段文字切分为基本单元(词或子词),称为\keyword{分词};每个单元在\keyword{词表}中对应一个编号;再通过一张可学习的\keyword{词嵌入}(word embedding)表,把编号映射为向量。于是一句话最终成为一串词向量,与图像的视觉 token、语音的声学 token 在形式上一致。 \paragraph{文本表示:分词、词表与词嵌入。}文本的表示相对直接,其流程如图~\ref{fig:text-repr} 所示:先把一段文字切分为基本单元(词或子词),称为\keyword{分词};每个单元在\keyword{词表}中对应一个编号;再通过一张可学习的\keyword{词嵌入}(word embedding)表,把编号映射为向量。于是一句话最终成为一串词向量,与图像的视觉 token、语音的声学 token 在形式上一致。
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论