摘要
当前的语音大语言模型建立在离散语音表示的基础上,可分为语义token和声学token。然而,现有的语音token并不是专门为语音语言建模而设计的。为了评估语音token是否适合构建语音语言模型,我们建立了第一个基准 SLMTokBench。我们的结果表明,语义token和声学token都不是理想的选择。因此,我们提出了 SpeechTokenizer,一种用于语音大语言模型的统一语音tokenizer。SpeechTokenizer 采用带有残差矢量量化 (RVQ) 的编码器-解码器架构。通过统一语义和声学token,SpeechTokenizer 可以在不同的 RVQ 层上分层解开语音信息的不同方面。此外,我们利用 SpeechTokenizer 构建了一个统一语音语言模型 (USLM)。实验表明,SpeechTokenizer 在语音重建方面的表现与 EnCodec 相当,并在 SLMTokBench 基准上表现出色。此外,USLM 在零样本文本转语音任务中的表现优于 VALL-E。代码和模型可在https://github.com/ZhangXInFD/SpeechTokenizer/获得。
1.INTRODUCTION
大语言模型在各种自然语言处理任务中都表现出色。这启发了大量构建语音语言模型的研究,这些研究在各种语音处理任务中取得了重大突破。这些研究的一个关键共同点是利用离散语音表示。当前的离散语音表示可以分为两类:语义token和声学token。语义token通常来自以MASK语言建模为训练目标的自监督预训练模型。语义token是通过对来自特定中间层的表示进行 k 均值聚类得出的,被描绘为具有一维结构的序列。声学token可以从神经音频编解码器中提取,以重建为训练目标。利用带有分层量化器的残差矢量量化 (RVQ) 进行离散化,声学token被表示为由两个维度组成的矩阵:时间步长和量化器。
基于这两个语音token,语音语言模型有三种建模方法,如表 1 所示:i)语义语言模型使用语义token构建,并使用外部单元声码器进行语音合成。虽然它们可以捕获语义上准确的内容,但语音生成质量较差,并且会丢失声学细节。ii)声学语言模型基于声学token构建。以 VALL-E 为例,尽管实现了令人印象深刻的零样本文本转语音 (TTS) 功能,但由于声学token中的信息复杂,它仍然存在内容不准确等问题。iii)分层语音语言模型包括语义token语言模型和声学token语言模型,分别捕获内容信息和声学细节。这种结构在内容和语音质量方面都表现出良好的效果,但多阶段建模方法更复杂,导致错误累积和处理速度较慢等几个缺点。此外,语义token和声学token之间存在显著的信息冗余,这带来了不必要的建模复杂性。理想的语音语言模型不仅要准确地建模内容,还要生成多样化、高质量的语音,同时保持优雅简洁的架构。相应地,理想的语音token应满足以下两个关键特征:i)与文本的强对齐性;ii)有效保留语音信息。
然而,现有的语音token并不是专门为语音语言建模而设计的,也没有探索它们是否适用于构建语音语言模型。为了解决这个问题,我们建立了语音语言模型token基准,以评估语音token是否适用于构建语音语言模型。我们的评估表明,语义token与文本的对齐程度很高,但会丢失语音中的一些信息,比如音色。声学token在有效保留语音信息方面表现出色,但与文本的对齐程度不高。基于这些观察,我们旨在通过统一语义和声学token来构建专门为语音语言模型设计的语音token。具体而言,我们可以在声学token的 RVQ 结构中进行信息解藕,使得第一个 RVQ 量化器生成包含类似于语义token的内容信息,而后续量化器补充剩余的副语言信息,如图 1 所示。
基于上述动机,我们提出了 SpeechTokenizer,一种用于语音大语言模型的统一语音tokenizer。SpeechTokenizer 采用带残差矢量量化的编码器-解码器架构。通过统一的语义和声学token,SpeechTokenizer 在不同的 RVQ 层上分层解开语音信息的不同方面。通过使用语义teacher来指导第一个 RVQ 量化器,第一层token可以有效地捕获内容信息。借助残差结构,后续量化器可以补充剩余的副语言信息。在 SpeechTokenizer 的基础上,我们构建了一个由自回归和非自回归模型组成的统一语音语言模型。实验结果表明,SpeechTokenizer 在语音重建方面的表现与 EnCodec 相当,并在 SLMTokBench 基准上表现出色。USLM 在零样本文本转语音 (TTS) 任务中的表现明显优于 VALL-E。
我们的贡献包括:
- 我们提出了 SpeechTokenizer,它是专为语音大语言模型设计的,通过分层解开语音信息的不同方面来统一语义和声学token。
- 我们建立了 SLMTokBench,这是第一个评估语音token是否适合构建语音语言模型的基准。
- 我们基于 SpeechTokenizer 构建了一个统一的语音语言模型,该模型在零样本 TTS 任务上的表现优于 VALL-E。
2. SLMTOKBENCH: SPEECH LANGUAGE MODEL TOKEN BENCHMARK
为了构建强大的语音语言模型,离散语音表示应具备以下两个关键特征:i)与文本的强对齐性;ii)有效保留语音信息。在此前提下,我们建立了语音语言模型token基准(SLMTokBench)来评估语音token对于构建语音语言模型的适用性。
2.1 TEXT ALIGNMENT EVALUATION
我们通过估计语音token和文本之间的互信息来评估文本对齐的程度。符号表示为:
X
\textbf X
X 表示离散语音表示;
Y
\textbf Y
Y 表示文本;
I
(
X
;
Y
)
\mathcal I(\textbf X;\textbf Y)
I(X;Y) 表示互信息;测试数据集表示为
D
=
{
(
x
i
,
y
i
)
}
i
=
1
N
\mathcal D = \{(x_i, y_i)\}^N_{i=1}
D={(xi,yi)}i=1N,
θ
θ
θ 表示下游模型。通过附录 A 中的推导,我们可以将
I
(
X
;
Y
)
\mathcal I(\textbf X;\textbf Y)
I(X;Y) 估计为:
I
^
(
X
;
Y
)
=
1
N
2
∑
i
=
1
N
∑
j
=
1
N
[
l
o
g
q
θ
(
y
i
∣
x
i
)
−
l
o
g
q
θ
(
y
j
∣
x
i
)
]
\hat{\mathcal I}(\textbf X;\textbf Y)=\frac{1}{N^2}\sum^N_{i=1}\sum^N_{j=1}[log~q_{\theta}(y_i|x_i)-log~q_{\theta}(y_j|x_i)]
I^(X;Y)=N21i=1∑Nj=1∑N[log qθ(yi∣xi)−log qθ(yj∣xi)]
其中
q
θ
(
Y
∣
X
)
q_θ(\textbf Y|\textbf X)
qθ(Y∣X) 是变分分布,可以通过下游模型
θ
θ
θ 进行参数化。
下游模型是一个普通的 2 层 1024 单元 BLSTM,通过字符 CTC 损失进行优化,并将语音token作为输入。具体而言,对于每个离散表示,我们首先建立一个嵌入矩阵,该矩阵可以随机初始化,也可以从离散化过程中获得的 k-means 质心矩阵或矢量量化码本中派生而来。我们使用嵌入矩阵嵌入离散表示并获得连续表示,然后将其输入到下游模型中。我们在 LibriSpeech train-clean100 子集上训练下游模型,并使用 dev-clean 子集来估计互信息。我们还计算了测试集上的字错误率 (WER)。对于下游模型训练,我们将训练设置配置为批次大小为 32、学习率为 1e-4,总共 200k 个全局步骤。
2.2 INFORMATION PRESERVATION EVALUATION
为了评估离散语音表示中语音信息的保存情况,我们将语音token转换回语音,并通过内容和音色的自动指标评估重新合成的语音。我们在 LibriSpeech 数据集上训练一个 unit-HiFIGAN,将 HuBERT 单元转换为波形。值得注意的是,为了避免其他信息的干扰,我们在训练期间不提供任何说话人信息。对于 Encodec 标记,我们使用 Encodec 解码器直接生成波形。通过使用 Whisper en-medium 模型转录重新合成的语音来计算 WER,可以评估内容保存情况。通过使用 WavLM-TDNN 计算合成语音和真实语音之间的说话人相似性来评估音色保存情况。我们从 LibriSpeech 测试集中随机抽取 300 个语音样本进行评估。
2.3 COMPARING SEMANTIC & ACOUSTIC TOKENS
我们使用 HuBERT L9 单元表示语义token,使用 EnCodec code表示声学token。如表 3 所示,语义token与文本实现了较高的互信息,但其重新合成的语音具有较低的说话人相似度。声学token在重新合成的语音中实现了较低的 WER 和较高的说话人相似度,但与文本的互信息较低。
3.SPEECHTOKENIZER
3.1 MODEL STRUCTURE
我们的模型建立在 RVQ-GAN 框架上,遵循与 SoundStream 和 EnCodec 相同的模式。如图 2 所示,我们的模型使用 EnCodec 的基于卷积的编码器-解码器网络,该网络使用选定的步幅因子执行时间降采样。值得注意的是,我们用两层 BiLSTM 替换了原来跟随 EnCodec 编码器中的卷积块的两层 LSTM,以增强语义建模能力。我们在附录 B 中对模型结构进行了消融研究。我们使用残差矢量量化 (RVQ) 量化编码器输出,这种方法可以使用不同的码本在初始量化步骤之后量化残差。模型结构的更多细节可以在附录 D 中找到。在训练期间,语义teacher提供语义表示来指导残差量化过程。
3.2 SEMANTIC DISTILLATION
为了实现跨不同 RVQ 层的各种信息的分层建模,我们对第一个量化器采用语义指导,使其能够捕获内容信息。利用残差结构,后续量化器可以补充剩余的副语言信息。
在本研究中,我们使用 HuBERT 作为语义teacher,因为 HuBERT 被证明包含大量内容信息。我们引入了两种类型的蒸馏:连续表示蒸馏和伪标签预测。
对于连续表示蒸馏,我们采用第 9 层 HuBERT 表示或所有 HuBERT 层的平均表示作为语义teacher。训练目标是在所有时间步长中最大化 RVQ 第一层输出与语义teacher表示之间维度级别的余弦相似度。正式来说,连续蒸馏损失为:
L
d
i
s
t
i
l
l
=
−
1
D
∑
d
=
1
D
l
o
g
σ
(
c
o
s
(
A
Q
1
(
:
,
d
)
,
S
(
:
,
d
)
)
,
\mathcal L_{distill}=-\frac{1}{D}\sum^D_{d=1}log\sigma(cos(\textbf A\textbf Q^{(:,d)}_1,\textbf S^{(:,d)}),
Ldistill=−D1d=1∑Dlogσ(cos(AQ1(:,d),S(:,d)),
其中
Q
1
\textbf Q_1
Q1 和
S
\textbf S
S 分别表示 RVQ 第一层和语义teacher表示的量化输出。
A
\textbf A
A 表示投影矩阵,
D
D
D 表示语义teacher表示的维度。上标
(
:
,
d
)
(:, d)
(:,d) 表示包含维度
d
d
d 上所有时间步长的值的向量。
c
o
s
(
⋅
)
cos(·)
cos(⋅) 表示余弦相似度,
σ
(
⋅
)
σ(·)
σ(⋅) 表示 sigmoid 激活。这种连续蒸馏损失函数偏离了常用的方法,后者根据student和teacher模型在同一时刻输出的表示来计算损失。附录 C 提供了这两种方法的比较分析。
对于伪标签预测,我们采用 HuBERT 单元作为目标标签。训练目标构造如下:
L
d
i
s
t
i
l
l
=
−
1
T
∑
t
=
1
T
u
t
l
o
g
(
S
o
f
t
m
a
x
(
A
q
1
t
)
)
\mathcal L_{distill}=-\frac{1}{T}\sum^T_{t=1}\textbf u^tlog(Softmax(\textbf A\textbf q^t_1))
Ldistill=−T1t=1∑Tutlog(Softmax(Aq1t))
其中
q
1
t
\textbf q^t_1
q1t 和
u
t
\textbf u^t
ut 分别表示第一个 VQ 层和 HuBERT 单元在时刻
t
t
t 的量化输出。
T
T
T 表示时间步数,
A
\textbf A
A 是投影矩阵。
3.3 TRAINING OBJECTIVE
我们的训练方法包括重建任务和语义蒸馏任务。在重建任务中,我们采用 GAN 目标,优化重建项、判别损失项和 RVQ 承诺损失的组合。在语义蒸馏任务中,训练目标涉及语义蒸馏损失项。在下文中,
x
\textbf x
x 表示语音信号,
x
^
\hat {\textbf x}
x^ 表示由神经网络重建的信号。
Reconstruction Loss。重构损失包括时域损失和频域损失。对于时域,我们最小化
x
\textbf x
x 和
x
^
\hat {\textbf x}
x^ 之间的 L1 距离,即
L
t
=
∣
∣
x
−
x
^
∣
∣
1
\mathcal L_t =||\textbf x−\hat{\textbf x}||_1
Lt=∣∣x−x^∣∣1。对于频域,我们使用几个时间尺度在梅尔谱图上线性组合 L1 和 L2 损失。形式上,
L
f
=
∑
i
∈
e
∣
∣
S
i
(
x
)
−
S
i
(
x
^
)
∣
1
+
∣
∣
S
i
(
x
)
−
S
i
(
x
^
)
∣
∣
2
\mathcal L_f=\sum_{i∈e}||\mathcal S_i(\textbf x)−\mathcal S_i(\hat{\textbf x})|_1 +||\mathcal S_i(\textbf x)− S_i(\hat{\textbf x})||_2
Lf=∑i∈e∣∣Si(x)−Si(x^)∣1+∣∣Si(x)−Si(x^)∣∣2,其中
S
i
\mathcal S_i
Si 是使用窗口大小为
2
i
2^i
2i 且跳跃长度为
2
i
/
4
2^i/4
2i/4 的归一化 STFT 的 64 维梅尔谱图,
e
=
5
,
⋅
⋅
⋅
,
11
e = 5,···,11
e=5,⋅⋅⋅,11 是尺度集。
Discriminative Loss。我们使用与 HiFi-Codec 相同的判别器,该判别器由三个判别器组成:基于多尺度 STFT (MS-STFT) 的判别器;多周期判别器 (MPD) 和多尺度判别器 (MSD)。有关判别器的更多详细信息,请参见附录 D。对抗损失用于提升感知质量,它被定义为判别器logits的铰链损失,在多个判别器和时间上取平均值。令
K
K
K 表示判别器的数量,生成器的对抗损失
L
g
\mathcal L_g
Lg构造如下,
L
g
=
1
K
∑
k
=
1
K
m
a
x
(
1
−
D
k
(
x
^
)
,
0
)
\mathcal L_g =\frac{1}{K}\sum^K_{k=1} max(1 − D_k(\hat{\textbf x}), 0)
Lg=K1∑k=1Kmax(1−Dk(x^),0)。对于判别器
L
D
\mathcal L_D
LD 则定义为:
L
D
=
1
K
∑
k
=
1
K
m
a
x
(
1
−
D
k
(
x
)
,
0
)
+
m
a
x
(
1
+
D
k
(
x
^
)
,
0
)
,
\mathcal L_D=\frac{1}{K}\sum^K_{k=1} max(1 − D_k(\textbf x), 0)+max(1+D_k(\hat {\textbf x}),0),
LD=K1k=1∑Kmax(1−Dk(x),0)+max(1+Dk(x^),0),
此外,生成器的特征匹配损失计算如下:
L
f
e
a
t
=
1
K
L
∑
k
=
1
K
∑
l
=
1
L
∣
∣
D
k
l
(
x
)
−
D
k
l
(
x
^
)
∣
∣
1
m
e
a
n
(
∣
∣
D
k
l
(
x
)
∣
∣
1
)
,
\mathcal L_{feat}=\frac{1}{KL}\sum^K_{k=1}\sum^L_{l=1}\frac{||D^l_k(x)-D^l_k(\hat{\textbf x})||_1}{mean(||D^l_k(\textbf x)||_1)},
Lfeat=KL1k=1∑Kl=1∑Lmean(∣∣Dkl(x)∣∣1)∣∣Dkl(x)−Dkl(x^)∣∣1,
其中均值是在所有维度上计算的,
L
L
L 是判断器的层数。