摘要
得益于有效的语音建模,当前的语音大型语言模型 (SLLM) 已展示出卓越的上下文语音生成能力和对未见过的说话人的有效泛化能力。然而,现行的信息建模过程受到某些冗余的阻碍,导致语音生成效率低下。我们提出了Chain-of-Information Generation (CoIG),这是一种在大规模语音生成中分离语义和声学信息的方法。在此基础上,我们开发了 SpeechGPT-Gen,这是一个 80 亿参数的 SLLM,在语义和声学信息建模方面非常高效。它包括一个基于 LLM 的自回归模型(用于语义信息建模)和一个采用Flow-Matching的非自回归模型(用于声学信息建模)。此外,我们引入了一种将语义信息注入先验分布的新方法,以提高Flow-Matching的效率。大量实验结果表明,SpeechGPT-Gen 在零样本文本转语音、零样本语音转换和语音转语音对话方面表现优异,凸显了 CoIG 在捕捉和建模语音语义和声学维度方面的卓越能力。代码和模型可在 https://github.com/0nutation/SpeechGPT 上找到。
1.介绍
以 ChatGPT 和 LLaMA 为代表的大型语言模型 (LLM) 凭借大规模参数展现出卓越的能力。缩放定律表明,模型大小和数据量在提高性能方面起着关键作用。对于语音生成模型,最近人们努力将训练数据扩展到近 10 万小时的自然语音,这展示了其在上下文语音生成方面的卓越能力,特别是在泛化到未见过的说话人方面。从信息建模的角度来看,当前的大规模语音生成方法可分为两种类型:1)集成生成,涉及同时建模语义和声学信息,而无需在语音生成过程中进行解耦。2)语义解耦生成,最初侧重于语义建模,然后对语义和声学信息进行集成建模以生成完整的语音。然而,尽管他们实现了高质量的语音生成,但在建模过程中不可避免地存在冗余,这表现出潜在的低效率并需要复杂的策略。
因此,本文提出了信息链生成(CoIG),一种语义和声学解耦的大规模语音生成方法。与思维链类似,信息链将复杂的语音生成过程分解为多个中间步骤,从语义建模过程开始,然后结合声学建模生成完整的语音。基于信息链生成,我们构建了 SpeechGPT-Gen,这是一种具有强大语义和声学建模能力的语音大型语言模型 (SLLM)。在建模方面,我们使用 SpeechTokenizer 分别提取包含语义和声学信息的两个独立表示。SpeechGPT-Gen 由基于 LLM 的语义建模自回归模型和基于Flow-Matching的非自回归声学建模模型组成。Flow-Matching有效地模拟了从简单先验分布到复杂数据分布的转换,并在语音生成中取得了令人鼓舞的结果。我们提出了两种用于声学建模的Flow-Matching模式:1)显式链,直接对语音声学表示之前的标准高斯概率路径进行建模。2)隐式链,对包含完整语音信息的表示之前注入的语义概率路径进行建模,利用语义和声学信息之间的互补关系隐式地进行声学建模。
通过将模型参数扩大到 80 亿,SpeechGPT-Gen 得益于 CoIG 的高效性,展现出强大的语义和声学建模能力,在零样本文本转语音、零样本语音转换和语音转语音对话等方面取得了令人瞩目的成绩。
我们的贡献包括:
- 我们引入了信息链生成,一种用于大规模语音生成的语义和声学解藕建模方法。
- 我们提出了 SpeechGPT-Gen,这是一个具有强大语义和声学建模能力的大型语音语言模型。
- 我们提出通过将语义信息注入到先验分布中来提高Flow-Matching的效率。
- 我们将语音生成模型的参数扩展到80亿,在零样本文本转语音、零样本语音转换和语音转语音对话中取得了显著的表现。
2.相关工作和背景
Large Scale Speech Generation。最近,一系列语音生成工作都致力于扩大语音数据量以提高泛化能力。第一类方法涉及基于语音离散表示的自回归建模,如 VALL-E 和 USLM。他们将语音生成任务视为条件语言建模问题。第二类方法利用基于diffusion或flow-matching的非自回归建模,例如 NaturalSpeech2 和 Voicebox。他们学习将简单的先验分布转换为复杂的语音表示分布。这两种方法在语音生成任务中都表现出强大的泛化能力。然而,从信息建模的角度来看,它们的建模过程存在一定的冗余。SpeechGPT-Gen 采用信息链建模方法,并按顺序执行语义和声学建模。
Disentangled Speech Modeling。语音解藕广泛应用于传统的小规模语音生成任务,如语音转换和语音编码,但尚未应用于大规模语音生成。SpeechTokenizer 在残差矢量量化 (RVQ)-GAN 上采用语义监督,以跨不同 RVQ 层分层解藕语音信息的不同方面。具体而言,第一个 RVQ 量化器生成包含语义信息的token,而后续量化器补充剩余的副语言信息。我们利用 SpeechTokenizer 提取的解藕语音表示来构建大规模语音生成模型。
Flow Matching for Speech Generation。Continuous Normalizing Flows (CNFs) 旨在通过学习从简单先验分布
p
0
p_0
p0 到数据分布
p
1
≈
q
p_1 ≈ q
p1≈q 的概率路径来估计数据
x
∈
R
d
x ∈ \mathbb R^d
x∈Rd 的未知分布
q
(
x
)
q(x)
q(x)。CNFs 通过时间相关的概率密度函数
p
t
:
[
0
,
1
]
×
R
d
→
R
+
p_t : [0, 1] × \mathbb R^d → \mathbb R^+
pt:[0,1]×Rd→R+ 定义路径。由时间相关的矢量场
v
t
:
[
0
,
1
]
×
R
d
→
R
d
v_t : [0, 1] × \mathbb R^d → \mathbb R^d
vt:[0,1]×Rd→Rd 构造的流
ϕ
t
:
[
0
,
1
]
×
R
d
→
R
d
ϕ_t : [0, 1] × \mathbb R^d → \mathbb R^d
ϕt:[0,1]×Rd→Rd 通过常微分方程 (ODE) 定义:
d
d
t
ϕ
t
(
x
)
=
v
t
(
ϕ
t
(
x
)
)
;
ϕ
0
(
x
)
=
x
(1)
\frac{d}{dt}\phi_t(x)=v_t(\phi_t(x));\quad \phi_0(x)=x\tag{1}
dtdϕt(x)=vt(ϕt(x));ϕ0(x)=x(1)
因此,通过变量变换公式可以推导出时间相关的概率密度函数
p
t
=
p
0
(
ϕ
t
−
1
(
x
)
)
d
e
t
(
∂
ϕ
t
−
1
∂
x
(
x
)
)
p_t = p_0(ϕ^{−1}_t(x)) det (\frac{∂ϕ^{−1}_t}{∂x}(x))
pt=p0(ϕt−1(x))det(∂x∂ϕt−1(x))。Flow-Matching目标可以表述为:
L
F
M
(
θ
)
=
E
t
∼
U
[
0
,
1
]
,
x
∼
p
t
(
x
)
∣
∣
u
t
(
x
)
−
v
t
(
x
;
θ
)
∣
∣
2
(2)
L_{FM}(\theta)=\mathbb E_{t\sim U[0,1],x\sim p_t(x)}||u_t(x)-v_t(x;\theta)||^2\tag{2}
LFM(θ)=Et∼U[0,1],x∼pt(x)∣∣ut(x)−vt(x;θ)∣∣2(2)
其中
u
t
u_t
ut 是生成概率路径
p
t
p_t
pt 的矢量场,
v
t
(
x
;
θ
)
v_t(x; θ)
vt(x;θ) 是由神经网络
θ
θ
θ 参数化的矢量场。然而,由于缺乏
p
t
p_t
pt 或
v
t
v_t
vt 的先验知识,
L
F
M
L_{FM}
LFM 是无法计算的。幸运的是,(Lipman et al., 2023) 提出了Conditional Flow Matching (CFM) 目标,如下所示:
L
C
F
M
(
θ
)
=
E
t
,
q
(
x
1
)
,
p
t
(
x
∣
x
1
)
∣
∣
u
t
(
x
∣
x
1
)
−
v
t
(
x
;
θ
)
∣
∣
2
.
(3)
\mathcal L_{CFM}(\theta)=\mathbb E_{t,q(x_1),p_t(x|x_1)}||u_t(x|x_1)-v_t(x;\theta)||^2.\tag{3}
LCFM(θ)=Et,q(x1),pt(x∣x1)∣∣ut(x∣x1)−vt(x;θ)∣∣2.(3)
通过对真实数据
x
1
x_1
x1 进行 p_t 和 v_t 的条件化,并证明 FM 和 CFM 具有相同的梯度,用于训练生成模型。我们可以采用最优传输 (OT) 路径作为条件流,定义为
p
t
(
x
∣
x
1
)
=
N
(
x
∣
t
x
1
,
(
1
−
(
1
−
σ
m
i
n
)
t
)
2
I
)
p_t(x|x_1) = \mathcal N (x|tx_1,(1−(1−σ_{min})t)^2I)
pt(x∣x1)=N(x∣tx1,(1−(1−σmin)t)2I) 和
u
t
(
x
∣
x
1
)
=
(
x
1
−
(
1
−
σ
m
i
n
)
x
)
/
(
1
−
(
1
−
σ
m
i
n
)
t
)
u_t(x|x_1) = (x_1 − (1 − σ_{min})x)/(1− (1 − σ_{min})t)
ut(x∣x1)=(x1−(1−σmin)x)/(1−(1−σmin)t),其中
σ
m
i
n
σ_{min}
σmin 足够小,使得
p
1
(
x
∣
x
1
)
p_1(x|x_1)
p1(x∣x1) 以
x
1
x_1
x1 为中心。
利用
L
C
F
M
L_{CFM}
LCFM 作为训练目标函数,一些研究已成功将flow-matching用于语音生成,并取得了令人鼓舞的结果。然而,它们通常将过程从简单的先验分布建模为包含完整语音信息的梅尔频谱图或潜在特征。相比之下,SpeechGPT-Gen 使用流匹配来建模语音中的声学信息,并通过修改先验分布来提高其效率。
3.SpeechGPT-Gen
SpeechGPT-Gen 基于信息链生成方法,依次进行语义建模和声学建模。SpeechTokenizer 用于提取语义表示和声学表示。SpeechGPT-Gen 由基于 LLM 的语义建模自回归模型和基于flow-matching的非自回归模型组成。
3.1 Speech Tokenization
SpeechTokenizer 是一种基于残差矢量量化 (RVQ) 的语音token华方法,它在不同的 RVQ 层上分层地分解语音信息的不同方面。具体而言,第一个 RVQ 量化器生成包含语义信息的token,而后续量化器则补充剩余的声学信息。SpeechTokenizer 将表示为 s ∈ R d ⋅ f s r s ∈ \mathbb R^{d·f_{sr}} s∈Rd⋅fsr 的单通道音频信号作为输入,其中 d d d 表示持续时间, f s r f_{sr} fsr 表示采样率。SpeechTokenizer 的输出包括 Q = 8 Q = 8 Q=8 个分层 RVQ token ( q 1 , . . . , q Q ) (q_1, . . . , q_Q) (q1,...,qQ) 和 Q Q Q 个码本 ( C 1 , . . . , C Q ) (C_1, . . . , C_Q) (C1,...,CQ),用于相应的 RVQ 层。 q i ∈ R T q_i ∈ \mathbb R^T qi∈RT 表示长度为 T T T 的一维序列。RVQ token q i q_i qi 可以嵌入到码本 C i ∈ R K × H C_i ∈ \mathbb R^{K×H} Ci∈RK×H 中,得到连续向量序列 v i ∈ R T × H v_i ∈ \mathbb R^{T ×H} vi∈RT×H,其中,对于 i ∈ 1 , . . . , Q , j ∈ 1 , . . . , T i ∈ 1, ..., Q, j ∈ 1, ..., T i∈1,...,Q,j∈1,...,T有 v i j = C i ( q i j ) v^j_i = C_i(q^j_i) vij=Ci(qij)。所有 RVQ 层的连续表征之和表示为 v 1 : 8 = ∑ i = 1 Q v i v_{1:8} =\sum^Q_{i=1} v_i v1:8=∑i=1Qvi,涵盖了语音中的所有信息。我们利用来自第一个 RVQ 层 q 1 q_1 q1 的token作为包含语义信息的表示,利用从第二层到最后一层的连续向量之和 v 2 : 7 = ∑ i = 2 Q v i v_{2:7} =\sum^Q_{i=2} v_i v2:7=∑i=2Qvi 作为包含声学信息的表示。我们在 CommonVoice 和 LibriSpeech 数据集上训练 SpeechTokenizer,其他设置与 (Zhang et al., 2023b) 相同。
3.2 LLM for Semantic Modeling
SpeechGPT 是一个大型跨模态语言模型,可以执行跨模态指令遵循和语音对话,表现出出色的语音语义建模能力。利用 HuBERT 将语音离散化为单元,SpeechGPT 执行模态自适应预训练、跨模态指令微调和模态链指令微调。我们使用 SpeechGPT 进行语音语义建模,用 SpeechTokenizer RVQ-1 token
q
1
q_1
q1 替换 HuBERT 离散单元。对于模型结构,我们采用 LLaMA2-7B-Chat 作为预训练的 LLM。对于训练数据,我们采用 SpeechTokenizer RVQ-1 token来表示语音,并遵循 SpeechInstruct 的流程和设置来构建训练数据集
D
D
D,包括跨模态指令集和模态链指令集。我们使用 Multilingual Librispeech、Gigaspeech、Commonvoice 和 Librispeech 来构建跨模态指令集。对于训练,我们跳过模态适应预训练,使用跨模态指令集
I
I
I 对 LLaMA2-7B-Chat 进行跨模态指令微调。在模态链指令微调中,我们选择全参数微调,而不是在模态链指令集上进行 LoRA 微调。两个训练阶段的训练目标可以格式化为:
L
a
r
=
−
l
o
g
∏
t
=
0
n
P
(
d
t
∣
d
<
t
;
θ
a
r
)
(4)
L_{ar}=-log\prod^n_{t=0}P(d_t|d_{\lt t};\theta_{ar})\tag{4}
Lar=−logt=0∏nP(dt∣d<t;θar)(4)
其中
d
∈
D
d ∈ D
d∈D 由
d
1
,
.
.
.
,
d
n
d_1, . . . , d_n
d1,...,dn 组成,
n
n
n 是样本
d
d
d 中的token总数,
θ
a
r
θ_{ar}
θar 表示 SpeechGPT 的参数。
3.3 Flow Matching for Perceptual Modeling
Flow matching有效地模拟了从简单先验分布到复杂数据分布的转换,并在语音生成中取得了良好的效果。我们使用Flow matching进行声学建模。如图 2 所示,给定语音
s
s
s、语义表示
v
1
v_1
v1、感知表示
v
2
:
8
v_{2:8}
v2:8 和 SpeechTokenizer 提取的完整信息表示
v
1
:
8
=
v
1
+
v
2
:
8
v_{1:8} = v_1 + v_{2:8}
v1:8=v1+v2:8,声学建模是指给定提示语音
a
a
a 和语义表示
v
1
v_1
v1 来预测完整表示
v
1
:
8
v_{1:8}
v1:8。我们提出了两种用于声学建模的流匹配模式:显式链和隐式链。
Explicit Chain。对于显式链,该模型根据语义表示和语音提示,直接从标准高斯先验生成声学表示。具体来说,Flow matching以连续的方式模拟从简单的标准高斯先验分布
p
0
=
N
(
x
0
∣
µ
=
0
,
σ
=
1
)
p_0 = N(x_0|µ = 0, σ = 1)
p0=N(x0∣µ=0,σ=1) 到感知表示
v
2
:
8
v_{2:8}
v2:8 的数据分布
p
1
p_1
p1 的转换路径。我们使用流步骤
t
t
t 来描述转换的进度,其中先验在
t
=
0
t = 0
t=0 处,数据在
t
=
1
t = 1
t=1 处。我们让
x
1
=
v
2
:
8
x_1 = v_{2:8}
x1=v2:8、先验
p
0
=
N
(
x
0
∣
µ
=
0
,
σ
=
1
)
p_0 = N(x_0|µ = 0, σ = 1)
p0=N(x0∣µ=0,σ=1) 和
z
=
v
1
z = v_1
z=v1。
Implicit Chain。对于隐式链,模型不显式地生成声学表示。相反,它利用语义表示
v
1
v_1
v1 和声学表示
v
2
:
8
v_{2:8}
v2:8 之间的互补关系,即
v
2
:
8
=
v
1
:
8
−
v
1
v_{2:8} = v_{1:8}−v_1
v2:8=v1:8−v1。具体来说,我们将语义信息注入先验分布中以获得语义先验:
p
0
=
N
(
x
0
∣
μ
=
v
1
,
σ
=
1
)
p_0=N(x_0|\mu=v_1,\sigma=1)
p0=N(x0∣μ=v1,σ=1)
通过连续建模从语义先验
p
0
p_0
p0 到完整信息表示
v
1
:
8
v_{1:8}
v1:8 的数据分布
p
1
p_1
p1 的转换路径,模型学习补充声学信息以获得完整信息,隐式地进行感知建模。我们使用流程步骤
t
t
t 来描述转换的进度,其中先验在
t
=
0
t = 0
t=0 处,数据在
t
=
1
t = 1
t=1 处。我们设置
x
1
=
v
1
:
8
x_1 = v_{1:8}
x1=v1:8、先验
p
0
=
N
(
x
0
∣
µ
=
v
1
,
σ
=
1
)
p_0 = N(x_0|µ = v_1, σ = 1)
p0=N(x0∣µ=v1,σ=1) 和
z
=
v
1
z = v_1
z=v1。
Training。在确定
x
1
x_1
x1、
p
0
p_0
p0 和
z
z
z 之后,我们使用Flow matching训练声学建模模型。令
m
m
m 为长度与
x
1
x_1
x1 相同的二元时间掩码
N
N
N,
x
t
g
t
=
m
⊙
x
1
x_{tgt} =m ⊙ x_1
xtgt=m⊙x1 和
x
p
m
t
=
(
1
−
m
)
⊙
x
1
x_{pmt} = (1 − m) ⊙ x_1
xpmt=(1−m)⊙x1 为
x
1
x_1
x1 的互补掩码版本。生成模型以
z
z
z 和
x
p
m
t
x_{pmt}
xpmt 作为条件,以
x
t
g
t
x_{tgt}
xtgt 作为预测数据,学习
p
(
x
t
g
t
∣
z
,
x
p
m
t
)
p(x_{tgt}|z, x_{pmt})
p(xtgt∣z,xpmt)。
m
[
:
n
]
=
0
,
m
[
n
:
]
=
1
m[: n] = 0,m[n:] = 1
m[:n]=0,m[n:]=1,其中
n
∼
µ
(
0
,
N
)
n ∼ µ(0, N)
n∼µ(0,N)。我们使用由
θ
θ
θ 参数化的 Conformer 编码器来预测条件向量场
v
t
(
x
t
,
x
p
m
t
,
z
;
θ
)
vt(x_t, x_{pmt}, z; θ)
vt(xt,xpmt,z;θ),其中
x
t
x_t
xt 表示流步骤
t
t
t 处的样本。序列 (
x
t
x_t
xt 和
z
z
z) 逐帧连接并投影,然后与
x
p
m
t
x_{pmt}
xpmt 连接,然后作为输入发送到 Conformer。在训练期间,对于
x
x
x 和先验样本
x
0
∼
p
0
x_0 ∼ p_0
x0∼p0,我们有:
x
t
=
(
1
−
(
1
−
σ
m
i
n
)
t
)
x
0
+
t
x
1
(5)
x_t=(1-(1-\sigma_{min})t)x_0+tx_1\tag{5}
xt=(1−(1−σmin)t)x0+tx1(5)
u
t
(
x
t
∣
x
1
)
=
x
1
−
(
1
−
σ
m
i
n
)
x
0
(6)
u_t(x_t|x_1)=x_1-(1-\sigma_{min})x_0\tag{6}
ut(xt∣x1)=x1−(1−σmin)x0(6)
我们设置
σ
m
i
n
=
0
\sigma_{min}=0
σmin=0。训练目标可以形式化为:
L
n
a
r
=
E
t
,
m
,
q
(
x
1
,
z
)
,
p
0
(
x
0
)
=
∣
∣
m
⊙
(
u
t
(
x
t
∣
x
1
)
−
v
t
(
x
t
,
x
p
m
t
,
z
;
θ
n
a
r
)
)
∣
∣
2
,
L_{nar}=\mathbb E_{t,m,q(x_1,z),p_0(x_0)}=||m⊙(u_t(x_t|x_1)-v_t(x_t,x_{pmt},z;\theta_{nar}))||^2,
Lnar=Et,m,q(x1,z),p0(x0)=∣∣m⊙(ut(xt∣x1)−vt(xt,xpmt,z;θnar))∣∣2,
采用多语言LibriSpeech进行训练,模型结构是具有双向自注意和旋转位置嵌入的标准Conformer网络。
Inference。给定语音提示
a
a
a 和从 SpeechGPT 派生的语义表示
v
1
v_1
v1,我们首先利用 SpeechTokenizer 为语音提示提取完整的信息表示
v
1
:
8
a
v^a_{1:8}
v1:8a。对于显式链,我们设置先前的
p
0
=
N
(
x
0
∣
µ
=
0
,
σ
=
1
)
p_0 = N(x_0|µ = 0, σ = 1)
p0=N(x0∣µ=0,σ=1)。对于隐式链,我们设置
p
0
=
N
(
x
0
∣
µ
=
v
1
,
σ
=
1
)
p_0 = N(x_0|µ = v_1, σ = 1)
p0=N(x0∣µ=v1,σ=1)。我们首先从先验的
p
0
p_0
p0 中采样
x
0
x_0
x0,然后利用 ODE 求解器通过在多个
t
t
t 处评估
v
t
v_t
vt 来计算
ϕ
1
(
x
0
)
ϕ_1(x_0)
ϕ1(x0),以在给定初始条件
ϕ
0
(
x
0
)
=
x
0
ϕ_0(x_0) = x_0
ϕ0(x0)=x0 和
d
ϕ
t
(
x
0
)
d
t
=
v
t
(
x
t
,
v
1
:
8
a
,
v
1
;
θ
)
\frac{dϕ_t(x_0)}{dt} = v_t(x_t, v^a_{1:8}, v_1; θ)
dtdϕt(x0)=vt(xt,v1:8a,v1;θ) 的情况下近似从
t
=
0
t = 0
t=0 到
t
=
1
t = 1
t=1 的积分。在每个步骤中,ODE 求解器根据上一步中的
t
t
t、
x
t
x_t
xt、语音提示
v
1
:
8
a
v^a_{1:8}
v1:8a、语义表示
v
1
v_1
v1 和模型
θ
θ
θ 来估计
x
t
+
1
x_{t+1}
xt+1。在最后一步之后,它生成
x
1
x_1
x1。对于显式链,
x
1
x_1
x1 包含声学信息,需要将其添加到
v
1
v_1
v1 中才能获得完整的信息表示
v
^
1
:
8
=
x
1
+
v
1
\hat v_{1:8} = x_1 + v_1
v^1:8=x1+v1。对于隐式链,
x
1
x_1
x1 包含整个语音信息,因此我们有
v
^
1
:
8
=
x
1
\hat v_{1:8} = x_1
v^1:8=x1。最后,我们使用 SpeechTokenizer 解码器生成以
v
1
:
8
v_{1:8}
v1:8 为条件的语音输出。
3.4 Application
Zero-shot Text-to-Speech。SpeechGPT-Gen 可以通过将给定的文本作为 SpeechGPT 的输入、将输出与提示语音连接、利用flowing matching模型以及将输出转换为合成语音,来合成具有给定提示音色的语音。
Zero-shot Voice Conversion。SpeechGPT-Gen 可以转换源语音的音色以匹配给定的提示语音。它通过使用提示语音和源语音的 SpeechTokenizer RVQ-1 token作为flowing matching模型的输入来实现这一点。处理结果输出以生成最终转换后的语音。
Speech-to-Speech Dialogue。SpeechGPT-Gen 可以用与给定语音提示音色相匹配的语音来响应语音指令。它通过使用语音指令的 SpeechTokenizer RVQ-1 token作为 SpeechGPT 的输入,将输出与提示语音连接起来,利用flowing matching模型,并将输出转换为合成语音来实现这一点。