❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦
🎵 “AI作曲时代来临!中央音乐学院联合北航、清华推出NotaGen,古典乐谱一键生成”
大家好,我是蚝油菜花。你是否也曾为创作古典音乐而苦恼?是否希望有一个工具能够快速生成符合特定风格的乐谱?今天,我要为大家介绍一款由中央音乐学院、北京航空航天大学、清华大学等机构联合推出的音乐生成模型——NotaGen。这款模型不仅能够生成高质量的古典乐谱,还能通过预训练、微调和强化学习相结合的方式,显著提升音乐的艺术性和可控性。接下来,让我们一起深入了解NotaGen的强大功能和技术原理。
🚀 快速阅读
NotaGen 是一款基于大型语言模型训练范式的音乐生成模型。
- 核心功能:生成高质量古典乐谱,支持多种风格和乐器的条件生成。
- 技术原理:通过预训练、微调和强化学习相结合的方式,优化生成音乐的质量和一致性。
NotaGen 是什么
NotaGen 是由中央音乐学院、北京航空航天大学、清华大学等机构联合推出的音乐生成模型,旨在通过模仿大型语言模型(LLM)的训练范式,生成高质量的古典乐谱。该模型基于预训练、微调和强化学习相结合的方法,预训练阶段使用了超过160万首乐曲,微调阶段则基于约9000首高质量古典作品,通过“时期-作曲家-乐器”提示进行条件生成。
在强化学习阶段,NotaGen 引入了 CLaMP-DPO 方法,对比学习模型 CLaMP² 为生成的音乐提供反馈,优化音乐性与可控性,无需人工标注或预定义奖励。NotaGen 在主观 A/B 测试中优于基线模型,接近人类作品的音乐美感,显著提升符号音乐生成的艺术性。
NotaGen 的主要功能
- 生成高质量古典乐谱:根据用户指定的时期(如巴洛克、古典、浪漫)、作曲家(如巴赫、莫扎特、肖邦)和乐器(如键盘、弦乐四重奏、管弦乐)生成符合特定风格的乐谱。
- 提升音乐性:基于预训练、微调和强化学习相结合的方式,生成具有高度音乐性(如旋律优美、和声流畅、结构连贯)的作品。
- 可控性生成:用户可以通过“时期-作曲家-乐器”等条件提示,控制生成音乐的风格和特点。
- 支持多种模型规模:提供不同参数规模的模型(如 NotaGen-small、NotaGen-medium 和 NotaGen-large),适应不同的硬件和应用场景。
NotaGen 的技术原理
- 预训练:在超过160万首乐曲上进行预训练,涵盖多种风格和乐器。基于大规模数据学习音乐的基本结构和模式,类似于语言模型中的“语言理解”阶段。用符号音乐表示(如 ABC 符号)进行编码,预测下一个符号的任务进行训练。
- 微调:在约9000首高质量古典作品上进行微调,针对特定风格(如巴洛克、古典、浪漫)和作曲家进行优化,生成符合特定风格的音乐。用“时期-作曲家-乐器”提示进行条件生成,增强模型对特定风格的理解和生成能力。
- 强化学习:基于 CLaMP-DPO(Contrastive Language-Music Pretraining with Direct Preference Optimization)方法,对比学习模型 CLaMP² 提供反馈,优化生成音乐的质量和一致性,无需人工标注或预定义奖励。生成的音乐样本根据 CLaMP² 的评分被分为“选择”和“拒绝”两类,基于 DPO 算法优化模型,提升生成音乐的音乐性和可控性。
- 符号音乐表示:用 ABC 符号表示乐谱,简化编码和生成过程,支持多声部音乐的生成。基于去除全休止符、添加小节索引等方法优化数据,提升生成效率和质量。
- 模型架构:基于层次化的 Transformer 解码器,包括 patch-level decoder 和 character-level decoder,分别处理音乐片段和符号生成。结合 CLaMP² 提供的多模态反馈,优化生成音乐的全局特征(如风格、和声、结构)。
如何运行 NotaGen
环境设置
conda create --name notagen python=3.10
conda activate notagen
conda install pytorch==2.3.0 pytorch-cuda=11.8 -c pytorch -c nvidia
pip install accelerate
pip install optimum
pip install -r requirements.txt
模型权重
预训练
我们提供了不同规模的预训练权重:
模型 | 参数 | Patch-level Decoder 层数 | Character-level Decoder 层数 | 隐藏层大小 | Patch 长度(上下文长度) |
---|---|---|---|---|---|
NotaGen-small | 110M | 12 | 3 | 768 | 2048 |
NotaGen-medium | 244M | 16 | 3 | 1024 | 2048 |
NotaGen-large | 516M | 20 | 6 | 1280 | 1024 |
- NotaGen-small 模型权重:https://huggingface.co/ElectricAlexis/NotaGen/blob/main/weights_notagen_pretrain_p_size_16_p_length_2048_p_layers_12_c_layers_3_h_size_768_lr_0.0002_batch_8.pth
- NotaGen-medium 模型权重:https://huggingface.co/ElectricAlexis/NotaGen/blob/main/weights_notagen_pretrain_p_size_16_p_length_2048_p_layers_16_c_layers_3_h_size_1024_lr_0.0001_batch_4.pth
- NotaGen-large 模型权重:https://huggingface.co/ElectricAlexis/NotaGen/blob/main/weights_notagen_pretrain_p_size_16_p_length_1024_p_layers_20_c_layers_6_h_size_1280_lr_0.0001_batch_4.pth
微调
我们在约9000首古典作品上微调了 NotaGen-large
。你可以下载权重:
强化学习
在预训练和微调之后,我们使用 CLaMP-DPO
对 NotaGen-large
进行了3次迭代优化。你可以下载权重:
NotaGen-X
我们进一步优化了训练过程,并发布了更好的版本——NotaGen-X
。与论文中的版本相比,NotaGen-X 引入了以下改进:
-
在预训练和微调之间引入了后训练阶段,使用古典风格的数据子集进一步优化模型。
-
在微调阶段移除了键增强,使生成的乐器范围更加合理。
-
在强化学习之后,我们使用生成的检查点收集新的后训练数据,并进行了另一轮后训练、微调和强化学习。
-
NotaGen-X 模型权重:https://huggingface.co/ElectricAlexis/NotaGen/blob/main/weights_notagenx_p_size_16_p_length_1024_p_layers_20_h_size_1280.pth
Gradio 演示
我们为 NotaGen-X 开发了一个本地 Gradio 演示。你可以输入“时期-作曲家-乐器”作为提示,让 NotaGen 生成音乐!
部署 NotaGen-X 推理需要至少 24GB 的 GPU 内存。
1. 环境搭建
首先,需要搭建运行环境。以下是完整的环境设置步骤:
conda create --name notagen python=3.10
conda activate notagen
conda install pytorch==2.3.0 pytorch-cuda=11.8 -c pytorch -c nvidia
pip install accelerate
pip install optimum
pip install -r requirements.txt
这些命令将创建一个名为 notagen
的 Python 环境,并安装运行所需的依赖项,包括 PyTorch、CUDA、以及其他相关库。
2. 下载 NotaGen-X 模型
接下来,下载NotaGen-X 模型文件
,并将其放置在 gradio/
目录下。
- NotaGen-X 模型文件:https://huggingface.co/ElectricAlexis/NotaGen/blob/main/weights_notagenx_p_size_16_p_length_1024_p_layers_20_h_size_1280.pth
该模型文件是用于生成音乐的核心部分,支持基于条件的音乐生成。
3. 运行 demo.py
完成环境搭建和模型下载后,可以运行 demo.py
文件以启动 Gradio Demo。
cd gradio/
python demo.py
执行上述命令后,Gradio Demo 将在本地启动。您可以通过浏览器访问 0.0.0.0:7861
查看 Demo 页面。
4. 使用 NotaGen 的功能
在 Demo 页面中,您可以选择不同的条件组合来生成音乐。这些条件包括:
- Period(时期):音乐风格所属的历史时期。
- Composer(作曲家):特定作曲家的风格。
- Instrumentation(乐器配置):生成音乐的乐器组合。
选择条件后,点击生成按钮,NotaGen 将根据所选条件生成音乐。生成完成后,您可以将生成的音乐保存为 ABC 格式或 MusicXML 文件。
需要注意的是,当前支持的条件组合数量为 112 种。这一限制源于微调数据集中每种条件组合下的音乐片段数量。未来,我们计划扩展条件组合的种类和形式,以进一步丰富生成的音乐内容。
资源
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦