今日arXiv最热大模型论文:点击即可播放!港中文发布大模型写歌神器!

一首歌,包含作词作曲两个部分。擅长作词or作曲就已经很牛了。比如方文山是周杰伦的御用作词人,而周杰伦写过很多耳熟能详的曲子。而兼具作词作曲才华的全能创作人却是难得一见。

最近港中文发布了一款歌曲创作大模型SongComposer,作词作曲都不在话下。 并且擅长让歌词和旋律相互交融,让整首歌听起来更加和谐。

先来几个小demo一起欣赏一下:

根据歌词编写旋律

歌词:突如其来的那一场 谁在路旁 在路旁 听见我自由放声唱 和我一样 背上行囊 脚步丈量远方

根据旋律作词:

给出以下旋律:

生成的歌词:他们也曾像我一样 追着风跑着 却找不到方向 只能像我这样 停在路上 有一点累 却也不觉的 有一点心为了追逐梦想 我总是选择最难的路

最终合成的歌曲:

续写歌曲:

给出歌曲的开头

续写结果

根据文本生成歌曲:

甚至你需要输入“用悠扬的旋律和缓慢的节奏创作一首关于爱和自由的歌曲”,SongComposer就能根据文本提示生成一首包含词曲的歌:

怎么样,是不是听起来还不错,有那味了。如果再加上编曲老师的润色,一首完整度较高的流行歌曲就完成了!

除此之外,作者还发布了用于训练的歌词-旋律配对数据集,以及一套评估生成歌曲质量的指标,相信可以推动智能音乐创作往前迈进一大步!

论文标题:
SongComposer: A Large Language Model for Lyric and Melody Composition in Song Generation

公众号「夕小瑶科技说」后台回复“SongComposer”获取论文PDF!

SongCompose-PT Dataset

本节概述了SongCompose-PT数据集的编制、创建和结构,其中包括单独的歌词、旋律和在单词级别上将歌词与旋律同步的歌词-旋律配对集合。

纯歌词数据集

从两个在线来源收集纯歌词数据集:

  • Kaggle数据集,包括带有Spotify Valence标签的15万首歌曲的歌词。

  • Music Lyric Chatbot数据集,包含14万首中文歌曲的歌词。从28.3万首中英文歌曲中删选而来的高质量的歌词。

纯旋律数据集

为了将旋律数据集组织成基于文本的结构,使用MIDI文件作为纯旋律数据集,其结构简单,能够在没有复杂音频处理的情况下高效提取和操作旋律。

使用pretty midi解析MIDI文件,仅从中提取“旋律”或“人声”轨道,由于MIDI中的旋律被表示为随时间推移的一系列音符,每个音符具有特定的音高、开始和结束时间戳,最终获得一个旋律属性三元组列表,包括{音符音高、音符持续时间、休止符持续时间}。

其中约4.5万条条目来自LMD-matched MIDI数据集,约8万条来自网络爬虫。再进行必要的数据过滤以删除重复和质量不佳的样本,最终剩下大约2万个MIDI样本。

配对歌词-旋律数据集

大量歌词和旋律配对数据对于训练LLM进行歌曲创作非常重要。但是歌曲与旋律的对齐非常困难,需要详细的注释和特定的专业知识。它包括确保歌词与一个或多个旋律音符精确匹配,并标注精确的时间戳,如下图所示:

本文利用了来自LMD-full数据集的7,998首歌曲,以及来自Reddit数据集的4,199首歌曲。此外,还结合了OpenCpop数据集其中100首中文流行歌曲,以及M4Singer数据集其中700首高质量中文歌曲。

为了进一步丰富配对歌词-旋律数据,本文还抓取网络信息创建了一个包含4,000首经典中文歌曲的数据集。收集歌词-旋律数据的流程如下图所示:

  1. 数据来源爬取:搜集大量的mp3文件及其对应的歌词文件,包括句级别的时间戳。

  2. 歌词清理:使用GPT-4清理歌词文本中的不相关细节,如歌曲标题、艺术家姓名和制作信息。

  3. 分段切片:为了减轻长时间对齐的挑战和误差积累,根据歌词文件中提供的时间戳将音频和歌词切片为大约10秒的配对段落(每个段落大约三句)。

  4. 音乐源分离:利用UVR4这个公开的音乐分离工具,从原始音频中分离人声和伴奏部分。

  5. 歌声转录:使用数字音频工作站软件FL Studio5自动生成初步的乐谱,捕捉每个音符的音高和起始-结束时间。

  6. 词边界注释:通过Pypinyin6将歌词转换为音素序列,然后利用音频对齐工具——Montreal Forced Aligner获取歌词中每个词语的边界。

  7. 词级别对齐:利用动态时间扭曲(DTW)算法,根据起始-结束时间对单词和音符进行对齐。

最后,本文开发了一个包含约15K个配对歌词-旋律条目的数据集,其中约5K首为中文,10K首为英文。

SongComposer

LLM友好的歌曲表示

元组数据格式

为了将歌词和旋律输入到LLM中,一个直观的策略是按顺序排列它们,从一系列歌词开始,然后是一系列音符值和时长。然而,由于其顺序化方法,模型很难对齐歌词和旋律,导致产生不对齐的输出。

作者提出了一种统一的输入组织方式,利用基于元组的格式,其中每个元组代表一个离散的音乐单元,可以是一个歌词,一个旋律,或者一个歌词-旋律对。

具体来说,在纯歌词数据的情况下,在每个元组中插入一个单词。对于纯旋律,在每个元组中包括音调、音符时长和休息时长。对于歌词-旋律对,将歌词和相应的音符元素合并在同一个元组内。由于一个单词可以对应多个音符,一个单元组可能包含一个单词以及多个音符和它们各自的时长。使用竖线(|)来分隔不同的元组,并将元组序列作为LLM的输入,如下图所示。

这种元组格式明确地为模型提供了歌词和旋律之间的相互映射,有助于掌握元素之间的对应关系。

离散化时长

为了有效处理旋律中的时长信息,采用对数编码方案将时长分为预定义数量的bin,将连续的时长范围转换为一组离散值。这种为LLM提供的组织良好且简洁的输入增强了模型捕捉音乐内容的精确时间变化的能力。

具体来说,根据时长的统计分布,将它们截取到 [xmin, xmax]。对于任意时长x,编码过程定义如下:

设置 [xmin, xmax] = [-0.3, 6],bins = 512,ϵ = 1,这使得时长可编码为512个离散整数,最高可达6.3秒。相反,要将离散化值解码为原始时长:

词汇扩展

为了确保清晰度,通过引入由〈•〉符号表示的辅助标记,针对离散化的时间单位和音符值在模型词汇中推广表示形式。对于时间离散化,扩展了512个独特token,表示为。对于音乐音符的表示,标记了十个八度内的12个音高类别,从而添加了120个不同的音乐token。

两阶段训练

预训练阶段

为了丰富LLM的基础音乐知识,首先在大量纯歌词和纯旋律的语料库上对模型进行预训练。

对于旋律,采用音高移调来增强数据集。具体来说,将音高移动高低四个半音,从而将数据集扩大了九倍。

对于歌词将整首歌曲的数据拆分成基于句子的样本,每个样本包含五到十行。这种制定使得模型能够获得更加专注和相关的学习上下文,有助于更连贯地生成歌曲。

通过这种纯歌词和旋律的训练过程,模型已经获得了扎实的音乐知识基础,为更加关注歌词和旋律之间对应关系的高级学习奠定了坚实基础。随后,使用配对数据引导模型生成对齐的歌词-旋律对。根据经验,为了保留模型处理旋律和歌词的能力,以1:1:1样本比例向模型输入相等数量的纯旋律、纯歌词和配对数据。

总共有0.23B个歌词tokens、0.28B个旋律tokens和0.16B个配对数据tokens。所有数据都是使用元组数据格式输入的。

监督微调阶段

在将大量乐谱和歌词引入模型后,为歌曲生成制作指令遵循数据,包括给定歌词创建旋律、为旋律写歌词、扩展歌曲部分以及根据文本描述生成歌曲。其中,为前三个任务手动准备了3K个问答对。对于最后一个任务,使用GPT-4生成了1K首歌曲摘要,这些摘要又形成了一个文本到歌曲的数据集,指导了歌曲创作过程。

客观评价指标

本文还构建了一个包含1188首歌曲的验证集。其中,415首是中文歌曲,773首是英文歌曲。在后续测试中,将一些歌曲随机分割成5至10个句子。客观评估的重点是评估生成的输出与真实样本之间的相似性。

旋律生成

对于旋律评估,采用了SongMASS(提出的度量标准。其中包括音高分布相似度(PD)、时长分布相似度(DD)和旋律距离(MD)。由于与SongMASS相比的校准策略的不同,通过加法对齐ground truth和生成音符的平均音高。

歌词生成

在歌词生成方面,使用CoSENT模型,评估句子级别的对齐。该模型允许输入歌词,并计算生成歌词与原始歌词之间的余弦相似性。此外,结合ROUGE-2分数和BERT分数作为另外两个用于评估歌词生成的度量标准。ROUGE-2分数关注生成文本和原始文本之间的二元组重叠。BERT分数利用BERT-base multilingual uncased 模型基于上下文嵌入来衡量文本相似度。

主观评价指标

选取30名参与者对每个任务中有10个案例进行评价。评分范围为1到5,得分越高表示质量更高。

歌词到旋律生成

歌词到旋律生成要求根据给定的歌词创作出一段合适的旋律。对旋律进行评估包括:(1)和声(HMY.):评估旋律的整体质量。

(2)旋律-歌词兼容性(MLC.):检查生成的旋律与给定歌词之间的契合程度。

旋律到歌词生成

旋律到歌词生成旨在产生与提供的旋律相匹配的歌词。对歌词进行评估包括:(1)流畅性(FLN.):考虑生成歌词的语法正确性和语义连贯性。

(2)旋律-歌词兼容性(MLC.):检查生成歌词与给定旋律的契合程度。

歌曲延续性

歌曲延续涉及在旋律和歌词方面延长已有歌曲的部分。评估延续的质量包括:(1)整体质量(OVL.):衡量生成歌曲的整体质量,以其音乐吸引力为标准。(2)与歌曲提示的一致性(COH.):分析延续与提供的歌曲提示之间的自然融合,评估旋律、歌词和其他音乐元素的连贯性。

文本到歌曲生成

歌曲延续根据文本描述生成完整的歌曲,以音乐和歌词的形式捕捉其本质。评估重点包括:(1)整体质量(OVL.):衡量生成歌曲的整体质量,以其音乐吸引力为标准。(2)与文本输入相关性(REL.):检查生成歌曲与输入文本的对齐度和相关性。

实验结果

歌词到旋律生成

如上表所示,该方法在调性分布相似度(PD)和时长分布相似度(DD)方面优于先进的语言模型,比GPT-4高出10个多点,并在中英双语中实现了最低的旋律距离(MD)。

▲主观评估

另外,在主观评估中发现SongComposer在和声和旋律-歌词的搭配方面比GPT-3.5和GPT-4要好很多。这意味SongComposer更擅长让歌词和旋律相互配合得更好,让整首歌听起来更和谐。

旋律至歌词生成

该方法在生成与原始歌词紧密匹配的歌词方面非常有效。主观评估显示,用户们一致认为SongComposer在产生歌词方面非常流畅且与旋律高度相关,能够有效地捕捉并补充底层旋律的节奏。

歌曲延续

SongComposer不仅能够独立产出高质量的歌词和旋律,还能够将它们结合起来,使整首歌听起来更和谐。

文本至歌曲生成

在文本至歌曲生成的主观评估中,SongComposer可以根据文本提示创作出旋律优美、主题和情感完美契合的歌曲。

消融实验

在消融研究中本文报告了针对歌词到旋律和旋律到歌词任务的旋律距离(MD)和BERT分数。

预训练数据集

为了探究专门数据集对模型学习的影响,作者使用了不同纯歌词和纯旋律数据集的配对数据进行训练实验,结果如下表所示:

研究结果显示,如果省略了纯歌词和纯旋律的数据集,模型的性能会明显下降。这表明在训练的早期阶段,基础旋律和抒情知识的重要性。纯歌词数据集主要提高了旋律到歌词任务的性能,而纯旋律数据集则更明显地提高了旋律生成的水平。而结合歌词和旋律数据集能够带来最佳的效果。

旋律知识的扩展词汇

为了了解专门用于旋律知识的标记是否有利于SongComposer的性能,本文对不同的标记组合进行了消融,评估它们对模型处理和生成音乐内容的影响,如下表所示:

首先,在时长标记方面,直接将原始基于浮点数的秒数输入到SongComposer中,而非应用离散数字。缺乏特殊时间标记将导致模型无法为歌词到旋律任务生成正确结果。

相反,引入离散时长标记显著提高了旋律到歌词任务的表现,无论是否引入音符标记,BERT分数都提高了超过0.03。这验证了时长离散化对掌握旋律结构的重要性。

其次,采用音符标记在两个任务中都带来了显著改进,使用音符标记有助于模型更好地理解音符的含义,并提高了学习的效果。

结论

SongComposer利用符号化的歌曲表示法来生成旋律和歌词,在各种任务中表现出色,如将歌词转换为旋律、旋律生成歌词、歌曲延续和基于文本描述的歌曲创作,甚至在性能上超越了像GPT-4这样的先进LLM模型。

相信SongComposer可以为LLM在音乐领域的创意应用开辟新的途径。

公众号「夕小瑶科技说」后台回复“SongComposer”获取论文PDF!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2821943.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

DiskMirror-spring-boot-starter 技术|

DiskMirror-spring-boot-starter 技术 diskMirror 实现了 SpringBoot 的 starter 能够集成到 SpringBoot 中。 DiskMirror 的 starter,通过引入此类,可以直接实现 diskMirror 在 SpringBoot 中的自动配置,接下来我们将使用案例逐步的演示 d…

飞腾平台编译安装openGauss数据库

1. 环境检查 1.1 检查OS版本 openGauss支持的操作系统: CentOS 7.6(x86_64 架构)openEuler-20.03-LTS(aarch64 架构)openEuler-20.03-LTS(x86_64架构)Kylin-V10(aarch64 架构&…

作业1-224——P1015 [NOIP1999 普及组] 回文数

题目描述 思路 首先此题为一道高精度题,然后本题按照题目意思模拟即可。我们可以开两个数组来记录高精度数字,这样方便我们处理。判断“该数组是否回文”、“c翻转存入d再做cd”可以写成两个单独的函数。然后主程序组织一下他们即可。注意好退出循环的…

String类的使用

String常用的构造方法 String的源码 内部是一个数组和hash值,涉及到常量池后续补充(常量池:存储相同的字符时只会存储一租) String的比较 equals()与:String里面为我们提供了许多方法,可直接调用&#xf…

electron 项目环境变量使用注意 public

问题 最近项目中,electron需要调用唤醒本地的另一个客户端程序,但是这个客户端程序报错了。sqlite3 报out of memory. apiSHGetFolderPathW 获取CSIDL_COMMON_DOCUMENTS报 1008,试图引用不存在的令牌。 排查 一看到这个,首先想…

苍穹外卖Day03——解决总结3中存在的问题

解决Day03中存在的问题 1. ResponseBody 与 RequestBody2. RequestParam 与 PathVariable3. 字段填充技术(注解、AOP、反射)3.1. AOP3.2. 注解3.3. 反射3.5 字段填充在项目应用 4. 阿里云云存储OOS 1. ResponseBody 与 RequestBody ResponseBody&…

varFormatter 数据格式化库 以性能优先的 快速的 内存对象格式转换

varFormatter 数据格式化 技术 开源技术栏 对象/变量格式化工具库,其支持将一个对象进行按照 JSON XML HTML 等格式进行转换,并获取到结果字符串! 目录 文章目录 varFormatter 数据格式化 技术目录介绍获取方式 使用实例格式化组件的基本使…

WIN10 无密码自动登录

1、家里重装了一下WIN10系统,第一次登陆居然用了微软网站账号,结果密码忘记了,后面只能用PIN码登陆系统。 2、需要登录微软的网站修改密码: Microsoft account | Sign In or Create Your Account Today – Microsoft 3、在运行…

【C语言】动态内存管理常用函数

前言 我们在之前学习的数组开辟的空间是固定不变的,有时候我们需要的空间⼤⼩在程序运⾏的时候才能知道~ c语言中的动态内存开辟,让程序员⾃⼰可以根据实际需求申请和释放相应空间,这使得空间的开辟变得灵活了许多。 欢迎关注个人主页&#x…

数据库原理及应用 第三章:关系数据模型

文章目录 三、关系数据模型3.1.1关系模型概述3.1.2候选键和外键3.2关系模型的完整性 三、关系数据模型 3.1.1关系模型概述 3.1.2候选键和外键 3.2关系模型的完整性

写作软件,批量写作文章的软件

在信息爆炸的时代,写作软件成为许多人提高效率、优化内容的利器。本文将介绍6款不同的写作软件,以及知名的147GPT生成工具和文心一言AI生成软件,它们不仅可以帮助用户快速生成原创文章,还支持全自动SEO优化,提升文章在…

wy的leetcode刷题记录_Day79

wy的leetcode刷题记录_Day79 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间:2024-3-1 前言 目录 wy的leetcode刷题记录_Day79声明前言2369. 检查数组是否存在有效划分题目介绍思路代码收获 61. 旋转链表题目介绍思路代码收获 82. 删除排…

【Vue】npm run build 打包报错:请在[.env.local]中填入key后方可使用...

报错如下 根目录添加 .env.local 文件 .env.local :本地运行下的配置文件 配置:VUE_GITHUB_USER_NAME 及 VUE_APP_SECRET_KEY 原因

【研发日记】Matlab/Simulink技能解锁(二)——在Function编辑窗口Debug

目录 前言 行断点 条件断点 前言 见《【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug》 行断点 当Matlab Function出现异常时,如果能确定大致的代码段,就可以在相应的行上设置一个断点(Breakpoint)&…

Oracle 11g升级19c 后部分查询功能很慢

*Oracle 11g升级19c 后部分查询功能很慢 今天生产突然有个查询非常慢,日志显示执行了50秒左右,但是从日志中拿出SQL在PLSQL执行,发现用时不到1秒,查看SQL,怀疑是下面几种原因导致 1、使用函数不当 UNIT.UNIT_CODE LIKE CONCAT(‘…

b站小土堆pytorch学习记录——P7-P8 Tensorboard的使用

文章目录 一、前置知识1.Tensorboard是什么2.SummaryWriter3.add_scalar()4.add_image() 二、代码1.一次函数2.蚂蚁和蜜蜂图片 一、前置知识 1.Tensorboard是什么 TensorBoard 是 TensorFlow 的可视化工具,它允许开发者可视化模型的图(graph&#xff0…

栈(顺序栈)实现Language C

###王道考研的学习领悟,个人喜好讲解清晰 何为栈? 定义:栈(stack)是只允许在一端进行插入或删除的线性表。 其重要术语:栈顶,栈底,空栈。 我们只需要把这个图看明白了,理解起来就…

electron+vue3全家桶+vite项目搭建【28】封装窗口工具类【2】窗口组,维护窗口关系

文章目录 引入实现效果思路主进程模块渲染进程模块测试效果 引入 demo项目地址 窗口工具类系列文章: 封装窗口工具类【1】雏形 我们思考一下窗口间的关系,窗口创建和销毁的一些动作,例如父子窗口,窗口组合等等,还有…

Prometheus(二):NodeExporter和Grafana的安装和使用

目录 1 Node Exporter安装1.1 简介1.2 安装1.3 Prometheus收集node_exporter数据 2 安装Grafana2.1 安装2.2 使用1、创建数据源2、选择模板3、模板导入 2.3 grafana创建用户1、创建用户2、验证 总结 1 Node Exporter安装 1.1 简介 node exporter是Prometheus的收集数据的组件…

GCN 翻译 - 1

ABSTRACT 我们提出了一种可扩展的在以图结构为基础的数据上的半监督学习,这种方法直接作用在图数据上,可以看做是卷积神经网络的变种。我们选择了图谱理论里面的一阶近似作为我们的卷积结构。我们的模型能够随着图的规模线性伸缩,并且隐藏层…