Jukebox
Jukebox是OpenAI发布的一个自动点唱机,这是一种生成音乐的神经网络,它能生成包括基本唱法在内的、包含各种流派和艺术家风格的原始音频音乐。
本作品不仅能完成乐曲生成,还能完成完成歌声合成的任务,并且可以指定生成条件(流派、歌手等),生成音频效果清晰,基于pytorch实现的VQ-VAE,训练应用比较便利。同时作者训练使用的120万英文歌曲数据,以及模型的可拓展性、可自定义非常具有吸引力
1 动机和之前的工作
音乐的自动生成可以追溯到半个多世纪以前。一个主要的方法是以钢琴卷帘的形式象征性的生成音乐,这种卷帘指定了要演奏的每个音符的时间、音高、速度和乐器。这已经产生了令人印象深刻的结果,如生成巴赫合唱团,多乐器复调音乐,以及分钟级长的音乐作品。(主要参照MIDI音乐)
但是符号发生器有其局限性--它们无法捕捉人类的声音,也无法捕捉许多对音乐至关重要的更微妙的音色、动态和表现力。另一种不同的方法是直接用波形建模音乐。在音频级别生成音乐是一种挑战,因为序列非常长。一首CD质量的、典型的4分钟歌曲(44khz,16-bit)有超过1000万个时间步。相比之下,GPT-2是1000个时间步,而OpenAI Five每局游戏为数万个时间步。因此,未来学习音乐的高级语义,模型必须处理极其长期的依赖关系。
解决长输入问题的一种方法是使用自动编码器,通过丢弃一些感知上无关的信息,将原始音频压缩到低维空间。然后我们可以训练一个模型在这个压缩空间上生成音频,然后上采样回到原始音频空间。
作者团队选择从事音乐工作,是因为想继续推动生成模型的边界。之前的MuseNet上的工作探索了基于大量MIDI数据的音乐合成。现在在原始音频中,模型必须学会处理高多样性和非常长的结构,而原始音频领域,短期、中期、长期的错误接受度都很低。
2 实现方法
2.1 把音乐压缩成离散编码
点唱机的自动编码模型将音频压缩到一个离散空间,使用一种称作VQ-VAE的基于量化的方法。层级VQ-VAEs能从几组伴奏中生成短的伴奏片段,但由于使用连续的编码器和自回归解码器,它们遭受了分层崩溃。一个简化的变种称作VQ-VAE-2避免了这些问题,它只使用前馈编码器和解码器,在产生高保真图像显示时令人印象深刻。
从VQ-VAE-2中获得灵感,并将他们的方法应用到音乐中。修改了他们的架构如下:
- 为了减轻VQ-VAE模型常见的码本崩溃,使用随机重启,当使用量低于阈值时,随机将码本向量重置为其中一个编码的隐状态;
- 为了最大限度地利用上层,使用单独的解码器,并独立地重建每个层次的编码输入;
- 为了使模型能够容易地重建更高的频率,增加了光谱损耗,惩罚输入和重建光谱图差异的标准;
在VQ-VAE中使用三个级别,分别将44kHz的原始音频压缩为8x、32x和128x,每个级别的码本大小为2048。这种下采样失去了大部分的音频细节,当我们进一步下降层级,声音明显嘈杂。但是,它保留了音频的音调、音色和音量的基本信息。
2.2 使用transformers生成编码
接下来,我们训练先前的模型,其目的是学习VQ-VAE编码的音乐编码的分布,并在这个压缩的离散空间中生成音乐。像VQ-VAE一样,我们有三个层次的先验:一个顶层先验产生最多的压缩编码,两个上采样先验产生较少的压缩编码。
顶层先验模型描述了音乐的远程结构,从这个层次解码的样本具有较低的音频质量,但是捕获了高级语义,如歌唱和旋律。中层和底层的上采样先验添加了本地音乐结构,如音色,显著改善音频质量。
我们使用一个简化的变种稀疏Transformers来训练这些自回归模型。每个模型都有72层分解的在8192个编码上下文的自注意,分别相当于在24秒、6秒、1.5秒的原始音频,分布在顶层、中层和底层。
一旦所有的先验都经过训练,我们就可以从顶层生成编码,使用上采样器对它们进行上采样,然后使用VQ-VAE解码器将它们解码回原始音频空间,从而对新颖的歌曲进行生成。
2.3 数据集
训练这个模型,使用了网上搜索的120万首歌曲(其中60万首是英文歌曲),并与LyricWiki中相应的歌词和元数据进行了配对。元数据包括歌曲的作者、专辑和年份,以及与每首歌相关的常见情绪或播放列表关键字。在32位、44.1kHz的原始音频上进行训练,并通过随机混合左右声道产生单声道音频来实现数据增强。
2.4 艺术家和流派条件作用
顶层Transformer接受“预测压缩音频令牌”的训练。可以提供额外的信息,比如每首歌的歌手和风格。这有两个优点:第一,它减少了音频预测的熵,因此模型能够在任何特定的风格中获得更好的质量;第二,在生成时,我们能够引导模型按照我们选择的风格生成。
2.5 歌词条件作用
除了艺术家和流派,我们可以通过调节歌曲的歌词模型,在训练时提供更多的背景。
一个重大的挑战是缺乏一个良好对齐的数据集:只有歌词级别的歌曲,没有对齐的音乐,因此对于给定的音频块,不知道歌词的哪一部分(如果有的话)出现。也有可能有与歌词版本不匹配的歌曲版本,如果一首给定的歌曲是由几个不同的歌手以略有不同的方式演唱,就可能发生这种情况。此外,歌手经常重复短语,或以其他方式改变歌词,而这些并不总是被写在歌词里。
为了将音频部分与相应的歌词匹配,从一个简单的启发式方法开始,将歌词的字符线性地跨越每首歌的持续时间,并在训练期间传递一个固定大小的字符窗口,该窗口以当前片段为中心。虽然这种简单的线性对齐策略出人意料的奏效,但发现它对于某些歌词速度快的流派来说是失败的,比如嘻哈。为了解决这个问题,使用Spleeter从每首歌中提取人声,并在提取的人声上运行NUS AutoLyricsAlign,以获得歌词的精确单词级比对。选择了一个足够大的窗口,以便实际的歌词有很高的可能性在窗口内。
为了关注歌词,添加了一个编码器来生成歌词的表示,并添加了注意力层,它使用音乐解码器的索引来关注歌词编码器的keys和values。经过训练,模型能学习到一个更精确的校准。
3 局限性
尽管自动点唱机代表着音乐质量、连贯性、音频样本长度以及对艺术家、流派和歌词进行调整的能力上向前迈进了一步,但这些与人类创造的音乐之间还是存在巨大的差距。例如,虽然生成的歌曲表现出当地音乐的连贯性,遵循传统的和弦模式,甚至可以表现出令人印象深刻的独奏,但我们没有听到熟悉的更大的音乐结构,如重复的合唱。
下采样和上采样过程中引入了可辨别的噪声,改善VQ-VAE,使其编码捕捉更多音乐信息,将有助于减少这一点。
由于抽样的自回归性质,模型抽样速度也很慢。通过模型渲染一分钟的音频大约需要9个小时,因此它们还不能用于交互式应用程序。使用将模型提取到并联取样器的技术可以显著加快取样速度。
最后,目前训练的还是英语歌词和西式音乐,在未来,期望能包括其他语言和世界各地的歌曲。
4 个人展望
采用VQ-VAE直接对音频进行建模,并使用当下流行的Transformer做编码预测,使得该工作有很扎实的基础。其实在考虑完全的有人声歌曲的时候,可以考虑限定使用范围,让模型更专注和高效。例如,通过人声分离,构建专门的伴奏数据集,同时限定片段生成长度,例如1分钟内。更长时间的结构和样式可以用人工pattern来替代。生成有限伴奏音乐,同时这样对于错误的容忍度也比人声歌曲要高很多。
构建伴奏数据集也是一项重要和富有考验的事情,并且可以先期应用到其他APP里。